Automatisierung Ihres Videoflusses mit der Snapencode-API
Lernen Sie, wie Sie einen vollständig automatisierten Videoschleifen erstellen können, von dem Upload bis zur Verarbeitung und Auslieferung, mithilfe der Snapencode client-facing API und eines einfachen Node.js-Skripts.

In der heutigen Welt des Inhalt-orientierten Content-Managements kann die manuelle Video-Aufnahme und -Verarbeitung ein erheblicher Hinderungsgrund sein, der das gesamte Inhaltspipeline verlangsamt. Die wahre Stärke einer Plattform wie Snapencode liegt in ihrer API-first-Gestaltung, die es ermöglicht, diese wiederholten Aufgaben zu automatisieren und wertvolle Zeit zurückzugewinnen.
In diesem Tutorial werden wir eine praktische “Watch-Folder”-Skript erstellen, das einen Ordner überwacht, neue Video-Dateien erkennt, sie automatisch auf Snapencode hochlädt und ihren Verarbeitungsstatus bestätigt.
Das Ziel: Ein “Watch-Folder”-Uploader
Unser Ziel ist es, ein Node.js-Skript zu erstellen, das die folgenden Aufgaben erfüllt:
- Überwacht einen bestimmten Ordner auf einem lokalen Computer oder Server.
- Wenn eine neue Video-Datei (
.mp4
,.mov
usw.) hinzugefügt wird, lädt sie automatisch in eine bestimmte Sammlung in Snapencode hoch. - Nach dem Hochladen polt es den Status-Endpunkt, bis das Video als “abgeschlossen” markiert ist.
- Sobald abgeschlossen, loggt es die ID der Video-Datei und bereitet sich auf die nächste Datei vor.
Dies ist eine perfekte Lösung für Workflows, in denen Inhalte programmatisch generiert oder in einem gemeinsamen Ordner von nicht technischen Teammitgliedern abgelegt werden.
Voraussetzungen
- Eine Snapencode-API-Schlüssel: Erstelle sie aus deinem Dashboard unter Einstellungen > API-Schlüssel.
- Node.js: Wir verwenden JavaScript und die Node.js-Umgebung für unser Skript.
axios
undchokidar
: Zwei einfache Pakete zum Senden von API-Anfragen und zum Überwachen von Dateien.
npm install axios chokidar form-data
Das Erstellen des Automatisierungs-Skripts
Wir erstellen ein einzelnes, vollständiges Skript. Lassen Sie es upload-watcher.js
heißen.
Schritt 1: Konfigurieren des Skripts
Zuerst setzen wir die Konfigurationsvariablen und importieren die notwendigen Bibliotheken am Anfang unseres upload-watcher.js
-Skriptes.
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
// --- Konfiguration ---
const API_BASE_URL = 'https://your-Snapencode-domain.com/api/client/v1';
const API_KEY = process.env.Snapencode_API_KEY || 'sk_your_api_key_here'; // Empfehlenswert: Verwenden Sie Umgebungsvariablen
const TARGET_FOLDER = 'root/automated-uploads'; // Die Sammlungspfad in Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// Ein Set, um die derzeit verarbeiteten Dateien zu speichern, um Doppelhochläufe zu vermeiden
const processingFiles = new Set();
Verwenden Sie Umgebungsvariablen (process.env.Snapencode_API_KEY
) für Ihre API-Schlüssel, anstatt sie direkt im Skript einzubinden.
Schritt 2: Erstellen der Kernfunktionen
Als Nächstes fügen wir die beiden Hauptfunktionen hinzu: eine zum Handhaben des Datei-Hochladens und eine zum Überwachen des Verarbeitungsstatus.
// (Fügen Sie diesen Code unter der Konfigurationsebene ein)
async function uploadVideo(filePath) {
console.log(`[UPLOADING] Starte Hochladen für: ${path.basename(filePath)}`);
processingFiles.add(filePath); // Markiere Datei als verarbeitet
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] Hochladen akzeptiert! Video-Id: ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[FAILURE] Hochladen für ${path.basename(filePath)} fehlgeschlagen:`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Entferne aus der Verarbeitungsset auf Fehlschlag
return;
}
console.log(`[MONITORING] Überwache Status für Video-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) { // Abgeschlossen
console.log(`✅ [COMPLETE] Verarbeitung abgeschlossen für Video-Id: ${videoId}!`);
clearInterval(interval);
processingFiles.delete(filePath); // Entferne aus der Set auf Erfolg
} else if (status === 7) { // Fehlschlag
console.error(`❌ [FAILED] Verarbeitung fehlgeschlagen für Video-Id: ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STATUS] Video-Id ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[ERROR] Konnte Status für ${videoId} nicht abrufen:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Überprüfe alle 5 Sekunden
}
Dieses Skript demonstriert eine Server-zu-Server-Interaktion. Niemals Ihre geheime API-Schlüssel in Client-Seitenbrowsercode einbinden.
Schritt 3: Initialisieren des Dateiüberwachers
Als Letztes fügen wir die chokidar
-Logik am Ende des Skriptes hinzu. Dies überwacht den Ordner und löst unsere Funktionen aus, wenn eine neue Datei hinzugefügt wird.
// (Fügen Sie diesen Code am Ende des Skriptes ein)
function initializeWatcher() {
console.log(`--- Snapencode Watch-Folder Initialisiert ---`);
console.log(`Überwache neue Videos in: ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Erstelle Überwachungsordner...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignoriere Dateien mit Punkten
persistent: true,
ignoreInitial: true, // Hochladen von Dateien, die bereits vorhanden sind, vermeiden
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Überprüfe, ob bereits verarbeitet wird
}
console.log(`[DETECTED] Neue Datei: ${path.basename(filePath)}`);
// Warte einen Moment, um sicherzustellen, dass die Datei vollständig geschrieben ist, bevor sie hochgeladen wird
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Schritt 4: Ausführen Ihres Watchers
Mit dem upload-watcher.js
-Skript fertiggestellt können Sie es aus Ihrem Terminal ausführen.
# Empfehlenswert: Setzen Sie die API-Schlüssel als Umgebungsvariable
export Snapencode_API_KEY="sk_your_api_key_here"
# Führen Sie das Skript aus
node upload-watcher.js
Jetzt werden alle neuen Video-Dateien, die in den ./videos-to-upload
-Ordner abgelegt werden, automatisch hochgeladen und verarbeitet!