Automatiser votre flux de vidéo avec l'API Snapencode
Apprenez à créer un pipeline vidéo entièrement automatisé, depuis l'importation jusqu'à la livraison, en utilisant l'API client-facing Snapencode et un script Node.js simple.

Dans un monde où le contenu est la priorité, l’upload manuel de vidéos et leur traitement peuvent être une brique importante, ralentissant ainsi tout votre pipeline de contenu. Le véritable pouvoir d’une plateforme comme Snapencode réside dans son design API-first, qui permet de automatiser ces tâches répétitives et récupérer du temps précieux.
Dans ce tutoriel, nous allons créer une script pratique « watch folder » qui surveille un dossier pour les nouveaux fichiers vidéo, les upload automatiquement à Snapencode et confirme leur statut de traitement.
L’objectif : Un “Watch Folder” Uploader
Notre objectif est de créer un script Node.js qui atteint les points suivants :
- Surveille un dossier spécifique sur une machine locale ou serveur.
- Lorsqu’un nouveau fichier vidéo (
.mp4
,.mov
, etc.) est ajouté, il upload automatiquement ce dernier dans une collection dédiée à Snapencode. - Après l’upload, il poll le endpoint de statut jusqu’à ce que la vidéo soit “terminée.”
- Une fois terminée, il enregistre l’ID de la vidéo et est prêt pour le prochain fichier.
C’est une solution parfaite pour les workflows où le contenu est généré programmationnellement ou déposé dans un dossier partagé par des membres non techniques.
Prérequis
- Une clé API Snapencode : Générez-en une à partir de votre tableau de bord sous Paramètres > Clés API.
- Node.js : Nous utiliserons JavaScript et le runtime Node.js pour notre script.
axios
etchokidar
: Deux packages simples pour faire des requêtes API et surveiller les fichiers.
npm install axios chokidar form-data
Construction de la script d’automatisation
Nous allons créer une seule et même script. Appelons-le upload-watcher.js
.
Étape 1 : Configuration du Script
Tout d’abord, mettons en place les variables de configuration et importons les bibliothèques nécessaires en haut de notre fichier upload-watcher.js
.
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
// --- Configuration ---
const API_BASE_URL = 'https://votre-domaine-snapencode.com/api/client/v1';
const API_KEY = process.env.Snapencode_API_KEY || 'sk_votre_clé_api_ici'; // Meilleure pratique : utilisez les variables d'environnement
const TARGET_FOLDER = 'root/automated-uploads'; // Le chemin de la collection dans Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// Un ensemble pour suivre les fichiers en cours de traitement afin d'éviter les uploads doubles
const processingFiles = new Set();
L’utilisation des variables d’environnement (process.env.Snapencode_API_KEY
) pour votre clé API est beaucoup plus sécurisée que la codification directe dans le script.
Étape 2 : Création des fonctions principales
Ensuite, ajoutez les deux fonctions principales : une pour gérer l’upload du fichier et l’autre pour surveiller le statut de traitement.
// (Ajoutez ce code en dessous de la section de configuration)
async function uploadVideo(filePath) {
console.log(`[UPLOADING] Début de l'upload pour : ${path.basename(filePath)}`);
processingFiles.add(filePath); // Marque le fichier comme étant en cours de traitement
const form = new FormData();
form.append('video', fs.createReadStream(filePath));
form.append('folder', TARGET_FOLDER);
try {
const response = await axios.post(`${API_BASE_URL}/uploads`, form, {
headers: { ...form.getHeaders(), 'Authorization': `Bearer ${API_KEY}` },
});
console.log(`[SUCCESS] L'upload a été accepté ! ID de la vidéo : ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[FAILURE] L'upload a échoué pour ${path.basename(filePath)} :`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Supprime du ensemble de traitement en cas d'échec
return;
}
console.log(`[MONITORING] Surveillance du statut pour la Vidéo ID : ${videoId}`);
const interval = setInterval(async () => {
try {
const response = await axios.get(`${API_BASE_URL}/uploads/${videoId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` },
});
const { status, status_text } = response.data.data;
if (status === 6) { // Terminé
console.log(`✅ [COMPLETE] Le traitement a été terminé pour la Vidéo ID : ${videoId} !`);
clearInterval(interval);
processingFiles.delete(filePath); // Supprime du ensemble de traitement en cas de réussite
} else if (status === 7) { // Échoué
console.error(`❌ [FAILED] Le traitement a échoué pour la Vidéo ID : ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STATUS] Vidéo ID ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[ERROR] Impossible de récupérer le statut pour ${videoId}:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Vérifie tous les 5 secondes
}
Ce script démontre une interaction serveur-serveur. Jamais exposez votre clé API dans le code client.
Étape 3 : Initialisation du surveillant de fichiers
Enfin, ajoutez la logique chokidar
en fin de script. Cela surveillera le dossier et déclenchera nos fonctions lorsque un nouveau fichier est ajouté.
// (Ajoutez ce code à la fin du fichier)
function initializeWatcher() {
console.log(`--- Snapencode Watch Folder Initialement ---`);
console.log(`Surveillance de nouveaux fichiers dans : ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Création du dossier de surveillance...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignore les fichiers cachés
persistent: true,
ignoreInitial: true, // Ne charge pas les fichiers qui sont déjà présents au démarrage
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Passe si déjà en cours de traitement
}
console.log(`[DETECTED] Nouveau fichier : ${path.basename(filePath)}`);
// Attends un moment pour s'assurer que le fichier est complètement écrit avant l'upload
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Étape 4 : Lancement de votre surveillant
Avec le fichier upload-watcher.js
complet, vous pouvez lancer la commande dans votre terminal.
# Meilleure pratique : définissez la clé API comme variable d'environnement
export Snapencode_API_KEY="sk_votre_clé_api_ici"
# Lancement du script
node upload-watcher.js
Maintenant, tout nouveau fichier vidéo que vous déposez dans le dossier ./videos-to-upload
sera automatiquement uploadé et traité !