Tuto - Envoyer un flux RSS sur un compte Mastodon

Jusqu’à présent, j’utilisais les services de IFTT avec mastodon.social mais ça se limite à cela pour cet outil bien trop basique. En faisant suite à mon premier tuto sur Bluesky, voilà ce que l’on peut rajouter au premier script pour mettre un réseau du fediverse comme mastodon, mamot, piaille, etc.

Je reprends en fait une partie de ce qui est déjà fait dans l’autre script, donc il y a forcément des redites. Mais pour ceux qui n’ont que faire du réseau au ciel pas si bleu que ça.

1ère étape - Le Trigger

…ou déclencheur. Après avoir créé votre compte gratuit pipedream, vous n’avez qu’à créer un projet à l’intérieur duquel vous créez un workflow. Le premier élément de ce workflow est un trigger RSS. Il vous est proposé directement en principe. Vous faites ensuite un copier-coller de votre flux RSS dans Feed URL, vous pouvez aussi régler la prise en compte des premiers éléments. Il vous propose de tester et de sélectionner élément qui servira à tous les tests des éléments suivants.

2ème étape - Mettre en forme le texte

J’ai gardé la même limitation que Bluesky (qui vient de l’augmenter) à 300 caractères. Je laisse un marge avec ce que je vais rajouter ensuite donc je vais faire une limitation à 200 dans cette partie (dans const maxLength). Le but c’est de supprimer tout ce qui est lié à du codage HTML/XML et de limiter la taille. On va créer un script NodeJS qui va utiliser quelques outils internes fort pratique. Je l’ai appelé transform_text.

import { decode } from 'html-entities';

export default defineComponent({
  async run({ steps, $ }) {
    const truncateText = (text, maxLength) => {
      if (text.length > maxLength) {
        return text.slice(0, maxLength) + '...';
      }
      return text;
    };

    const stripHtmlTags = (text) => {
      return text.replace(/<[^>]*>/g, ''); // Remove HTML tags
    };

    // Example: Assume the RSS feed has 'description' and 'link' fields
    const rssDescription = steps.trigger.event.description || '';
    const rssLink = steps.trigger.event.link || '#'; // Fallback URL if none is provided
    const maxLength = 200; // Set your desired maximum length
    
    // Sanitize and truncate the description
    const sanitizedDescription = decode(stripHtmlTags(rssDescription));
    const truncatedDescription = truncateText(sanitizedDescription, maxLength);

    // Add "texte" with the URL
    const finalDescription = `${truncatedDescription} 
#hashtag
    
texte: ${rssLink}`;
    
    // Log or return the final description
    console.log("Final Description:", finalDescription);
    return finalDescription;
  },
});

3ème étape - reprise des textes envoi

Contrairement à Bluesky, je ne reprends pas ici d’image et je me contente de l’aspect texte avec le lien qui va bien. Le script suivant peut donc s’ajouter à la serie déjà créée pour Bluesky, à sa suite. C’est un peu comme si on avait les deux en parallèle puisqu’on reprend les éléments de sortie des deux premiers scripts. Mais avant tout ça, vous avez besoin de créer un token dans votre instance mastodon. Il faut aller dans les préférences et dans “développement”. Vous allez créer une application. Elle s’appellera pipedream et le site web sera celui de https://pipedream.com. vous pouvez vous contenter de mettre les droits read et write. Une fois créée, cliquez dessus pour aller chercher le jeton/token que vous allez copier dans le script à la ligne “access token”. Et vous mettre aussi l’adresse de votre instance dans api_url.

import Mastodon from 'mastodon-api'

export default defineComponent({
  async run({ steps, $ }) {
    const M = new Mastodon({
      access_token: 'aabcdefghijklmnopqrstu',
      api_url: 'https://tonfediverse.fr/api/v1/', 
    });

    // Fetch and upload image
    const imageResponse = await fetch(steps.trigger.event["media:content"]["@"].url);
    const imageBuffer = await imageResponse.arrayBuffer();
    const image = Buffer.from(imageBuffer);

   const mediaResponse = await M.post('media', { file: image });

   
    // Post status with media
    await M.post('statuses', { 
      status: steps.transform_text.$return_value,
      visibility: 'public',
    
    });
  },
})

On voit bien ici que je reprend l’élément de transform_text , le 2ème script de transformation dans la dernière partie en temps que return_value.

Voilà, à vous de jouer et d’adapter. Et n’abusez pas trop de l’IA de pipedream, elle risque de vous perdre.


Ecrit le : 15/08/2025
Categorie : tuto
Tags : tuto,pipedream,bluesky

Commentaires : par Mastodon ou E-Mail.