Démarrer avec l’API Mastodon en Python

Avec tout ce qui se passe sur Twitter, de nombreux utilisateurs se tournent vers les réseaux sociaux décentralisés tels que Mastodon. Mastodon est un réseau social gratuit (et open source) complètement décentralisée qui fonctionne à peu près comme Twitter. On peut publier des « toots » (au lieu de tweets), des images et autres contenus, suivre d’autres personnes et organisations, favoriser (aimer) et stimuler (retweeter) les messages d’autres abonnés.

L’organisation de réseau social Mastodon diffère sensiblement de celle de Twitter. Au lieu d’une seule place publique pour tout le monde, ce réseau social est composé de milliers de réseaux sociaux, tous fonctionnant sur différents serveurs qui peuvent communiquer entre eux par le biais d’un système appelé le Fediverse. Le Fediverse contient également d’autres réseaux sociaux comme PeerTube pour les vidéos, Funkwhale pour la musique, PixelFed pour les photos et NextCloud pour les fichiers.

Pareillement à Twitter, Mastodon dispose d’une API pouvant être utilisée pour créer de nombreuses applications/bots, permettant d’analyser des données, de répondre à des notifications ou simplement de poster des statuts/messages.

Mise en œuvre

Dans les exemples d’utilisation de l’API Mastodon ci-dessous, nous utilisons la librairie Python Mastodon.py. Pour l’installer, il suffit juste d’exécuter :

pip install Mastodon.py

Mais tout d’abord, nous avons besoin d’un accès API à un serveur Mastodon. Pour ce faire, vous pouvez utiliser l’instance https://botsin.space/. Il vous suffit de vous y inscrire comme sur n’importe quelle autre serveur Mastodon, et ainsi, vous devriez être en mesure de mettre en œuvre votre application.

Créer une application Mastodon

Pour déclarer une application, il faut aller vers la page Développement et cliquez sur Nouvelle application. L’application créée doit ressembler à quelque chose comme ceci :

Création d'une application Mastodon
Déclaration d’une application Mastodon

Utilisation de l’API Mastodon.py

Une fois l’application créée, nous voulons tester si les informations d’identification fonctionnent. La façon la plus simple de le faire est de s’authentifier. Tout ce dont nous avons besoin pour accéder à l’API sont :

  • Jeton d’accès
  • URL API Mastodon (c.-à-d. URL du serveur Mastodon. Dans notre exemple https://botsin.space/)
  • ID de l’application
  • Secret

Par sécurité, ces informations d’identification sont sauvegardées dans le fichier clientcred.secret de la manière suivante :

1rD......P-Ag
https://mastodon.hosnet.fre
nW3.....GU5I
9lL.....7jC8

L’authentification s’effectuant de la manière suivante :

"""
clientcred.secret:
1rD......P-Ag (jeton d’accès)
https://mastodon.hosnet.fre (api_base_url)
nW3.....GU5I (ID de l’application)
9lL.....7jC8 (Secret)
"""

# https://mastodonpy.readthedocs.io/en/stable/04_auth.html#mastodon.Mastodon.__init__
m = Mastodon(
    access_token='clientcred.secret',
    lang='fr'
)

# https://mastodonpy.readthedocs.io/en/stable/15_everything.html#mastodon.Mastodon.account_verify_credentials
my_account = m.account_verify_credentials()
print(f"Identifiant compte Mastodon: {my_account.id}")

Si l’authentification est OK, vous devez avoir l’affichage de l’identifiant du compte Mastodon et vous pouvez, par exemple, publier un statut de la manière suivante :

# https://mastodonpy.readthedocs.io/en/stable/05_statuses.html#mastodon.Mastodon.status_post
status = m.status_post(
    status="Bonjour Mastodon!"
)
print(f"=> Publication: {status.url} créée, le {status.created_at.astimezone().strftime('%d/%m/%Y à %H:%M:%S')}, Visibilité: {status.visibility}")

Dans cet exemple, nous utilisons la méthode status_post plutôt que la méthode toot, car elle offre plus d’options, telles que la planification des messages :

now = datetime.now()
schedule = datetime.now() + timedelta(minutes=10)
status = m.status_post(
    status=f"Envoi à {now.strftime('%H:%M:%S')}. Cette publication sera affiché dans 10 minutes..",
    scheduled_at=schedule
)
print(f"=> Publication planifié créée, Elle sera publié à {status.scheduled_at.astimezone().strftime('%H:%M:%S')}")

Et il a également la fonctionnalité de créer des publications avec des médias :

# https://mastodonpy.readthedocs.io/en/stable/05_statuses.html#mastodon.Mastodon.media_post
metadata = m.media_post("ConceptEure.png", "image/png")
m.status_post("Cette publication contient une image précédemment téléchargée 'ConceptEure.png'", media_ids=metadata["id"])
print(f"=> Publication avec une image: {status.url} créée, le {status.created_at.astimezone().strftime('%d/%m/%Y à %H:%M:%S')}, Visibilité: {status.visibility}")

La pagination devient très utile lorsque vous commencez à lire/traiter un grand nombre de données, comme dans l’exemple ci-dessous, permettant de récupérer tous les Toots de la timeline publique. Point d’attention de ne pas dépasser la limite du nombre de requêtes par minutes de Mastodon, qui est, par défaut, de 300 requêtes toutes les 5 minutes.

Le contenu de la sortie ci-dessus est le message réel, mais il est enveloppé dans du code HTML, ce qui le rend assez illisible. Ici, nous utilisons le module Python BeautifulSoup pour analyser le code HTML et récupérer le contenu réel du message.

# https://mastodonpy.readthedocs.io/en/stable/07_timelines.html#mastodon.Mastodon.timeline_public
for message in m.timeline_public():
    print(f"{message.created_at.astimezone().strftime('%d/%m/%Y à %H:%M:%S')} Account: {message.account.acct} ({message.account.display_name}) - {message.url}")
    print(BeautifulSoup(message.content, "html.parser").text)
    print()

Dans cet article, nous avons exploré quelques fonctionnalités de l’API Python Mastodon.py permettant de réaliser un bot de publication de message sur Mastodon, mais il y a bien d’autres possibilités que, vous pouvez faire avec cette librairie Python.

N’hésitez pas à consulter la documentation de la bibliothèque Python de Mastodon.py ainsi que la documentation officielle de Mastodon qui contient de nombreuses informations sur l’utilisation de l’API.

Laisser un commentaire