Publier sur Mastodon avec Perl

Date de publication:
Durée de lecture estimée:

De jour en jour, la popularité de Mastodon est grandissante. Ce média social accueille quotidiennement de plus en plus de déçus de Twitter, désireux de reprendre la main sur leurs données et de ne plus être contrôlés par des algorithmes. Voyons voir s'il est possible d'utiliser Perl pour publier automatiquement des pouets !

Les pouets sont l’équivalent des tweets sur Twitter. Ce sont des messages courts pouvant contenir des hashtags, des URL ou encore des ressources multimédia. Avoir la possibilité de publier des pouets directement sur Mastodon, à l’aide de Perl, présente de nombreux intérêts. Il est ainsi aisé de diffuser automatiquement des informations et pour ce blog, vous l’aurez deviné, de prévenir les membres de Mastodon de la diffusion d’un nouveau billet sur Perl.

Création d’une application pour Mastodon

Avant de nous lancer à corps perdu dans l’écriture du code Perl, il nous faut tout d’abord déclarer notre application à Mastodon. Ce terme désigne un processus automatisé qui va exploiter l’API REST de ce réseau social. Pour commencer, il nous faut donc créér un compte sur un serveur connecté à Mastodon car celui-ci n’est pas un site unique mais un système décentralisé dans lequel chaque serveur ne stocke qu’une partie de la communauté et des données. Le choix est large car la liste des serveurs est longue. Pour ma part, j’ai fait le choix de l’instance oc.todon.fr qui est majoritairement francophone.

Pour me suivre sur le réseau Mastodon, mon identifiant est @oauv@oc.todon.fr. Mes pouets concernent souvent Perl, le développement d’applications, la protection des données à caractère personnel et d’autres choses qui me tiennent à coeur.

Pour ce blog, j’ai donc créé un compte spécifique @jecodeenperl@oc.todon.fr pour distinguer mes pouets personnels de ceux décrivant l’activité de ce site. Pour déclarer une application, il faut se rendre sur la page des préférences et choisir la rubrique Développement.

Création d'une application

En cliquant sur le bouton Nouvelle application, on obtient un formulaire de déclaration de l’application. Il faut indiquer son nom et si nécessaire le site web qui l’héberge ainsi qu’une URL de redirection. Il faut ensuite indiquer les droits que va obtenir l’application sur les données. A t’elle le droit de lire des pouets, d’en écrire, de modifier des paramètres du compte utilisateur, etc. C’est une étape importante pour sécuriser votre traitement.

Déclaration d'une application

Une fois ce formulaire transmis, votre application est automatiquement déclarée dans le serveur de votre instance Mastodon. Contrairement à Twitter, il n’est pas ici nécessaire de justifier la finalité de votre application et la création est instantanée.

Déclaration d'une application

Avant de continuer, il reste une étape importante consistant à cliquer sur le nom de votre application afin de récupérer les différents identifiants nécessaires pour autoriser l’accès de votre application à Mastodon. Il s’agit de :

  • l’identifiant de votre application,
  • du secret,
  • du jeton d’accès.

Ces trois identifiants sont confidentiels et ne doivent pas être diffusés. Vous allez en avoir besoin dans votre code Perl et si votre application cliente est destinée à fonctionner sur un serveur, il faudra réfléchir à la meilleure façon de les stocker de manière sécurisée.

Installation de Mastodon::Client

Voyons maintenant comment exploiter l’API REST de Mastodon à l’aide de Perl. Une recherche rapide sur le meta::cpan donne rapidement une réponse. Il s’agit du module Mastodon::Client écrit par José Joaquin Atria.

Comme d’habitude, la bonne pratique avec Perl consiste à utiliser un environnement de développement définit à l’aide de Carton qui est un gestionnaire de dépendances permettant d’isoler vos différents projets.

Le fichier cpanfile est ici minimaliste puisque nous n’avons besoin que d’un seul module.

requires 'perl', '5.10.0';
requires "Mastodon::Client" => "0.0.17";

Publication sur Mastodon

Nous pouvons maintenant essayer de publier sur Mastodon à l’aide d’un script Perl. Commençons par définir l’environnement d’exécution du code et inclure le client Mastodon:

use strict;
use warnings;

use Mastodon::Client;

L’étape suivante consiste à instancier un client Mastodon. Pour cela, vous devez spécifier au constructeur le nom du serveur sur lequel vous allez publier, le nom de votre application Mastodon, l’identifiant de votre application, le secret et le jeton d’accès que vous avez obtenu lors de la création de l’application.

my $client = Mastodon::Client->new(
instance        => 'oc.todon.fr',
name            => 'publi_jecodeenperl',
client_id       => 'XXXX IDENTIFIANT_APPLICATION XXXX',
client_secret   => 'XXXX SECRET XXXX',
access_token    => 'XXXX JETON_D_ACCES XXXX',
coerce_entities => 1,
);

Ce n’est définitivement pas une bonne pratique de laisser trainer ainsi dans le code les différents identifiants utilisés pour l’authentification sur le serveur Mastodon. Si par exemple, vous utilisez un gestionnaire de versions tel que Git, vos identifiants seront également versionnés et pourraient donc être consultés par des personnes non autorisées. Pensez à les externaliser dans un fichier de configuration protégé, des variables d’environnement ou mieux encore à utiliser une solution dédiée telle que Vault.

La dernière étape est celle de la transmission du pouet au serveur Mastodon. Il faut pour cela utiliser la méthode post_status qui reçoit en paramètre une chaîne de caractères. Celle-ci peut contenir un simple texte accompagné éventuellement de hashtags. Elle peut également prendre la forme d’une URL pointant sur un billet du blog.

$client->post_status('https://www.jecodeenperl.fr/2022-10-08-jorganise-mes-r%C3%A9pertoires-de-travail.html');

Dans ce cas, Mastodon pourra exploiter le contenu des balises de métadonnées dédiées aux réseaux sociaux afin d’améliorer le rendu visuel du pouet.

Rendu final du pouet

Il y a bien évidemment de nombreuses autres fonctionnalités dans ce client Mastodon qui vous permettront d’exploiter aisément l’API REST de ce super média social à l’aide de Perl.