forked from TDTP/proto_backend
primer commit
commit
e0cce1da4f
|
@ -0,0 +1,94 @@
|
|||
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()
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
# file: docker-compose.yml
|
||||
|
||||
~~~yml
|
||||
version: '3'
|
||||
name: proto
|
||||
|
||||
services:
|
||||
|
||||
app:
|
||||
image: python:3.11-alpine
|
||||
environment:
|
||||
- DB_REDIS_HOST=dbproto
|
||||
- DB_REDIS_PORT=6379
|
||||
- TZ=America/Santiago
|
||||
volumes:
|
||||
- ./proto:/app
|
||||
- venv_proto:/root/venv
|
||||
working_dir: /app
|
||||
command: sh -c "
|
||||
[ -d /root/venv/bin ] || ( \
|
||||
python -m venv /root/venv/ \
|
||||
&& . /root/venv/bin/activate \
|
||||
&& pip install -r requirements.txt \
|
||||
) ;
|
||||
|
||||
. /root/venv/bin/activate ;
|
||||
|
||||
cd /app ;
|
||||
[ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
|
||||
watch -n 30 -t python main.py
|
||||
"
|
||||
|
||||
dbproto:
|
||||
image: redis:7.2-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
volumes:
|
||||
venv_proto:
|
||||
~~~
|
|
@ -0,0 +1,4 @@
|
|||
google
|
||||
protobuf
|
||||
redis[hiredis]
|
||||
pytz
|
Binary file not shown.
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue