Automatizace Vašeho video workflowu pomocí rozhraní API Snapencode
Naučte se stavět plně automatizovaný tok videa, od nahrání po zpracování a doručování, pomocí klienta rozhraní API Snapencode a jednoduchého skriptu Node.js.

V dnešním světě zaměřeném na obsah je ruční nahrávání a zpracování videa významným zátěží, která zpomaluje celý proces obsahu. Skutečná síla platformy jako Snapencode spočívá v její API-first designu, který umožňuje automatizovat tyto opakované úkoly a získat zpět cenný čas.
V tomto tutoriálu budeme budovat praktický skript “watch folder”, který sleduje adresář pro nové soubory videa, automaticky je nahrává do Snapencode a potvrzuje jejich stav zpracování.
Cíl: Skript “Watch Folder” pro Nahrávání
Naším cílem je vytvořit Node.js skript, který dosahuje následujících cílů:
- Sleduje konkrétní adresář na lokálním počítači nebo serveru.
- Když do něj přidáte nový soubor videa (
.mp4
,.mov
atd.), automaticky jej nahrávejte do určené kolekce v Snapencode. - Po nahrání sleduje stav endpointem, dokud video není “dokončeno.”
- Jakmile je dokončeno, zaznamená ID videa a je připraveno na další soubor.
Toto je ideální řešení pro workflowy, kde obsah se generuje programově nebo je přidáván do sdíleného adresáře nezávislými členy týmu.
Předpoklady
- API klíč Snapencode: Generujte jeden z vašeho panelu pod Nastavení > API klíče.
- Node.js: Použijeme JavaScript a runtime Node.js pro skript.
axios
achokidar
: Dva jednoduché balíky pro vytváření požadavků na API a sledování souborů.
npm install axios chokidar form-data
Budování Skriptu pro Automatizaci
Vytvoříme jeden kompletní skript. Nazvěme ho upload-watcher.js
.
Krok 1: Konfigurace Skriptu
Začněme nastavením konfiguračních proměnných a importem potřebných knihoven na začátku našeho souboru upload-watcher.js
.
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
// --- Konfigurace ---
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'; // Nejlepší praxe: použijte proměnné prostředí
const TARGET_FOLDER = 'root/automated-uploads'; // Cesta kolekce v Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// Sada pro sledování souborů aktuálně zpracovávaných, aby se zabránilo dvojnásobnému nahrávání
const processingFiles = new Set();
Používání proměnných prostředí (process.env.Snapencode_API_KEY
) pro váš API klíč je mnohem bezpečnější než jeho přímé ukládání do skriptu.
Krok 2: Vytvoření hlavních funkcí
Následně přidejte dvě hlavní funkce: jednu pro zpracování nahrávání souborů a druhou pro sledování stavu zpracování.
// (Přidejte tento kód pod sekci konfigurace)
async function uploadVideo(filePath) {
console.log(`[NÁHRÁVÁNÍ] Začínáme nahrávat soubor: ${path.basename(filePath)}`);
processingFiles.add(filePath); // Označíme soubor jako zpracovávaný
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(`[ÚSPĚŠNÉ] Nahrání přijato! ID videa: ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[NEÚSPĚŠNÉ] Nahrání pro soubor ${path.basename(filePath)} selhalo:`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Odstraní z sady zpracovávaných souborů při selhání
return;
}
console.log(`[MONITOROVÁNÍ] Sledujeme stav videa 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) { // Dokončeno
console.log(`✅ [DOKONČENO] Zpracování dokončeno pro Video ID: ${videoId}!`);
clearInterval(interval);
processingFiles.delete(filePath); // Odstraní z sady při úspěchu
} else if (status === 7) { // Selhalo
console.error(`❌ [SELHALO] Zpracování selhalo pro Video ID: ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STAV] Video ID ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[CHYBA] Nemohu získat stav pro ${videoId}:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Zkontrolujte každých 5 sekund
}
Tento skript demonstruje interakci server-server. Nikdy neposkytněte svůj tajný API klíč v klient-side kódu.
Krok 3: Inicializace sledování souborů
Nakonec přidejte logiku chokidar
na konec skriptu. Toto sleduje adresář a spouští naše funkce, když do něj přidáte nový soubor.
// (Přidejte tento kód na konec souboru)
function initializeWatcher() {
console.log(`--- Snapencode Watch Folder Initialized ---`);
console.log(`Sledujeme nové soubory videa v: ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Vytváříme sledovaný adresář...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignorujte soubory začínající tečkou
persistent: true,
ignoreInitial: true, // Nahrávejte soubory, které jsou již v adresáři na startu
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Přehlédněte, pokud je již zpracováván
}
console.log(`[DETEKTUJE] Nový soubor: ${path.basename(filePath)}`);
// Čekáme na chvíli, aby se soubor naplno napsal před nahráním
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Krok 4: Spuštění Vašeho Sledovatele
S kompletním souborem upload-watcher.js
můžete spustit skript z vaší terminálu.
# Nejlepší praxe: nastavte API klíč jako proměnnou prostředí
export Snapencode_API_KEY="sk_your_api_key_here"
# Spusťte skript
node upload-watcher.js
Teď, jakmile přidáte nový soubor video do adresáře ./videos-to-upload
, bude automaticky nahrán a zpracován!