forked from TDTP/proto_backend
primer commit
commit
e0cce1da4f
|
@ -0,0 +1,94 @@
|
||||||
|
from datetime import datetime
|
||||||
|
from os import getenv
|
||||||
|
import utils.gtfs_realtime_pb2 as gtfs
|
||||||
|
import pytz
|
||||||
|
import redis
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
|
||||||
|
db_host = getenv('DB_REDIS_HOST')
|
||||||
|
db_port = getenv('DB_REDIS_PORT')
|
||||||
|
tz = pytz.timezone(getenv('TZ'))
|
||||||
|
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print(datetime.now(tz))
|
||||||
|
print("hola")
|
||||||
|
|
||||||
|
content = download_file_proto()
|
||||||
|
if content == None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
data = read_file_proto(content)
|
||||||
|
|
||||||
|
# save data to redis db
|
||||||
|
for row in data:
|
||||||
|
key = f'stop_id:{row["stop_id"]}'
|
||||||
|
r.set(key, json.dumps(row))
|
||||||
|
|
||||||
|
|
||||||
|
def download_file_proto():
|
||||||
|
response = requests.get('https://app.ilab.cl/gtfs-rt/api/concepcion')
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.content
|
||||||
|
return None
|
||||||
|
|
||||||
|
def read_file_proto(content):
|
||||||
|
feed = gtfs.FeedMessage()
|
||||||
|
feed.ParseFromString(content)
|
||||||
|
data_list = []
|
||||||
|
|
||||||
|
for entity in feed.entity:
|
||||||
|
if entity.HasField('trip_update'):
|
||||||
|
trip_data = {
|
||||||
|
"id": str(entity.id),
|
||||||
|
"trip_id": entity.trip_update.trip.trip_id,
|
||||||
|
"route_id": entity.trip_update.trip.route_id,
|
||||||
|
"direction_id": entity.trip_update.trip.direction_id,
|
||||||
|
"start_time": entity.trip_update.trip.start_time,
|
||||||
|
"start_date": entity.trip_update.trip.start_date,
|
||||||
|
"schedule_relationship": entity.trip_update.trip.schedule_relationship,
|
||||||
|
"vehicle_license_plate": entity.trip_update.vehicle.license_plate,
|
||||||
|
"latitude": entity.vehicle.position.latitude,
|
||||||
|
"longitude": entity.vehicle.position.longitude,
|
||||||
|
"bearing": entity.vehicle.position.bearing,
|
||||||
|
"odometer": entity.vehicle.position.odometer,
|
||||||
|
"speed": entity.vehicle.position.speed
|
||||||
|
}
|
||||||
|
|
||||||
|
for update in entity.trip_update.stop_time_update:
|
||||||
|
data_dict = trip_data.copy()
|
||||||
|
data_dict["stop_sequence"] = update.stop_sequence
|
||||||
|
data_dict["stop_id"] = update.stop_id
|
||||||
|
data_dict["arrival_time"] = update.arrival.time
|
||||||
|
data_dict["hora_llegada"] = datetime.fromtimestamp(update.arrival.time).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
data_list.append(data_dict)
|
||||||
|
|
||||||
|
else:
|
||||||
|
trip_data = {
|
||||||
|
"id": str(entity.id),
|
||||||
|
"trip_id": entity.vehicle.trip.trip_id,
|
||||||
|
"route_id":entity.vehicle.trip.route_id,
|
||||||
|
"direction_id": entity.vehicle.trip.direction_id,
|
||||||
|
"start_time": entity.vehicle.trip.start_time,
|
||||||
|
"start_date": entity.vehicle.trip.start_date,
|
||||||
|
"schedule_relationship": entity.vehicle.trip.schedule_relationship,
|
||||||
|
"vehicle_license_plate": entity.vehicle.vehicle.license_plate,
|
||||||
|
"latitude": entity.vehicle.position.latitude,
|
||||||
|
"longitude": entity.vehicle.position.longitude,
|
||||||
|
"bearing": entity.vehicle.position.bearing,
|
||||||
|
"odometer": entity.vehicle.position.odometer,
|
||||||
|
"speed": entity.vehicle.position.speed
|
||||||
|
}
|
||||||
|
data_dict = trip_data.copy()
|
||||||
|
data_dict["stop_sequence"] = ""
|
||||||
|
data_dict["stop_id"] = ""
|
||||||
|
data_dict["arrival_time"] = ""
|
||||||
|
data_dict["hora_llegada"] = ""
|
||||||
|
data_list.append(data_dict)
|
||||||
|
|
||||||
|
filtered_list = [item for item in data_list if item["stop_id"] > " "]
|
||||||
|
return filtered_list;
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
# file: docker-compose.yml
|
||||||
|
|
||||||
|
~~~yml
|
||||||
|
version: '3'
|
||||||
|
name: proto
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
app:
|
||||||
|
image: python:3.11-alpine
|
||||||
|
environment:
|
||||||
|
- DB_REDIS_HOST=dbproto
|
||||||
|
- DB_REDIS_PORT=6379
|
||||||
|
- TZ=America/Santiago
|
||||||
|
volumes:
|
||||||
|
- ./proto:/app
|
||||||
|
- venv_proto:/root/venv
|
||||||
|
working_dir: /app
|
||||||
|
command: sh -c "
|
||||||
|
[ -d /root/venv/bin ] || ( \
|
||||||
|
python -m venv /root/venv/ \
|
||||||
|
&& . /root/venv/bin/activate \
|
||||||
|
&& pip install -r requirements.txt \
|
||||||
|
) ;
|
||||||
|
|
||||||
|
. /root/venv/bin/activate ;
|
||||||
|
|
||||||
|
cd /app ;
|
||||||
|
[ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
|
||||||
|
watch -n 30 -t python main.py
|
||||||
|
"
|
||||||
|
|
||||||
|
dbproto:
|
||||||
|
image: redis:7.2-alpine
|
||||||
|
ports:
|
||||||
|
- 6379:6379
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
venv_proto:
|
||||||
|
~~~
|
|
@ -0,0 +1,4 @@
|
||||||
|
google
|
||||||
|
protobuf
|
||||||
|
redis[hiredis]
|
||||||
|
pytz
|
Binary file not shown.
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue