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 :
- Récupérer le flux RSS d'une chaîne YouTube
- Filtrer les vidéos selon nos critères
- Vérifier si la vidéo existe déjà sur PeerTube
- Si non, l'importer via l'API PeerTube
Prérequis
- Une instance n8n (ex:
n8n.example.org) - Une instance PeerTube (ex:
video.example.org) - Les credentials OAuth2 de votre PeerTube
É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 :
- Method: GET
- URL:
https://video.example.org/api/v1/search/videos?search={{ encodeURIComponent($json.title) }}&searchTarget=local
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 :
- Method: POST
- URL:
https://video.example.org/api/v1/users/token - Content-Type:
application/x-www-form-urlencoded - Body:
client_id: votre client IDclient_secret: votre client secretgrant_type: passwordusername: votre usernamepassword: votre password
Astuce : Vous pouvez trouver le
client_idetclient_secretvia l'API/api/v1/oauth-clients/local.
Étape 5 : Importer la vidéo
Dernier nœud HTTP Request pour lancer l'import :
- Method: POST
- URL:
https://video.example.org/api/v1/videos/imports - Headers:
Authorization: Bearer {{ $json.access_token }} - Content-Type:
multipart/form-data - Body:
targetUrl: l'URL YouTubechannelId: l'ID du channel PeerTube destinationprivacy: 1 (public), 2 (unlisted), 3 (private)name: le titre de la vidéocategory: l'ID de la catégorie (optionnel)
Planification
Ajoutez un nœud Schedule Trigger au début du workflow pour exécuter automatiquement l'import :
- Toutes les 6 heures pour un flux actif
- Une fois par jour pour un flux moins actif
Le workflow complet
[Schedule] → [Get RSS] → [Parse & Filter] → [Check Exists] → [Filter New] → [Get Token] → [Import]
Points d'attention
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.
Rate limiting : N'exécutez pas le workflow trop fréquemment pour éviter d'être bloqué par YouTube.
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.
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 n8n – Documentation PeerTube – API REST PeerTube