Automatisere din videofløye med Snapencode-API
Lær hvordan du bygger en fullstendig automatisert videostrøm, fra lastning til prosessering og levering, ved hjelp av Snapencode-klientfremmed API og et enkelt Node.js-skript.

I dagens innhold-drevne verden kan manuell video-opplasting og -behandling være en betydelig bremse, som sakte ned hele innholds-pipelinen din. Den sanne kraften i en plattform som Snapencode ligger i dens API-første design, som tillater deg å automatisere disse gjentatte oppgaver og gjenopprette verdifulle tid.
I denne tutorialen skal vi bygge et praktisk “vakt-mappe”-skript som overvåker en mappe etter nye videofiler, automatisk laster dem inn på Snapencode og bekrefter deres behandlingsstatus.
Målet: En “Vakt-Mappe” Opploader
Vårt mål er å opprette et Node.js-skript som oppnår følgende:
- Overvåker en spesiell mappe på en lokal maskin eller server.
- Når en ny videofil (
.mp4
,.mov
osv.) legges til, laster den automatisk inn på en bestemt samling i Snapencode. - Etter å ha lastet inn, poller den status-endepunktet til den videoen er “fått”.
- Når den er ferdig, logger den videoid-en og er klar for neste fil.
Dette er en perfekt løsning for arbeidsflyt hvor innhold genereres programmermæssig eller dropes inn i en delt mappe av ikke-tekniske teammedlemmer.
Forutsetninger
- En Snapencode API-nøkkel: Generer en fra din dashboard under Innstillinger > API-Nøkler.
- Node.js: Vi vil bruke JavaScript og Node.js runtime for vårt skript.
axios
ogchokidar
: To enkle pakker for å gjøre API-anrop og overvåke filer.
npm install axios chokidar form-data
Bygging av Automatiseringsskriptet
Vi vil opprette et enkelt, komplett skript. Låt oss kalle det upload-watcher.js
.
Trinn 1: Konfigurasjon av Skriptet
Først, låt oss sette opp konfigurasjonsvariablene og importere nødvendige biblioteker øverst i vårt 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');
// --- Konfigurasjon ---
const API_BASE_URL = 'https://din-Snapencode-domene.com/api/client/v1';
const API_KEY = process.env.Snapencode_API_KEY || 'sk_din_api_nøkkel_her'; // Beste praksis: Bruk miljøvariabler
const TARGET_FOLDER = 'rot/automatiserte-opplastinger'; // Samlingsveien i Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// En sette for å holde styr på filer som nå er under behandling for å unngå dobbel-opplasting
const processingFiles = new Set();
Bruk av miljøvariabler (process.env.Snapencode_API_KEY
) for din API-nøkkel er mye tryggere enn å hard-kode den direkte i skriptet.
Trinn 2: Opprette de Viktigste Funksjonene
Neste, legg til de to hovedfunksjonene: en for håndtering av fil-opplasting og en annen for overvåking av behandlingsstatus.
// (Legg til dette koden under konfigurasjonssekvensen)
async function uploadVideo(filePath) {
console.log(`[OPPLASTING] Starter opplasting for: ${path.basename(filePath)}`);
processingFiles.add(filePath); // Mark fil som nå er 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] Opplasting godkjent! Video ID: ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[FEIL] Opplastning feilet for ${path.basename(filePath)}:`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Fjern fra behandlingssett på feil
return;
}
console.log(`[OVERVÅKING] Overvåker 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) { // Fått
console.log(`✅ [FÅTT] Behandling fullført for Video ID: ${videoId}!`);
clearInterval(interval);
processingFiles.delete(filePath); // Fjern fra sett på suksess
} else if (status === 7) { // Feilet
console.error(`❌ [FEILET] Behandling feilet for Video ID: ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STATUS] Video ID ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[FEIL] Kunde ikke hente status for ${videoId}:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Sjekk hver femte sekund
}
Dette skriptet demonstrerer en server-til-server-interaksjon. Nevr eksponer din hemmelige API-nøkkel i klient-side browser-kode.
Trinn 3: Initialisere Filsjekk
Til slutt, legg til chokidar
logikken øverst i skriptet. Dette vil overvåke mappen og trigge våre funksjoner når en ny fil legges til.
// (Legg til dette koden under konfigurasjonssekvensen)
function initializeWatcher() {
console.log(`--- Snapencode Vakt-Mappe Innstilt ---`);
console.log(`Overvåker nye videoer i: ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Oppretter vakt-mappe...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignorer punkt-filer
persistent: true,
ignoreInitial: true, // Ikke last opp filer som allerede er der på start
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Skip hvis allerede under behandling
}
console.log(`[DETEKTERT] Ny fil: ${path.basename(filePath)}`);
// Vent en liten stund for å sikre at filen er fullstendig skrevet før opplasting
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Trinn 4: Kjør Din Vakt-Mappe
Med upload-watcher.js
-filen fullstendig, kan du kjøre den fra terminalen.
# Beste praksis: Sett API-nøkkel som en miljøvariabel
export Snapencode_API_KEY="sk_din_api_nøkkel_her"
# Kjør skriptet
node upload-watcher.js
Nå vil noen nye videoer du dropper inn i ./videos-to-upload
mappe automatisk lastes inn og behandles!