Como hace tiempo que tengo la raspberry pi parada, he decidido dejarla enchufada haciendo algo de trabajo. No es mucho, pero es mejor que tenerla cogiendo polvo. Algún día cuando tenga tiempo acabaré lo del asistente personal que estaba haciendo pero antes tengo que acabar los ¿tutoriales? de la eGarbigune. Por tanto, he decidido hacer esto más o menos rápido en un huequillo que tenía suelto. El resultado es el esperado.
El propósito es hacer que la raspberry pi me vaya tuiteando de forma automática posts de este blog, así, de alguna manera, podemos revivir entradas que se han ido perdiendo con el tiempo. Hemos pensado en dividir el tweet en 2 partes para dar más juego. La primera parte va a ser un «encabezado» y la segunda parte va a ser el artículo propiamente dicho. Las concatenaremos y de esa forma tendremos tweets aparentemente distintos, ya que las cabeceras irán cambiando.
Si leíste el artículo ¿Cómo hacer un bot de twitter? esto no debería tener mayor misterio, ya que es exactamente eso, pero para que sea menos engorroso, en esta ocasión en lugar de utilizar una lista de frases en el propio código vamos a manejar ficheros de texto, ya que son más cómodos porque vamos a tener bastante más información que la otra vez, y además, los iremos actualizando con el tiempo sin necesidad de modificar nada del código.
Para tener todo ordenado crearemos una carpeta llamada twitterbot donde guardaremos los tres archivos, dos ficheros de texto a los que les he llamado «encabezado.txt» y «post.txt» y el fichero de python que se llamará «twitterbot.py». El código de python queda de la siguiente manera.
import random from twython import Twython CONSUMER_KEY = 'tu CONSUMER_KEY' CONSUMER_SECRET = 'tu CONSUMER_SECRET' ACCESS_KEY = 'tu ACCESS_KEY' ACCESS_SECRET = 'tu ACCESS_SECRET' api=Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) #Abrimos los ficheros, ponemos la ruta completa para ejecutarlo desde cron fcab = open("/home/pi/twitterbot/encabezado.txt") fpost = open("/home/pi/twitterbot/post.txt") #Calculamos las líneas de los ficheros lineasCab = len(fcab.readlines()) lineasPost = len(fpost.readlines()) #Calculamos un numero aleatorio entre 1 y el numero de lineas numCab = random.randrange(1,lineasCab) numPost = random.randrange(1,lineasPost) #Mostramos la información por pantalla print("Cabecera: "+str(lineasCab)+" Post: "+str(lineasPost)) print("Numeros aleatorios: C: "+str(numCab)+" P: "+str(numPost)) #Pasamos a seleccionar la frase de cabecera #Con seek(num) nos colocamos en el byte numero num #En este caso en el byte 0 (inicio del archivo) fcab.seek(0) #Buscamos en el fichero la frase correspondiente al numero seleccionado for i in range(numCab): strCab = fcab.readline() #Repetimos el proceso con el segundo fichero fpost.seek(0) for i in range(numPost): strPost = fpost.readline() #Cerramos los ficheros fcab.close() fpost.close() #Creamos el tweet tweet = strCab[:-1]+" > "+ strPost #Lo mostramos en pantalla y lo publicamos en twitter print(tweet) api.update_status(status=tweet)
En la línea donde creamos el tweet, si te fijas usamos strCab[:-1]. Utilizando eso lo que hacemos es quedarnos con la cadena de caracteres completa menos con el último dígito que suele ser un salto de línea (‘\n’) ya que cada frase irá en una línea, y por tanto el último caracter es el intro, precisamente. La única línea donde eso no se cumple es en la última, ya que si lo pusiéramos tendríamos una línea más que estaría vacía. Eso sería una opción en caso de que restemos uno al tamaño del archivo «encabezado.txt» cuando calculamos el número de líneas. En este caso lo primero que se me ocurrió fue meter un espacio al final de la última línea para que lo elimine. Es una ñapa pero funciona. También hay otros métodos de quitar los saltos de líneas, podríamos haber usando un replace, por ejemplo.
A la hora de escribir el código, como me hallaba trabajando en la carpeta donde he guardado todo, al abrir los ficheros podía utilizar únicamente el nombre del fichero, pero una vez que lo automaticé lo cambié por la ruta completa ya que si no te dirá que el archivo especificado no se encuentra.
El » > « que he puesto en tweet es porque me gustaba cómo quedaba, sin más, se podría omitir o poner cualquier otra cosa.
Una vez escrito el código completo hacemos el archivo ejecutable (trabajando en la carpeta donde tenemos guardado el código)
sudo chmod +x holatwitter.py
y creamos las tareas de crontab
sudo crontab -e
Editamos este archivo a nuestro gusto y ya tenemos esta tarea automatizada.