Crear Bot de Mastodon y tootear con Python (I)

AdriMcGrady 06/10/2022

En esta ocasión os traigo la manera de crear un bot en Mastodon para después usarlo y tootear desde Python. Esta es la primera parte de una pareja de posts a este respecto.

En este primer capítulo, os explicaré detalladamente cómo crear una cuenta de Mastodon para usarla como un bot, y como postear en ella desde Python. Mientras que en el segundo capítulo os mostraré un bot que actualmente ya está funcionando y cuyo código estará publicado en Gitlab.

Mastodon

Podríamos definir Mastodon como una red social de tipo mocroblogging que es libre y descentralizada. Descentralizada implica que los usuarios se reparten en instancias y estas instancias pueden interactuar entre ellas. Además Mastodon forma parte del Fediverso y puede interoperar con otras redes sociales que implementen ActivityPub.

Pero tampoco quiero entrar de lleno en estos términos. Si tienes interés y ganas de ampliar información sobre Mastodon y el Fediverso, he dejado algunos links al final del artículo.

Para lo que si aprovecharé, es para recordar que tenemos cuenta de Mastodon de noroute2host: https://mastodon.social/@noroute2host

Creando un bot en una instancia de Mastodon

Cualquier cuenta de Mastodon puede servir para un bot. Así que el primer paso será simple, elegir una instancia, y crear una cuenta en ella.

Puedes elegir una instancia pública desde aquí. En mi caso, por ejemplo, voy a elegir una de las mayoritarias: mastodon.online, pero tú puedes elegir cualquiera que te guste.

Una vez creada tu cuenta puedes completar tu perfil, avatar, etcétera. Pero lo importante en esta sección para seguir la buena práctica, es que marques tu cuenta como bot.

Opcion Bot

Con esto ya tendrás tu cuenta bot creada.

Creando el token para tootear mediante la API

Ahora es el momento de crear una aplicación autorizada dentro de nuestra cuenta de Mastodon que nos permita publicar desde la API.

Esto es muy sencillo de hacer. Se ejecuta desde las opciones de nuestra propia cuenta en el apartado Desarrollo.

Pulsando en Nueva Aplicación nos permitirá fundamentalmente dar un nombre a nuestra aplicación y restablecer los permisos que tendrá. Estos van desde publicar o leer estados, hasta borrarlos o hacer follow a cuentas. Por simplificar, para este ejemplo puedes seleccionar Read y Write. Aunque si quieres puedes refinar estos permisos bastante.

Opcion Bot

Una vez has creado tu aplicación autorizada y dado permisos, es el momento de obtener tu token de acceso para tootear vía API. Y es tan facil como pulsar en tu aplicación y copiar el Token de Acceso.

Opcion Bot

Hacer funcionar el bot desde Python

Ya a nivel de Mastodon esta todo creado. Tenemos una cuenta y un aplicación autorizada con su token de acceso a buen recaudo. Ahora toca usar todo desde Python. Para ello usaremos la librería Mastodon.py.

Mastodon.py

Mastodon.py es un wrapper para la API de Mastodon implementado en Python. Para instalarlo en tu virtualenv o distribución directamente puedes hacerlo con pip.

pip install Mastodon.py

Tootear desde Python

Ya solo nos falta tootear desde Python. Para ello habrá que crear una nueva instancia de la API usando el wrapper Mastodon.py, para mas adelante publicar un toot usando esa instancia que acabamos de crear. Además, en el ejemplo siguiente incluyo también como responder a uno de nuestros toots.

Hay que tener en cuenta que los datos de access_token y api_base_url son los de mi aplicación de prueba. Y que deberán ser sustituidos en función del token de cada uno y de la instancia que se esté usando.

# Importar la clase necesaria desde Mastodon.py
from mastodon import Mastodon

# Crear la instancia de la API
mastodon = Mastodon(
    access_token = 'gJVj3oO1fJgg3AbLSfq7Yj43J_c0PJ65AP9ypcO4ZCA',
    api_base_url = 'https://mastodon.online'
)

# Tootear. Guardo la salida en la variable toot
# para poder responder despues.
toot=mastodon.toot('Mi primer toot usando la API')

# Tootear en modo respuesta. Para identificar a
# que toot responder podria usar directamente la
# variable toot o solo el id que se guarda en toot['id']
mastodon.status_post("Y ahora me estoy respondiendo a mi mismo", in_reply_to_id = toot)

Con ésto ya podriamos tootear desde la API cada vez que lo necesitemos, incluir tareas programadas para tootear automáticamente o lo que se nos ocurra.

Por último, indicar que este ejemplo se ha dejado publicado en el repositorio noroute2host-files. Y no olvidéis que esta es la primera parte de este tema y que habrá una segunda mostrando un bot real que esta funcionando actualmente.

Enlaces de interés

Artículo anterior Artículo siguiente

Artículos relacionados: