Presentamos un proyecto 100% Python desarrollado durante el confinamiento del mes de marzo y que han llegado a utilizar más de 1.000 usuarios de Telegram: un bot para seguir la evolución de la pandemia del coronavirus. El bot accede a diferentes fuentes de datos para ofrecer gráficas de la evolución epidemiológica a nivel mundial por países, a nivel español por comunidades autónomas, a nivel italiano por regiones y a nivel francés por departamentos."
Bio
Tres matemáticos formados en la UIB con perfiles profesionales bastante diferentes. Antònia ha sido programadora de videojuegos, de software de computación distribuida y ahora es especialista de datos en un centro de investigación. Biel ha sido programador en sector bancario y el de la admin. pública y ahora es programador web especializado en visualización de datos en un centro oceanográfico. Jaume ha sido profesor de secundaria y es diseñador gráfico. Actualmente cuida de su familia y se entretiene creando bots.
Dadas las fuentes de datos existentes, ¿se podría hacer un bot que te pudieses suscribir a una localización y te avisase de las nuevas normas? A veces me cuesta seguir los cambios en las normativas. :S
Cada CCAA tiene sus normas y lo publican en sus Boletines Oficiales, no sabemos de ninguna compilación de normas y que esté público.
Si existe, se podría hacer.
Si conocéis de su existencia, avisad
Hola @Carlos3dx,
en el caso de la acción de comparación, al principio íbamos concatenando las regiones en el callback_query, que solo puede ser un string. Nos encontramos que tiene una longitud muy limitada.
Así, que ahora vamos guardando las lista de regiones seleccionadas en un servidor redis que tenemos corriendo en la máquina. Como clave usamos el id del chat + el id del mensaje. De esta manera, cuando en el callback nos llega un compare + finish, buscamos en redis la lista de las regiones a comparar que se ha ido guardando y la pasamos a la generación de la gráfica.
Hola @godiez,
completo la respuesta a @Carlos3dx, haciendo un copy/paste de algunas líneas del código y algunos comentarios:
# Inicializamos el cliente de redis
cache = redis.Redis(host='localhost', port=6379, db=0)
CACHE_PREFIX = 'COVID'
@app.on_callback_query()
async def answer(client, callback_query):
# en el callback_query tenemos los parámetros de la
# acción a realizar y sus parámetros (por ejemplo, la región seleccionada)
params = callback_query.data.split("_")
region = params[2]
# recuperamos de redis la lista de regiones ya seleccionadas en el mensaje actual
cache_key = f"{CACHE_PREFIX}_{comm}_{chat}_{mid}"
regions = cache.get(cache_key)
regions = regions.decode("utf-8").split('_')
# añadimos la nueva región
regions.append(region)
# y la guardamos en cache
cache.setex(cache_key,
timedelta(minutes=60),
value='_'.join(regions))
# posteriormente, cuando la región es "finish", el programa llama a enviar el
# gráfico con la comparación
Piensa que si hacemos la versión web, sólo utilizaríamos Python para exponer los datos vía un API. El resto sería javascript (que es cierto que podríamos tener gráficas y mapas dinámicos!)
Yo estoy usando python-telegram-bot para un servicio de notificaciones haciendo scrapping de una web. Pero suelo tener problemas con temas de timeouts y retries. ¿Qué tal estas cosas con pyrogram? Por lo que vi en el vídeo bastante mejor…
No hemos tenido demasiados problemas con timeouts y retries con Pyrogram (solamente cuando telegram ha estado caído, si no recuerdo mal). Pero no se si eso está relacionado con el uso de Pyrogram o con la calidad de la conexión.