diff --git a/GenPoster/__pycache__/import_data.cpython-310.pyc b/GenPoster/__pycache__/import_data.cpython-310.pyc new file mode 100644 index 0000000..34bbb78 Binary files /dev/null and b/GenPoster/__pycache__/import_data.cpython-310.pyc differ diff --git a/GenPoster/__pycache__/import_data.cpython-38.pyc b/GenPoster/__pycache__/import_data.cpython-38.pyc new file mode 100644 index 0000000..788ef28 Binary files /dev/null and b/GenPoster/__pycache__/import_data.cpython-38.pyc differ diff --git a/GenPoster/app.py b/GenPoster/app.py index 752231c..7b4b2d8 100644 --- a/GenPoster/app.py +++ b/GenPoster/app.py @@ -3,6 +3,7 @@ from scripts.Poster.BusPoster import BusPoster from scripts.Poster.TimeAnnouncement import TimeAnnouncement import numpy as np from datetime import datetime, timedelta +from import_data import export_data from PIL import Image def reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto): @@ -47,7 +48,7 @@ def approx_km(data): return approx_km def calc_remaining_time(data): - arrival_time = data["timeLabel"] + arrival_time = data["timeLabel"][:-3] target_time = datetime.strptime(arrival_time, "%H:%M").time() current_time = datetime.now().time() @@ -87,18 +88,25 @@ def obtain_min_max_time(remaining_time): def main(): # Carga los datos - data = load_data() + #data = load_data() + data = export_data() + data1 = data[0] + data2 = data[1] + + print(data) # Calcula el tiempo restante a la llegada - remaining_time = calc_remaining_time(data) + remaining_time1 = calc_remaining_time(data1) + remaining_time2 = calc_remaining_time(data2) # Obtiene valores máximos y mínimo de rangos para desplegar en pantalla - min_time, max_time = obtain_min_max_time(remaining_time) + min_time1, max_time1 = obtain_min_max_time(remaining_time1) + min_time2, max_time2 = obtain_min_max_time(remaining_time2) # Selecciona el tema - theme = 'day' + theme = 'night' # Alto y ancho de la imagen en pixeles - # height, width = 40, 160 + #height, width = 40, 160 height, width = 200, 800 # Inicia el dibujo y setea el tema @@ -112,7 +120,7 @@ def main(): time_anmc1.start_draw() # time_anmc1.set_background() # time_anmc1.set_base_text() - time_anmc1.set_min_max_text(min_time=min_time, max_time=max_time) + time_anmc1.set_min_max_text(min_time=min_time1, max_time=max_time1) # Agrega el anuncio de los minutos restante al arribo time_anmc2 = TimeAnnouncement(aprox((2/5)*height), aprox((1/3)*width)) @@ -120,8 +128,8 @@ def main(): time_anmc2.start_draw() # time_anmc2.set_background() # time_anmc2.set_base_text() - time_anmc2.set_min_max_text(min_time=3, max_time=5) - + time_anmc2.set_min_max_text(min_time=min_time2, max_time=max_time2) + # Genera la imagen de la linea del bus poster1 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width)) poster1.set_theme(theme) @@ -140,9 +148,10 @@ def main(): poster1.set_params(bus_announcement_1) poster1.load_barlow() poster1.set_colors() + # Se setea la ruta y la direccion en la que va - poster1.set_bus_number(bus_number=data["route"]) - poster1.set_bus_letter(bus_letter=data["direction"]) + poster1.set_bus_number(bus_number=data1["route"]) + poster1.set_bus_letter(bus_letter=data1["direction"]) # Genera la imagen de la linea del bus poster2 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width)) @@ -163,27 +172,24 @@ def main(): poster2.load_barlow() poster2.set_colors() # Se setea la ruta y la direccion en la que va - poster2.set_bus_number(bus_number="16") - poster2.set_bus_letter(bus_letter="H") + poster2.set_bus_number(bus_number=data2["route"]) + poster2.set_bus_letter(bus_letter=data2["direction"]) # Se agregan todas las imagenes al canvas full_panel.add_image(time_anmc1, (aprox((0.6)*width), aprox(0.05*height))) full_panel.add_image(time_anmc2, (aprox((0.6)*width), aprox(0.45*height))) full_panel.add_image(poster1, (aprox((0.05)*width), aprox((0.1)*height))) full_panel.add_image(poster2, (aprox((0.05)*width), aprox((0.5)*height))) - # full_panel.add_image(bm, (aprox(0.02*width),aprox((1/6)*height))) + #full_panel.add_image(bm, (aprox(0.02*width),aprox((1/6)*height))) full_panel.get_image() - input_path = f'/app/example/poster_{height}_{width}.png' - full_panel.save_image(input_path) - # Ejemplo de uso: + full_panel.save_image('/app/example/poster.png') nuevo_alto = 40 # Reemplaza con el alto deseado en píxeles nuevo_ancho = 160 # Reemplaza con el ancho deseado en píxeles - + input_path = f'/app/example/poster.png' output_path = f'/app/example/poster_{nuevo_alto}_{nuevo_ancho}.png' reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto) - if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/GenPoster/example/poster.png b/GenPoster/example/poster.png index 80be3c1..d14433e 100644 Binary files a/GenPoster/example/poster.png and b/GenPoster/example/poster.png differ diff --git a/GenPoster/example/poster_40_160.png b/GenPoster/example/poster_40_160.png index 994b533..96e123d 100644 Binary files a/GenPoster/example/poster_40_160.png and b/GenPoster/example/poster_40_160.png differ diff --git a/GenPoster/import_data.py b/GenPoster/import_data.py new file mode 100644 index 0000000..89a6b8c --- /dev/null +++ b/GenPoster/import_data.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +import requests +import json +from datetime import datetime, timedelta + +def api_request(): + # URL de la API para "autentificación" + url_auth = 'https://transporte.hz.kursor.cl/api/auth/' + + # Datos para autentificar + auth = '''{ + "username": "usuario1", + "password": "usuario1" + }''' + + # Request + token = requests.post(url_auth, data=auth) + token = token.json()['token'] + + # URL de la API para info del paradero + url_whoami = 'https://transporte.hz.kursor.cl/api/dispositivos/whoami/' + + # Datos de la solicitud + data_whoami = { + "whoami": { + "idDispositivo": "pled30-gtr", + "KeyAuthorizacion": "token" + } + } + + #Aquí se ingresa el token obtenido anteriormente + headers_whoami = { + 'Authorization': f'Bearer {token}', + 'Content-Type': 'application/json' + } + + response_whoami = requests.post(url_whoami, json=data_whoami, headers=headers_whoami) #Request + Paradero = response_whoami.json() + + url_getinfodevice = 'https://transporte.hz.kursor.cl/api/dispositivos/getInfoDevice/' # URL de la API para obtener los datos de los recorridos + + # Datos para la solicitud + data_getinfodevice = { + "GetInfoDevice": { + "idDispositivo": "00000000160f3b42b8:27:eb:0f:3b:42", + "KeyAuthorizacion": "tokenSinUso" + } + } + + #Aquí se ingresa el token obtenido anteriormente + headers_getinfodevice = { + 'Authorization': f'Bearer {token}', + 'Content-Type': 'application/json' + } + + # Request + response_getinfodevice = requests.post(url_getinfodevice, json=data_getinfodevice, headers=headers_getinfodevice) + info = response_getinfodevice.json() + + return info + +#-------------------------------------------------------------------------------------------------------------------------- + +#Haciendo una lista de todos los buses de este paradero + +def lista_buses(info): + data_main = [] + hora_actual = datetime.now().time() + + for i in range(len(info["GetInfoDeviceResponse"]["DetalleLineas"])): + + data = info["GetInfoDeviceResponse"]["DetalleLineas"][i] + + bus_info = {} + bus_info["distance"] = data["Llegadas"][0]["DistanciaGPS"] if data["Llegadas"][0]["DistanciaGPS"] is not None else "-" + bus_info["timeLabel"] = data["Llegadas"][0]["EstimadaGPS"] if data["Llegadas"][0]["EstimadaGPS"] is not None else "-" + bus_info["route"] = data["Descripcion"][:-1] if data["Descripcion"] is not None else "-" + bus_info["direction"] = data["Descripcion"][-1] if data["Descripcion"] is not None else "-" + bus_info["number_background_color"] = data["colorFondo"] + bus_info["letter_background_color"] = data["colorTexto"] + bus_info["patente"] = data["Llegadas"][0]["patente"] + diff = timedelta(hours = datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().hour - hora_actual.hour,minutes = datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().minute - hora_actual.minute,seconds=datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().second - hora_actual.second) + bus_info["timeRemaining"] = int(abs(diff.total_seconds() // 60)) + data_main.append(bus_info) + + return data_main + +#-------------------------------------------------------------------------------------------------------------------------------- + +#Exportando datos +def export_data(): + X = api_request() + data_main = lista_buses(X) + data_time = sorted(data_main, key=lambda x: x['timeRemaining'],reverse=True) + + data_x = (data_time[0],data_time[1]) + return data_x diff --git a/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-310.pyc b/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-310.pyc new file mode 100644 index 0000000..7e091fc Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-310.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-38.pyc b/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-38.pyc new file mode 100644 index 0000000..869a67a Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/BusPoster.cpython-38.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-310.pyc b/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-310.pyc new file mode 100644 index 0000000..e1b6e57 Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-310.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-38.pyc b/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-38.pyc new file mode 100644 index 0000000..015a204 Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/MyDraw.cpython-38.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-310.pyc b/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-310.pyc new file mode 100644 index 0000000..3792d0f Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-310.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-38.pyc b/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-38.pyc new file mode 100644 index 0000000..fd2cb8d Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/TimeAnnouncement.cpython-38.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/__init__.cpython-310.pyc b/GenPoster/scripts/Poster/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..5a7e55c Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/__init__.cpython-310.pyc differ diff --git a/GenPoster/scripts/Poster/__pycache__/__init__.cpython-38.pyc b/GenPoster/scripts/Poster/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..cf29235 Binary files /dev/null and b/GenPoster/scripts/Poster/__pycache__/__init__.cpython-38.pyc differ