Automatisering af din video-workflow med Snapencode-API'en
Lær at bygge en fuldt automatiseret video-pipeline fra opload til behandling og levering, ved hjælp af Snapencode-klient-API'en og et simpelt Node.js-skript.

I dagens indholdstyrede verden kan manuel videoopladning og -behandling være en betydelig bremse, der forsinker hele indholdspipelinen. Den rigtige kraft i en platform som Snapencode ligger i dens API-første design, der tillader automatisering af disse gentagne opgaver og genindføring af værdifuld tid.
I dette tutorial bygger vi en praktisk “watch folder”-skript, der overvåger en mappe for nye videofiler, automatisk uploader dem til Snapencode og bekræfter deres behandlingsstatus.
Målet: En “Watch Folder”-Uploader
Vores mål er at oprette et Node.js-skript, der opnår følgende:
- Overvåger en bestemt mappe på en lokal maskine eller server.
- Når en ny videofil (
.mp4
,.mov
osv.) tilføjes, uploader det automatisk den til en bestemt samling i Snapencode. - Efter upload, poller det status-endepunktet indtil videoen er “fuldført”.
- Når fuldført, logger det videoens ID og er klar til næste fil.
Dette er et perfekt løsning for workflows hvor indhold genereres programmermæssigt eller droppe i en delt mappe af ikke-tekniske teammedlemmer.
Forudsætninger
- En Snapencode API-nøgle: Generér en fra din dashboard under Indstillinger > API-Nøgler.
- Node.js: Vi bruger JavaScript og Node.js runtime for vores skript.
axios
ogchokidar
: To simple pakker til at sende API-anmodninger og overvåge filer.
npm install axios chokidar form-data
Bygning af Automatiseringsskriptet
Vi vil oprette et enkelt, komplett skript. Lad os kalde det upload-watcher.js
.
Trin 1: Konfigurere Skriptet
Først skal vi sætte op konfigurationsvariablerne og importere de nødvendige biblioteker i toppen af vores upload-watcher.js
fil.
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://din-Snapencode-domæne.com/api/client/v1';
const API_KEY = process.env.Snapencode_API_NØGLE || 'sk_din_api_nøgle_hér'; // Bedste praksis: brug miljøvariabler
const TARGET_FOLDER = 'root/automatiserede-oplægninger'; // Samlingensti i Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// En sæt til at holde styr på filer, der er under behandling for at undgå dobbeltopladser
const processingFiles = new Set();
Brug af miljøvariabler (process.env.Snapencode_API_NØGLE
) til din API-nøgle er meget mere sikker end at hardkodde den direkte i skriptet.
Trin 2: Opret de grundlæggende Funktioner
Næste, tilføj de to hovedfunktioner: en for håndtering af filopladningen og en anden for overvågning af behandlingsstatus.
// (Tilføj dette kode under konfigurationssektionen)
async function uploadVideo(filePath) {
console.log(`[UPLOADING] Start oploadning af: ${path.basename(filePath)}`);
processingFiles.add(filePath); // Marker fil som under behandling
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(`[SUCCES] Oploadning accepteret! Video ID: ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[FEJL] Oploadning mislykkedes for ${path.basename(filePath)}:`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Fjern fra behandlingssæt på fejl
return;
}
console.log(`[OVERVÅG] Overvåg status for 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) { // Fuldendt
console.log(`✅ [FULDFØRT] Behandling afsluttet for Video ID: ${videoId}!`);
clearInterval(interval);
processingFiles.delete(filePath); // Fjern fra sæt på succes
} else if (status === 7) { // Mislykkedes
console.error(`❌ [FEJL] Behandlingen mislykkedes for Video ID: ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STATUS] Video ID ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[FEJL] Kunde ikke hente status for ${videoId}:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Tjek hver 5 sekunder
}
Dette skript demonstrerer en server-til-server-interaktion. Nevr udsæt din hemmelige API-nøgle i klient-side browserkode.
Trin 3: Initialisere Fildetektor
Endelig, tilføj chokidar
logikken til slutningen af skriptet. Dette vil overvåge mappen og aktivere vores funktioner, når en ny fil tilføjes.
// (Tilføj dette kode til slutningen af filen)
function initializeWatcher() {
console.log(`--- Snapencode Watch Folder Initialiseret ---`);
console.log(`Overvåger nye videoer i: ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Opretter overvågningsmappe...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignorer dotfiler
persistent: true,
ignoreInitial: true, // Undgå at oploade filer, der allerede er til stede ved starten
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Spring over hvis allerede under behandling
}
console.log(`[DETEKT] Ny fil: ${path.basename(filePath)}`);
// Vent en øjeblik, til at sikre, at filen er fuldstændigt skrevet før oploadning
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Trin 4: Kør Din Watcher
Med upload-watcher.js
-filen fuldendt kan du køre den fra din terminal.
# Bedste praksis: sæt API-nøglen som en miljøvariabel
export Snapencode_API_NØGLE="sk_din_api_nøgle_hér"
# Kør skriptet
node upload-watcher.js
Nu vil enhver nye videofil, du droppe i ./videos-to-upload
-mappen, blive automatisk oploaded og behandlet!