Hola, les saluda Miguel y en esta ocasión les traigo este post.
Python es un lenguaje fantástico para tareas de automatización simples. Es uno de los lenguajes más populares en el mundo gracias a su sintaxis fácil y amigable para principiantes, y al ecosistema gigante de herramientas y bibliotecas.
Combinado con servicios sin servidor como AWS Lambda, puede realizar automatizaciones muy rentables y útiles con él. En este artículo, le mostraré cómo construí un simple bot de Python que extrae imágenes y datos de radar y los publica en Telegram.
Estamos utilizando una imagen de radar meteorológico generada en el sitio web. lietus.lv y enviarlo a Telegram usando un bot.
Índice
Configuración de Telegram
Lo primero que haremos es crear un Bot de Telegram. Todos los bots de Telegram usan el disponible públicamente API de bot.
Así es como nuestra Lambda se comunicará con los servidores de la API de Telegram para ejecutar comandos en Telegram, como enviar mensajes. Los bots se crean en el propio messenger usando un bot llamado BotFather.
Necesitamos usar BotFather para registrar nuestro bot con Telegram y obtener un Token de API. Este es el mecanismo de autorización principal de la API.
¡Asegúrese de no filtrar este token en ningún lugar público! De lo contrario, alguien puede tomar el control de su bot fácilmente. Si esto sucede o simplemente olvida el token, no se preocupe, siempre puede cambiarlo más tarde usando BotFather nuevamente.
Ahora que estamos armados con un token API, ¡ya podemos comenzar a enviar mensajes a Telegram usando nuestro bot! Técnicamente, una aplicación de bot de Telegram adecuada realiza una comunicación bidireccional con la API de Telegram, y hay 2
formas de hacerlo:
- Sondeo largo (sondear la API de Telegram en un bucle para actualizaciones).
-
Web-hook
(registrando el punto final de solicitud de la aplicación que se llama en nuevas actualizaciones).
Sin embargo, no necesitamos ninguno de estos ya que nuestro bot solo enviará mensajes. En su lugar, simplemente podemos usar el método sendPhoto
de las API de Telegram.
Ni siquiera necesitamos procesar el archivo en absoluto, solo enviaremos la URL de la imagen del radar directamente a Telegram.
A continuación, crearemos un canal para que el bot publique. Asegúrese de agregar el bot como administración.
Ahora, aquí hay una pequeña parte complicada. Todos los métodos de interacción de chat en la API identifican los chats de Telegram mediante un ID entero firmado específico.
Realmente no hay una forma sencilla de obtenerlo, sin embargo, una forma es enviar un mensaje de prueba al chat y luego reenviarlo a un bot muy útil llamado Telegram Bot Raw. Imprimirá los metadatos sin procesar del mensaje.
Estamos interesados en el carné de identidad en el "Forward_from_chat"
llave. Ese es nuestro chat_id
.
Configuración de AWS Lambda
Ahora es el momento de crear nuestra Lambda. Lambda es un servicio de AWS muy potente y económico que, en pocas palabras, le permite ejecutar código a pedido, sin tener que preocuparse por alojar servidores virtuales.
Esto significa que solo se le cobrará cuando se ejecute su código. Con el modelo de precios actual, Lambda es realmente gratuito para una gran cantidad de ejecuciones iniciales y tiempo de ejecución.
En este punto, supongo que tiene una cuenta de AWS. Lo primero que hacemos es dirigirnos al Consola de AWS y dirígete a la sección Lambda.
Haga clic en "Crear función"
, se le presentará un formulario. Estamos interesados en un entorno de ejecución de Python 3.8
(la última versión estable de Python en el momento de escribir este artículo) y darle un nombre significativo.
¡Se crea nuestra Lambda! Ahora necesitamos hacer más configuraciones. Como dije antes, deberías nunca ponga credenciales confidenciales o tokens en texto plano en su código.
En su lugar, podemos cargar el token de la API de Telegram desde una Variable de entorno. Configurar uno es fácil:
Por defecto, la variable de entorno será cifrado en reposo con una nueva clave simétrica. En producción, se recomienda encarecidamente también cifrar las claves en tránsito. Puedes leer más sobre esto aquí.
Podemos escribir el código directamente en el editor Lambda esta vez, ya que no necesitaremos bibliotecas externas y lo mantendremos simple esta vez.
Escribiendo el código
Estamos utilizando el módulo http.client
incorporado para nuestras solicitudes HTTP esta vez. Construimos el punto final adjuntando el telegram_token
que obtenemos de la variable de entorno definida previamente.
Lambda_handler
es nuestra función de controlador: es la función a la que se llamará cuando se active Lambda. Otra opción podría ser usar la biblioteca de solicitudes , pero esta vez la mantendremos básica.
Acabo de utilizar un cliente REST como Insomnia , que te permite probar una API antes de escribir cualquier código, así como generar código en la mayoría de lenguajes y bibliotecas.
La fuente que estoy usando mantiene una lista de imágenes de radar generadas en un sub-recurso
, que se ve así:
Afortunadamente, ni siquiera necesitamos usar ninguna biblioteca, porque Python ya viene con el módulo html.parse
incorporado.
Después de escribir nuestro propio analizador y probarlo todo junto, el resultado final se verá así:
Podemos probar nuestra Lambda enviando una carga útil ficticia:
Pasos finales: AWS EventBridge
El último paso es ejecutar nuestro Lambda de acuerdo con un programa. La forma típica de hacer esto es crear un disparador de EventBridge
. Puede utilizar una tasa o un programa cron típico .
¡Eso es! Debería ver el conector en el diseñador de Lambda.
Resultado final:
Añadir comentario