Synchroniser des vidéos YouTube vers PeerTube avec n8n

Vous avez une instance PeerTube et vous souhaitez y importer automatiquement certaines vidéos d'une chaîne YouTube ? Avec n8n, c'est possible en quelques clics.

Le principe

n8n est un outil d'automatisation open-source (comme Zapier, mais auto-hébergeable). L'idée est simple :

  1. Récupérer le flux RSS d'une chaîne YouTube
  2. Filtrer les vidéos selon nos critères
  3. Vérifier si la vidéo existe déjà sur PeerTube
  4. Si non, l'importer via l'API PeerTube

Prérequis

Étape 1 : Récupérer le flux RSS YouTube

Chaque chaîne YouTube dispose d'un flux RSS. L'URL est :

https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID

Pour trouver le CHANNEL_ID, allez sur la chaîne YouTube et regardez l'URL. Par exemple pour la chaîne fictive “TechTalks” :

https://www.youtube.com/channel/UC1234567890abcdef

Dans n8n, créez un nœud HTTP Request : – Method: GET – URL: https://www.youtube.com/feeds/videos.xml?channel_id=UC1234567890abcdef – Response Format: Text

Étape 2 : Parser et filtrer les vidéos

Ajoutez un nœud Code pour extraire les vidéos qui nous intéressent. Par exemple, pour ne garder que les vidéos dont le titre contient “Tutorial” :

const xml = $input.first().json.data;
const entries = xml.split('<entry>');
const videos = [];

for (let i = 1; i < entries.length; i++) {
  const entry = entries[i];
  const videoIdMatch = entry.match(/<yt:videoId>([^<]+)<\/yt:videoId>/);
  const titleMatch = entry.match(/<title>([^<]+)<\/title>/);

  if (videoIdMatch && titleMatch) {
    const title = titleMatch[1];
    // Filtrer : ne garder que les tutoriels
    if (title.toLowerCase().includes('tutorial')) {
      videos.push({
        videoId: videoIdMatch[1],
        title: title,
        url: `https://www.youtube.com/watch?v=${videoIdMatch[1]}`
      });
    }
  }
}

if (videos.length > 0) {
  return [{json: videos[0]}];
}
return [];

Vous pouvez adapter le filtre selon vos besoins : – Mots-clés dans le titre – Exclusion de certains termes – Combinaison de critères

Étape 3 : Vérifier les doublons

Avant d'importer, vérifions que la vidéo n'existe pas déjà. Ajoutez un nœud HTTP Request :

Puis un nœud Code pour filtrer :

const searchResult = $input.first().json;
const videoTitle = $('Parse RSS').first().json.title;
const videoUrl = $('Parse RSS').first().json.url;

const exists = searchResult.data?.some(v => v.name === videoTitle);

if (exists) {
  return []; // Vidéo déjà présente, on arrête
}

return [{json: {title: videoTitle, url: videoUrl}}];

Étape 4 : Obtenir un token PeerTube

Pour utiliser l'API PeerTube, il faut s'authentifier. Ajoutez un nœud HTTP Request :

Astuce : Vous pouvez trouver le client_id et client_secret via l'API /api/v1/oauth-clients/local.

Étape 5 : Importer la vidéo

Dernier nœud HTTP Request pour lancer l'import :

Planification

Ajoutez un nœud Schedule Trigger au début du workflow pour exécuter automatiquement l'import :

Le workflow complet

[Schedule] → [Get RSS] → [Parse & Filter] → [Check Exists] → [Filter New] → [Get Token] → [Import]

Points d'attention

  1. Cookies YouTube : Si l'import échoue avec une erreur 403, PeerTube a peut-être besoin de cookies YouTube valides. Consultez la documentation yt-dlp pour configurer les cookies.

  2. Rate limiting : N'exécutez pas le workflow trop fréquemment pour éviter d'être bloqué par YouTube.

  3. Stockage : Les vidéos importées prennent de l'espace disque. Pensez à créer un workflow de nettoyage pour les anciennes vidéos si nécessaire.

  4. Légalité : Assurez-vous d'avoir le droit de republier les vidéos que vous importez (Creative Commons, accord de l'auteur, etc.).

Conclusion

n8n rend l'automatisation accessible à tous. Avec ce workflow, vous pouvez créer votre propre miroir PeerTube de contenus YouTube sélectionnés, tout en gardant le contrôle sur ce qui est importé grâce aux filtres.


Ressources utiles :Documentation n8nDocumentation PeerTubeAPI REST PeerTube