user photo

Creando un Bot para autopublicar feeds rss en Mastodon con Linux

Published on
Sergio Perea · 3 min read
python, mastodon

Para automatizar la publicación de las entradas de tus blogs en tu cuenta de Mastodon tendrás que instalar en tu ordenador Linux un software llamado feed2toot, un script que se asocia a tu cuenta para publicar automáticamente en Mastodon.

Te lo explico todo:

Lo primero es instalar Feed2Toot, para lo que es necesario disponer del intérprete de Python3 y del gestor de paquetes Pip3:

pip3 install feed2toot

Puedes crear un usuario concreto para ejecutar esto, si lo vas a desplegar en una VPS, o bien puedes tenerlo en tu propia computadora, y ejecutarlo a través de tu propio usuario. En cualquiera de los casos, vamos a suponer que decidimos ejecutarlo con el usuario sergioperea.

Lo primero es crear una carpeta para los archivos de configuración del programa, y darle los permisos necesarios para accceder:

mkdir -p /etc/feed2toot/credentials /var/lib/feed2toot
chown -R sergioperea:root /etc/feed2toot /var/lib/feed2toot

Ahora vamos a inicializar Feed2Toot:

register_feed2toot_app

Se te preguntarán las credenciales de acceso a tu Mastodon (instancia, usuario, contraseñá). Si todo va bien, se habrán creado en tu home los ficheros feed2toot_usercred.txt y feed2toot_clientcred.txt, que deberás copiar a la carpeta /etc/feed2toot/credentials.

Estos ficheros no hay que modificarlos.

Ahora vamos a crear, donde nosotros queramos (puede ser en una carpeta de nuestro home, por ejemplo) dos ficheros: hashtag.txt y rss.txt.

Fichero rss.txt:

Este fichero contendrá, en cada línea, la ruta rss de cada blog que queramos autopublicar en Mastodon.

Por ejemplo:

https://sperea.es/feed.xml
https://www.cdn.geeksforgeeks.org/feed/

Fichero hashtag.txt:

Este fichero contendrá, en cada línea, un hash tag que se adjuntará a cada publicación.

software libre
open-source

Este fichero de ejemplo generará los hash tag #softwarelibre y #opensource. Observa que ha quitado ciertos caracteres y espacios.

Bien, ahora solo queda crear un fichero de configuración feed2toot.ini en la ruta /etc/feed2toot. El mío tiene este aspecto:

[mastodon]
instance_url=https://mastodon.social
user_credentials=/etc/feed2toot/credentials/feed2toot_usercred.txt
client_credentials=/etc/feed2toot/credentials/feed2toot_clientcred.txt
 
[cache]
cachefile=/var/lib/feed2toot/feed2toot.db
 
[rss]
uri_list=/home/sergioperea/Documentos/tootfeeds/rss.txt
toot={title} {link}
 
[hashtaglist]
several_words_hashtags_list=/etc/feed2toot/hashtags.txt

Ejecutando el bot

Si has hecho todo bien, Feed2toot ya está preparado para ejecutarse.

El problema es que si lo ejecutas sin más se publicarán todos los feeds de las direcciones especificadas, lo que pueden ser muchos toots de una vez con la molestia que eso generará en nuestros seguidores.

Para evitarlo, ejecutaremos una orden para que los feeds se guarden en la base de datos como enviados, pero que no se envíen. Así sólo enviaremos las novedades de los feeds configurados. Para ello, vamos a ejecutar esto:

feed2toot --populate-cache -c /etc/feed2toot/feed2toot.ini

A partir de ahora, cada vez que ejecutemos Feed2toot, sólo se publicarán las nuevas publicaciones.

Lo mejor, ahora, es programar con crontab una tarea que ejecute el bot cada cierto tiempo, por ejemplo, cada media hora:

# Publica feeds en Mastodon
*/30 * * * * feed2toot -c /etc/feed2toot/feed2toot.ini

Y nada más. Aquí dejo mi cuenta Mastodon, por si quieres seguirme en esa red social.

Bonus track: si quieres ir más allá

Es posible publicar directamente desde código Python utilizando la librería Mastodon.py para poder crearte bots más sofisticados:

pip3 install Mastodon.py

El código es tan sencillo que no merece ni comentarlo:

from mastodon import Mastodon

# Token y url de la Instancia 
mastodon = Mastodon(
    access_token = '43hu433',
    api_base_url = 'https://mastodon.social/'
)

mastodon.status_post("Mensaje desde mi Bot en Python")

Y ahora, sólo queda ejecutarlo!