3
0
Fork 0
ilab_proto_backend/main.py

94 lines
3.5 KiB
Python
Raw Normal View History

2023-12-10 19:17:03 -03:00
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()