forked from TDTP/proto_backend
94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
![]() |
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()
|