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()