Creando un bot para Twitter

Este domingo busqué un servicio para Twitter que me permitiera seguir automáticamente a gente que escribiera sobre algunas palabras claves desde la cuenta de Wikipedal. No me justificaré, es lo más parecido al spam que existe, pero es bastante efectivo en conseguir microaudiencias. La idea no es solo lograr que te lea gente interesada en lo que escribes, sino también llegar a los influenciadores para que escriban de ti.

El caso es que después de estar un buen rato mirando las alternativas en forma de servicio web o aplicaciones de escritorio, llegué a la conclusión de que todas apestan, o son de pago, o ambas. Así que me puse a escribir algo yo mismo, y en media hora tenía un script que hacía exactamente lo que quería. Es sucio, no sigue ninguna buena práctica y mata moscas a cañonazos, pero funciona. Y si te gusta programar lo verás incluso divertido.

La idea general del script es ir a la portada de Wikipedal, extraer el cóctel del día, buscar en twitter los usuarios que hablan de ese cóctel y, finalmente, seguir a quienes nos interese. Ese cóctel es algo que se genera automáticamente todos los días, y por cuestiones externas e inamovibles (aka Mediawiki apesta), la manera más rápida de obtenerlo es directamente bajarse la portada y buscar el texto que nos interesa.

Para el script escogí Ruby, un lenguaje que me encanta pero que llevaba más de un año sin tocar. Además instalé dos gemas: la primera se llama hpricot y nos ayuda a parsear una página en HTML; la segunda es twitter y es la manera más sencilla de interactuar con la API de Twitter.

doc = Hpricot(open('http://wikipedal.org/', 'User-Agent' => 'ruby'))

En esta línea nos descargamos la página entera, se la pasamos a hpricot y él nos devuelve el documento ordenado por el DOM, con todos los elementos fácilmente accesibles. Lo único feo es que hay que cambiar el User-Agent para que Mediawiki nos permita el paso.

cocktail = (doc / '#mp-tfa .mw-headline').text.strip

Con esto filtramos el documento para que nos dé exactamente el elemento que nos interesa especificando la ruta dentro del DOM (sería como hacer $('#mp-tfa .mw-headline') con jQuery y similares). Cogemos su texto y lo limpiamos un poco para evitar espacios innecesarios.

Ahora viene el trabajo de verdad, la integración con Twitter. Desde la cuenta que queramos actualizar primero nos registramos como desarrolladores y creamos una aplicación. Se tarda muy poco, cuando terminemos nos copiamos las claves para rellenar algo como esto:

Twitter.configure do |config|
  config.consumer_key = 'TU_CONSUMER_KEY'
  config.consumer_secret = 'TU_CONSUMER_SECRET'
  config.oauth_token = 'TU_OATH_TOKEN'
  config.oauth_token_secret = 'TU_OATH_TOKEN_SECRET'
end

Esta es la manera más sencilla, por el tipo de script tan limitado que estamos haciendo, dado que esta mini-aplicación siempre va a trabajar con la misma cuenta de usuario. Una vez configurado, creamos una instancia de búsqueda.

search = Twitter::Search.new

Y llegamos a la traca final. Repito que es un script rápido y sucio, esta no es la manera de crear algo reutilizable. Pongo las últimas líneas todas juntas porque no tiene mucho sentido separarlas.

search.containing(cocktail).language('es').not_from('Wikipedal').not_mentioning('Wikipedal').no_retweets.per_page(10).each do |tweet|
  user = Twitter.user(tweet.from_user)
  if !user.following && user.followers_count > 100 && user.friends_count > 100
    Twitter.follow(user.screen_name)
  end
end

En la primera línea realizamos una búsqueda de tweets que contengan la palabra mágica (la que hemos sacado antes). Dado que Wikipedal está exclusivamente en español, vamos a restringir la búsqueda a tweets en español. Solo nos interesan los tweets originales (nada de retweets) y que no sean de nosotros o de gente que nos menciona. Finalmente limitamos la búsqueda a los últimos diez tweets, no nos interesa más.

Una vez elegidos los diez tweets ganadores, vamos a filtrar los usuarios por cuestiones puramente de marketing. Con la segunda línea cogemos los datos de la cuenta del usuario actual. En la tercera hacemos el filtrado, y lo primero que comprobamos es que no nos siga.

Nos queremos centrar en usuarios influyentes, así que miramos que por lo menos tenga 100 followers. Como también pretendemos que nos siga, buscamos a gente que siga a más de 100 personas, para evitarnos las divas de Twitter que no nos van a seguir en la vida. Todos los usuarios que cumplan esos requisitos se acaban de ganar que los sigamos en la cuarta línea.

Eso es todo, ahora solo queda configurar algún sistema que ejecute automáticamente este script cada cierto tiempo. Para elegir la frecuencia hay que tener en cuenta las personas que hablan sobre ese tema, y también que existe un límite de 2000 personas que podemos seguir sin que nos sigan proporcionalmente. Yo lo ejecuto cada cuatro horas en el propio servidor de Wikipedal, gracias a cron. En mi servidor necesita unos ajustes especiales que no vienen a cuento, si alguien pretende seguir un proceso similar a este y tiene problemas decídmelo en los comentarios.

Momento Github: el código del script completo está en este gist.

1 comentario por ahora ↓

#1 Zona Bloguismo LVII | Bloguismo el día 01.16.11 a las 11:37 am

[…] termino con un artículo interesante de Víctor Pimentel titulado Creando un bot para Twitter donde si sois curiosos podéis probar a hacer un bot y empezar a cacharrear programando para el […]

Deja tu comentario

Si tienes una cuenta OpenID, también lo puedes usar, así no tienes que rellenar los campos de arriba: