guarda los trayectos en redis

master
Francisco Sandoval 2023-12-12 22:49:30 -03:00
parent ad5548a38b
commit 98dee26134
1 changed files with 79 additions and 34 deletions

113
main.py
View File

@ -13,18 +13,19 @@ r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
def main(): def main():
print(datetime.now(tz)) print(datetime.now(tz))
print("hola") # print("hola")
content = download_file_proto() content = download_file_proto()
if content == None: if content == None:
return False return False
data = read_file_proto(content) data = read_file_proto_x_stop(content)
# save data to redis db # save data to redis db
for row in data: for key in data:
key = f'stop_id:{row["stop_id"]}' r.set(key, json.dumps(data[key]))
r.set(key, json.dumps(row))
# print(json.dumps(data['route:549-1'], indent=4))
def download_file_proto(): def download_file_proto():
@ -33,10 +34,14 @@ def download_file_proto():
return response.content return response.content
return None 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 = gtfs.FeedMessage()
feed.ParseFromString(content) feed.ParseFromString(content)
data_list = [] data_stop = {}
for entity in feed.entity: for entity in feed.entity:
if entity.HasField('trip_update'): if entity.HasField('trip_update'):
@ -57,38 +62,78 @@ def read_file_proto(content):
} }
for update in entity.trip_update.stop_time_update: for update in entity.trip_update.stop_time_update:
data_dict = trip_data.copy() key = f'stop_id:{update.stop_id}'
data_dict["stop_sequence"] = update.stop_sequence if update.stop_id in data_stop:
data_dict["stop_id"] = update.stop_id data_stop[key].append(trip_data)
data_dict["arrival_time"] = update.arrival.time else:
data_dict["hora_llegada"] = datetime.fromtimestamp(update.arrival.time).strftime('%Y-%m-%d %H:%M:%S') data_stop[key] = [ trip_data ]
data_list.append(data_dict) # 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 = { trip_data = {
"id": str(entity.id), "id": str(entity.id),
"trip_id": entity.vehicle.trip.trip_id, "trip_id": entity.trip_update.trip.trip_id,
"route_id":entity.vehicle.trip.route_id, "route_id": entity.trip_update.trip.route_id,
"direction_id": entity.vehicle.trip.direction_id, "direction_id": entity.trip_update.trip.direction_id,
"start_time": entity.vehicle.trip.start_time, "start_time": entity.trip_update.trip.start_time,
"start_date": entity.vehicle.trip.start_date, "start_date": entity.trip_update.trip.start_date,
"schedule_relationship": entity.vehicle.trip.schedule_relationship, "schedule_relationship": entity.trip_update.trip.schedule_relationship,
"vehicle_license_plate": entity.vehicle.vehicle.license_plate, "vehicle_license_plate": entity.trip_update.vehicle.license_plate,
"latitude": entity.vehicle.position.latitude, "latitude": entity.vehicle.position.latitude,
"longitude": entity.vehicle.position.longitude, "longitude": entity.vehicle.position.longitude,
"bearing": entity.vehicle.position.bearing, "bearing": entity.vehicle.position.bearing,
"odometer": entity.vehicle.position.odometer, "odometer": entity.vehicle.position.odometer,
"speed": entity.vehicle.position.speed "speed": entity.vehicle.position.speed
} }
data_dict = trip_data.copy()
data_dict["stop_sequence"] = "" for update in entity.trip_update.stop_time_update:
data_dict["stop_id"] = "" key = f'route:{trip_data["route_id"]}-{trip_data["direction_id"]}'
data_dict["arrival_time"] = "" if key in data_route:
data_dict["hora_llegada"] = "" data_route[key].append(trip_data)
data_list.append(data_dict) else:
data_route[key] = [ trip_data ]
filtered_list = [item for item in data_list if item["stop_id"] > " "] return data_route;
return filtered_list;
main() main()