Skip to main content

¿Cómo hacer un bot de twitter?

Este artículo es continuación de Raspberry Pi: Hola Twitter, así que si quieres hacer esto, lee antes la otra entrada, ya que hay pasos que deberías realizar antes de llevar lo que viene a continuación a cabo.

Lo que vamos a hacer en esta entrada, es generar una lista de frases, de donde la raspi seleccionará una de forma aleatoria y la twitteará. A continuación la programaremos para que repita esta acción sin que tengamos que ejecutar esta acción. No voy a generar un nuevo archivo, sino que usaré el utilizado en el artículo anterior: HolaTwitter que se hallaba en el directorio del mismo nombre. Lo abrimos.

cd HolaTwitter
sudo nano HolaTwitter.py

Lo primero que realizaremos será nuestra lista de mensajes. Para ello, al comienzo del archivo, debemos importar el modulo random, y a continuación, siguiendo el esquema del siguiente código generamos una lista con los posibles tweets.

import random

messages = [
"Pintamos casas a domicilio",
"Una de gym",
"Ahora esta lloviendo",
"RT si FAV",
"Esto no es spam, preguntaselo al twittero de debajo",
"Twitteo de forma random",
"FAV si te parezco predecible",
"Hora de twittear",
"Igual paro ya",
]

Ya por último, actualizamos la siguiente línea y tendremos listo el código.

api.update_status(status=random.choice(messages)

Guardamos el archivo, y si ahora lo ejecutamos. En mi caso, esto es lo que me apareció la primera vez.


Pero lo más interesante no es esto. Queremos dejar la raspberry pi enchufada y que ella se encargue del trabajo. Por tanto, de alguna forma le diremos en qué momentos queremos que ejecute la acción. Para realizar esto, utilizaremos la caracetrística CRON.

sudo crontab -e

Se nos ejecutará un archivo con bastantes comentarios. Bajamos al final del archivo y añadimos la siguiente línea

#por ejemplo
42 * * * * python /home/pi/HolaTwitter/HolaTwitter.py

Cada asterisco se refiere a un instante. Donde pone el 42, si en lugar de un numero ponemos un asterisco, significa que nos twitteará cada minuto. De la forma que aparece, significa que en siempre a cualquier hora, en el minuto 42 ejecutará el tweet.

Y en principio, con esto sería todo.

Problema que me ha aparecido y solución

Las políticas de twitter rechazan los bots, y es por ello, que quieren impedir que estos realicen actividad en la red social, ya que en muchos casos es más bien molesta. Cuando estaba probando por primera vez esta aplicación, de repente dejó de funcionar. Probé a ejecutar de forma manual y me salió un error (403 forbidden). No me dejaba enviar el tweet. La razón, es que debido a la aleatoriedad, se había repetido un tweet, y la red social había detectado este comportamiento como sospechoso, es decir, que era un bot. Por tanto, este método no era del todo efectivo. Había que pensar alguna manera.

¿Por qué a @ArduMetBilbao no le bloquean la cuenta si todos sus tweets son tan parecidos? Porque los valores de la temperatura y la humedad no son los mismos. Van variando.

Por tanto, la solución que se me ha ocurrido es añadir la hora del tweet justo al comienzo. De esa forma, aunque los mensajes puedan repetirse, el comienzo de cada uno será distinto. Probemos.

Para llevar esto a cabo, realizaremos un par de modificaciones a lo anterior.

Al comienzo del archivo añadimos la siguiente línea. Es bastante intuitivo ver para qué puede servir.

import datetime

Las modificaciones que he realizado yo son las siguientes

tweet=str(x.hour+1)+':'+str(x.minute)+' -> '+random.choice(messages)
api.update_status(status=tweet)

Las horas y los minutos son de tipo int, pero escrito de la forma que lo presentamos encima lo convertimos a un string, que es lo que necesitamos para enviar el tweet.

Por tanto, el código completo queda de la siguiente forma.

import datetime
import sys
import random
from twython import Twython

CONSUMER_KEY = '-'
CONSUMER_SECRET = '-'
ACCESS_KEY = '-'
ACCESS_SECRET = '-'

api=Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

x=datetime.datetime.now()

messages=[
"Pintamos casas a domicilio",
"Una de gym",
"Ahora esta lloviendo?",
"Me apetece un cafe",
"RT si FAV",
"Esto no es spam, preguntaselo al twittero de debajo",
"Twitteo de forma random",
"FAV si te parezco predecible",
"Hora de twittear",
"Igual paro ya?",
]

tweet=str(x.hour+1)+':'+str(x.minute)+' -> '+random.choice(messages)
api.update_status(status=tweet)

Con la funcionalidad de crontab he puesto que se publique un tweet en el minuto 11 y otro en el minuto 42 de cada hora.

Las pruebas realizadas con este método ya no me han dado ningún problema. Podéis ver los resultados aquí.

Por hoy eso es todo, lo próximo ya es hacer algo con la picam, twittear alguna foto será lo primero (supongo), y luego pues seguir haciendo cosillas mientras el tiempo me lo permita.

Eneko Montero

Estudiando teleco e imprimiendo en 3D. A veces hago robotillos. Cuando tengo tiempo escribo algún artículo.

Una respuesta a “¿Cómo hacer un bot de twitter?”

Deja un comentario