3
0
Fork 0

primer commit

master
Francisco Sandoval 2023-12-10 19:17:03 -03:00
commit e0cce1da4f
5 changed files with 227 additions and 0 deletions

94
main.py 100644
View File

@ -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()

41
readme.md 100644
View File

@ -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:
~~~

4
requirements.txt 100644
View File

@ -0,0 +1,4 @@
google
protobuf
redis[hiredis]
pytz

File diff suppressed because one or more lines are too long