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_x_stop(content) # save data to redis db for key in data: r.set(key, json.dumps(data[key])) # print(json.dumps(data['route:549-1'], indent=4)) 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 """ agrupa los trayectos a llegar al paradero """ def read_file_proto_x_stop(content): feed = gtfs.FeedMessage() feed.ParseFromString(content) data_stop = {} 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: key = f'stop_id:{update.stop_id}' if update.stop_id in data_stop: data_stop[key].append(trip_data) else: data_stop[key] = [ trip_data ] # 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) return data_stop; """ agrupa los trayectos hechos por linea """ def read_file_proto_x_route(content): feed = gtfs.FeedMessage() feed.ParseFromString(content) data_route = {} 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: key = f'route:{trip_data["route_id"]}-{trip_data["direction_id"]}' if key in data_route: data_route[key].append(trip_data) else: data_route[key] = [ trip_data ] return data_route; main()