Bot de tuiter en 10'
Cuando termines de leer este post habrás hecho un bot de tuiter que contesta con un piropo a todo aquel que le etiqueta. Y además gratis, sin instalar nada y en 10 minutos.
Odio a vodafone. No se merecen ni la mayúscula. Me llaman a todas horas a pesar de estar en la lista robinson. El año pasado les etiqueté en un tuit indicando el teléfono que me había llamado. Me llevé un buen zasca cuando me contestaron que ese número no era suyo. Pero entonces descubrí que llevan dando esa misma respuesta desde 2012. Decidí hacer un bot para que nadie más se llevase ese zasca: cada vez que alguien escribiera ‘vodafone’ + ‘lista robinson’ mi bot citaría el tuit indicando así a esa persona que no está sola y que sí es vodafone quien le llama.
Así aprendí a hacer bots de tuiter y creé @listarobinson que ahora mismo se encarga de recoger las quejas públicas por incumplimiento de la lista robinson de diversas compañías, llevar la cuenta y hacer un ranking anual para ver qué empresa es la más acosadora.
Semanas después creé @botwatchlist, un bot que te permite establecer alertas sobre el precio de diversos activos. Por ejemplo, le puedes pedir que te avise cuando AAPL caiga un 10% o suba de 3.000$. También funciona para criptos, divisas, índices, etf’s, fondos de inversión y planes de pensiones.
Bien, hecho el spam y explicados mis casos de uso entramos en detalle.
Un bot de tuiter es un código siempre activo capaz de comunicarse con tuiter. Esto implica 3 cosas que son los 3 pasos que vamos a seguir:
Conseguir claves de la api de tuiter
Hacer el código
Subir el código a algún sitio para que esté siempre activo
Tardé muchas semanas hasta entender que la que te voy a contar aquí es la mejor solución. Más sobre los palos de ciego que di por el camino al final.
Al lío, este es el bot que vamos a hacer.
1. Claves de API
Crea un gmail y con él una cuenta de tuiter. Añades y verificas el teléfono en la cuenta de tuiter. Después vas a tuiter developer, le das a ‘signup’, y completas el formulario. En ‘caso de uso’ seleccionas ‘making a bot’.
Tras crear la cuenta en tuiter developer tienes que trastear y generar los 5 chorizos alfanuméricos que necesitamos: api key, api key secret, bearer token, access token y access token secret (con permisos read and write, importante). Usaremos esos chorizos en el siguiente paso. Si no encuentras algo busca un tutorial en youtube que me da pereza poner capturas de todo.
2. Código
Este es el paso más bonito, hacer la funcionalidad del bot. Para el ejemplo vamos a hacer un bot que responda a los tuits que cumplan ciertos criterios (etiquetar al bot + ‘piropéame’) con un piropo. Si lo hubiéramos hecho en python hubieran sido menos líneas y más sencillo, pero tenemos que hacerlo en javascript para poderlo alojar y ejecutar desde googlesheets. La base del código podría quedar así.
Pero en realidad he hecho algún cambio para que sea más userfriendly: con cada ejecución irán apareciendo los nuevos tuits que cumplan los criterios en la hoja ‘tuits’ y se irán respondiendo con lo que ponga en la columna J. Este enfoque es más flexible y permite cambiar bastante la funcionalidad sin tocar código.
3. Servidor
Asumo que aun no te ha dado tiempo a hacer el código. Puedes coger el mío de ejemplo aquí. Tienes que darle a ‘Archivo’ → ‘Hacer una copia’ y guardarla en tu drive (mejor en el drive de la nueva cuenta de gmail que has creado para que no consuma las ejecuciones gratuitas de tu cuenta de google habitual). Ahora abres el appscript desde ‘Extensiones’ → ‘App Script’ y pegas tus 5 claves en las primeras líneas. Después le das a ‘Ejecutar’ y al ser la primera vez la hoja te pedirá permisos: revisa el código y concédeselos (esto solo lo debes hacer porque te fías de mí, estás usando un gmail que te da igual o has revisado el código y ves que no hace nada raro; no hagas esto con googlesheets descargados de internet si no sabes lo que hace el código).
Ya tenemos un googlesheets con el código listo. Ahora solo falta configurar un activador cada 5 minutos. Desde el appscript, en el menú de la izquierda le das a ‘Activadores’ → ‘Añadir activador’ y lo configuras así.
Listo, ya está tu bot funcionando. Pruébalo escribiendo un tuit que cumpla los criterios (y esperando 5 minutos hasta la siguiente ejecución).
¿Y qué más?
Ponle a tu bot una imagen de perfil y una bio molona.
Puedes empezar a modificarlo cambiando los criterios de la QUERY en el código o los piropos en la propia hoja de cálculo.
Puedes explorar la documentación de la api de tuiter y ver qué otras funcionalidades puedes conseguir (citar tuits, DM…). Aunque para esto necesitarás saber programar.
Puedes cambiar la lógica del bot si sabes algo de javascript. Y ya que estás en googlesheets, lo tienes muy fácil para hacer cosas chulas consiguiendo datos vía importxml o googlefinance (luego desde el código puedes leer y escribir en cualquier celda de la hoja).
Si quieres que tu bot sobreviva al largo plazo revisa las reglas de automatización de tuiter. No cualquier funcionalidad está permitida (aunque sea técnicamente posible). Por ejemplo, no puedes contestar a usuarios que no hayan indicado que quieren interactuar contigo.
Por reglas de automatización, también debes indicar que tu cuenta es un bot. Esto se hace desde ‘Configuración y privacidad’ → ‘Tu cuenta’ → ‘Información de la cuenta’ → ‘Automatización’.
¡Pero lo más importante si has llegado hasta aquí es que me pongas un comentario y enlaces tu bot para que lo vea!
Palos de ciego
Si empiezas a buscar tutoriales verás que conseguir las claves es muy fácil y hacer el código también. La mayor parte de artículos lo hacen en python tirando de la librería tweepy. Esto te permite tener un código funcional en apenas unos minutos que puedes testar desde googlecolab. Pero el cuello de botella está en el último paso, dónde alojar el código. Yo al menos no he encontrado ningún lugar gratuito al que subir ese código python para que esté siempre activo. E incluso pagando tampoco se garantiza un 100% (ejemplo pythonanywhere).
Esto es muy relevante porque fuerza a cambiar totalmente el enfoque. Depende de la funcionalidad del bot, pero hay básicamente 2 formas de hacer el código:
Filtered stream. Código siempre activo que pone un ‘escuchador’ y es el propio tuiter el que nos notifica cuando se crea un nuevo tuit que cumple los criterios que le hemos indicado. En ese momento procesamos ese nuevo tuit.
Search tweets. Código que se ejecuta cada x tiempo y recoge los tuits creados desde la última ejecución que cumplan los criterios indicados. Todos esos tuits se procesan en ese momento.
Como ves son 2 enfoques radicalmente distintos aunque el comportamiento de cara al usuario es similar si el intervalo x es suficientemente pequeño.
Yo no he encontrado un servidor al que subir un código siempre activo pero, gracias a @iam_dwalin (autor de @btc_halving), sí encontré un sitio gratis donde ejecutar cierto código cada x minutos (googlesheets). Ese es el enfoque que hemos seguido en el post.
Pd1. Gracias a @1_pageknowledge por la idea y las frases para el bot.
Pd2. Hasta que me canse o me quede sin ideas estoy publicando cada viernes el post que elegís. Puedes votar por el próximo aquí.
Pd3. Post sugerido sobre mi bot @listarobinson y cómo evitar el spam telefónico.
Pd4. Post sugerido sobre cómo usar los import y hacer consultas con googlesheets.
Pd5. Me comenta @iam_dwalin que el realtime (filtered stream) con googlesheets es posible. Si lo investigáis me decís.
UPDATE 2023-02-28. He utilizado el bot que hicimos para este post y lo he conectado a ChatGPT, aquí el resultado: @botchatgpt3