From 98dee2613423fae957d00059c26ba8db0c46c5cb Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Tue, 12 Dec 2023 22:49:30 -0300 Subject: [PATCH] guarda los trayectos en redis --- main.py | 113 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 79 insertions(+), 34 deletions(-) diff --git a/main.py b/main.py index 1c399ec..d6e1f55 100644 --- a/main.py +++ b/main.py @@ -13,18 +13,19 @@ r = redis.Redis(host=db_host, port=db_port, decode_responses=True) def main(): print(datetime.now(tz)) - print("hola") + # print("hola") content = download_file_proto() if content == None: return False - data = read_file_proto(content) + data = read_file_proto_x_stop(content) # save data to redis db - for row in data: - key = f'stop_id:{row["stop_id"]}' - r.set(key, json.dumps(row)) + for key in data: + r.set(key, json.dumps(data[key])) + + # print(json.dumps(data['route:549-1'], indent=4)) def download_file_proto(): @@ -33,10 +34,14 @@ def download_file_proto(): return response.content return None -def read_file_proto(content): + +""" +agrupa los trayectos a llegar al paradero +""" +def read_file_proto_x_stop(content): feed = gtfs.FeedMessage() feed.ParseFromString(content) - data_list = [] + data_stop = {} for entity in feed.entity: if entity.HasField('trip_update'): @@ -57,38 +62,78 @@ def read_file_proto(content): } 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) + 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: + # 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.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 + "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 } - 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) + + 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 ] - filtered_list = [item for item in data_list if item["stop_id"] > " "] - return filtered_list; + return data_route; main() \ No newline at end of file