Creación de un Bot de Twitter
Hace tiempo que rondaba por mi cabeza hacer un bot de Twitter, ya sabéis, esas cuentas que publican contenido automáticamente cada X tiempo y no hay nadie detrás de ellas.
Así pues el otro día me picó la curiosidad y empecé a investigar cómo funciona y cómo se hace un bot. La aventura no ha sido sencilla, así que paso a relatarla en su totalidad.
Tras buscar durante un rato, vi que una de las maneras más sencillas era hacer lo siguiente.
Mediante las Pipes de Yahoo, diseñar un programa que te cree un RSS de una búsqueda de Twitter (o de lo que quieras realmente).
Una vez tengas el RSS, mediante una web, enviar el Feed -> Twitter
Chachi pienso, qué fácil parece. Voy a probar.
La idea es hacer un bot que detecte los tweets que tengan la palabra "ke" e informarles de que hay que escribir "que".
Paso 2 Creación de una Pipe
Con la ayuda de un vídeo de youtube y un poco de experiencia propia en programación orientada a objetos, desarrollé la siguiente pipe:
Veamos como funciona en detalle
Este módulo nos permite obtener los resultados de una búsqueda de Twitter.
Con este siguiente bloque, filtro todos los resultados que no estén escritos en español (por lo visto "ke" es muy común en india)
Luego, de cada resultado, extraigo el nombre del usuario ( from_user )
y creo un bucle en el que fabrico el mensaje "Hola @+usuario 'ke' es incorrecto...". Este mensaje lo asigno a la variable item.tweets
Y finalmente para cada Tweet, creo un feed RSS en el que aparezca el tweet en cuestión en el título de cada entrada del RSS.
Paso 3: Crear una cuenta de Twitter
Este paso es sencillo. Me creo la cuenta @DiccionarioAdri
El siguiente paso lógico era mediante un servicio externo, pasar de RSS a Twitter. Hay varias webs que ofrecen ese servicio
http://feedburner.google.com
Configuro tal y como indican en varias video y webs las cuentas, pero.... por alguna extraña razón no funciona. No se actualizan los tweets. Parece que funciona todo perfectamente, pero nada. Así que hay que buscar alternativas.
Paso 5: La alternativa, pico y pala
Como tengo unas cuantas nociones de Perl y en un pasado ya creé un par de scripts que utilizaban twitter, me decido a probar a programar todo desde cero en Perl.
Necesitamos el módulo Net::Twitter o Net::Twitter:Lite que nos permitirá hacer casi todo.
También, y muy importante, hace falta tener una cuenta de desarrollador de Twitter
Lo que hace básicamente el programa es coger el RSS, parsearlo y extraer los títulos. A continuación, por cada título envío un Tweet con el contenido que deseo.
Tras unas cuantas pruebas y sus errores correspondientes, consigo que funcione. Os imaginaréis mi felicidad (ueeee).
Nota: Si no se lee bien, tenéis el código aquí.
Paso 6: Haciendo el tonto
Pero entonces me asalta una revelación: estoy haciendo el tonto. ¿Por qué me creo una pipe para consultar a Twitter, luego crear un RSS, luego extraer los resultados y finalmente enviarlos? ¿Por qué tanto lío si realmente lo estoy haciendo a pico y pala?
Efectivamente, tras volver a investigar un rato (y cuando digo un rato son unas horas), llego a la que es la solución definitiva
Básicamente, en el programa hago todo y prescindo del RSS.
Con el módulo Net::Twitter, hago una consulta a Twitter. Especifico los parámetros idioma, número de resultados y que quiero los más recientes.
A continuación, creo el tweet y lo publico.
Muchísimo más sencillo y funciona perfectamente. Por descontado, he tenido que probar 3000 programas diferentes y módulos de toda clase hasta conseguir que me funcione, no ha sido fácil.
Nota: Si no se lee bien, tenéis el código aquí.
Una vez el programa funciona, tan solo hay que ejecutarlo de forma periódica. Para ello he utilizado el Task Scheduler o Programador de Tareas de Windows para que lo ejecutase periódicamente. Hay miles de opciones para todos los sistemas operativos, tan solo buscad "cron task" en google.
¡PERO! Problemón: por lo visto, en mis primeros intentos he puesto que actualice de manera demasiado frecuente y Twitter me ha considerado un spammer. Así que decido mejorar el código y darle un valor extra.
Con esta nueva versión, tan solo se envía un tweet y funciona de la siguiente manera
Hace una búsqueda en Twitter y recoge 5 resultados en español
Comprueba cuanto mide y lo envía.
Si es demasiado grande, da error y vuelve a probar con el siguiente de los resultados
Si funciona, sale del programa
De esta manera, solo envío un tweet y añado contenido a éste para hacerlo más entretenido y más variado. Además, cambio el cron a una frecuencia más baja para que solo envíe un tweet cada 15 minutos.
Nota: Si no se lee bien, tenéis el código aquí.
Actualmente, el programa funciona de maravilla y podéis ver los resultados aquí mismo
<![CDATA[// <![CDATA[ new TWTR.Widget({ version: 2, type: 'profile', rpp: 4, interval: 30000, width: 250, height: 300, theme: { shell: { background: '#e3526a', color: '#ffffff' }, tweets: { background: '#ffffff', color: '#050505', links: '#e3526a' } }, features: { scrollbar: false, loop: false, live: false, behavior: 'all' } }).render().setUser('DiccionarioAdri').start(); // ]]]]><![CDATA[>]]>
Espero que os haya gustado mi aventura, yo desde luego me lo he pasado genial y he aprendido un rato y más.