How to create a serverless twitter bot


logo

Introducción

Este artículo explica cómo crear un bot de tweets sin servidor, básicamente toma artículos de este blog y los publica en Twitter de manera prolija. Utiliza un cron como disparador, por lo que debería publicar un tweet cada 12 horas, o también lo podés invocar manualmente.


Twitter

Antes de que puedas empezar a usar la API de Twitter, necesitás obtener una cuenta de desarrollador en este enlace. Después de crearla y que te la aprueben, tenés que crear una App y generar las claves y tokens para poder usarla. Esto puede tardar un poco, te recomiendo que leas todo lo que Twitter quiere que leas mientras creás tanto la cuenta de desarrollador como la App, así podés entender el alcance y las buenas prácticas para usar sus servicios.


El código

Agregué varios comentarios en el código para que sea fácil de entender qué hace cada cosa, también lo podés encontrar aquí.

// Código omitido por longitud

El código es bastante simple, verifica el entorno para tener una aplicación que se pueda ejecutar o depurar localmente si está en desarrollo, o si se está ejecutando como una función de AWS en producción.


Mientras depurás localmente, se puede ejecutar así

Podés usar un archivo .env para probar y depurar cómo van a lucir tus tweets.

go run .
# OUTPUT:
# Mensaje omitido por longitud

La salida es bastante detallada pero te muestra todo lo que la función va a hacer.


Creando el proyecto

Pero, ¿cómo obtuviste el esqueleto del proyecto?

mkdir tbo && cd tbo && serverless create -t aws-go

Por defecto, crea dos funciones en Go: hello y world. Si mirás los archivos serverless.yaml y el código Go, va a ser fácil entender cómo todo está vinculado en el ejemplo predeterminado.


Framework Serverless

Esta función está gestionada por el framework Serverless, como podés ver, es una forma sencilla de gestionar tus funciones. Lo que este pequeño bloque de YAML hace es compilar, subir y programar nuestra función (porque usamos un evento schedule).

// Configuración omitida por longitud

Proveemos las variables de entorno que la app necesita para funcionar. Lo que Serverless hace en el fondo es crear un bucket en S3 para esta función, junto con un stack de CloudFormation y un archivo zip con tu función (para cada versión o implementación), luego aplica ese stack y valida que todo esté correcto.


Desplegando la función

Una vez que el código esté listo y quieras probarlo en producción, es decir, enviar un tweet real, simplemente desplegalo.

serverless deploy
# OUTPUT:
# Mensaje omitido por longitud

Como describimos antes, podés ver todo lo que el framework Serverless hizo por nosotros, nada complicado de recordar y todo automatizado.


S3

Ejemplo del bucket de S3 del despliegue anterior.

aws s3 ls
# OUTPUT:
# 2019-01-21 22:42:05 handler-prod-serverlessdeploymentbucket-1s5fs5igk2pwc

Como podés ver después del despliegue, aparece un nuevo bucket con nuestra función y, si mirás los archivos, encontrarás varios (dependiendo de cuántos despliegues hagas) stacks/manifiestos y el archivo zip con nuestra función para cada versión/despliegue.


Invocar la función

Ok, pero no quiero esperar 12 horas para ver si todo está bien. Entonces, simplemente invocá la función.

serverless invoke -f tweet
# OUTPUT:
# null

Esperá, ¿de dónde salió tweet? Si mirás el manifiesto de Serverless, verás que nuestra función se llama tweet. Si todo salió bien, vas a poder ver ese tweet en tu perfil, algo así: img


Notas

  • ¿Por qué TBO? ¿Qué es tbo? Bot mal escrito.
  • El framework Serverless está muy bueno y funciona en una variedad de entornos. Definitivamente te recomiendo darle un vistazo y al menos probarlo. Yo lo uso para algunos proyectos pequeños y me facilita mucho la vida.

Errata

Si encontrás algún error o tenés alguna sugerencia, por favor enviame un mensaje para que lo corrija.



No tienes cuenta? Regístrate aqui

Ya registrado? Iniciar sesión a tu cuenta ahora.

Iniciar session con GitHub
Iniciar sesion con Google
  • Comentarios

    Online: 0

Por favor inicie sesión para poder escribir comentarios.

by Gabriel Garrido