Skip to Content

Automatyzacja przepływu wideo przy użyciu API Snapencode

Naucz się budować pełnie automatyczny przepływ wideo, od załadunku do przetwarzania i dostarczania, korzystając z klienta API Snapencode oraz prostego skryptu Node.js.

przez
Hero image for Automatyzacja przepływu wideo przy użyciu API Snapencode

W dzisiejszym świecie opartym na treściach, ręczne przesyłanie i procesowanie wideo może być poważnym utrudnieniem, zwalniając cały łańcuch produkcyjny. Prawdziwa siła platformy takiej jak Snapencode polega na jej projektowaniu opartym na API, które pozwala automatyzować te powtarzające się zadania i odzyskać cenne czas.

W tym przewodniku zbudujemy praktyczny skrypt “folderu obserwacyjnego” (watch folder), który monitoruje katalogi dla nowych plików wideo, automatycznie przesyłając je do Snapencode i potwierdzając status ich procesowania.

Celem: Skrypt “Folderu Obserwacyjnego”

Naszym celem jest stworzenie skryptu Node.js, który osiągnie następujące cele:

  1. Monitoruje określony katalog na lokalnym komputerze lub serwerze.
  2. Gdy nowy plik wideo (.mp4, .mov itp.) zostanie dodany, automatycznie go przesyła do wyznaczonej kolekcji w Snapencode.
  3. Po przesłaniu, poluje na endpoint statusu aż do momentu gdy wideo zostanie “zakończone.”
  4. Gdy zostanie zakończone, loguje ID wideo i jest gotowe do następnego pliku.

To idealne rozwiązanie dla przepływów pracy, gdzie treści są generowane programowo lub wprowadzane przez niezaufanych członków zespołu.

Przygotowania

  • Klucz API Snapencode: Generuj go ze swojego panelu w Ustawienia > Klucze API.
  • Node.js: Będziemy używać JavaScript i środowisko Node.js do naszego skryptu.
  • axios i chokidar: Dwie proste pakiety do robienia zapytań API i obserwacji plików.
npm install axios chokidar form-data

Budowanie Skryptu Automatyzacyjnego

Stworzymy jeden, kompletny skrypt. Nazwijmy go upload-watcher.js.

Krok 1: Konfiguracja Skryptu

Po pierwsze, ustalimy zmienne konfiguracyjne i zaimportujemy niezbędne biblioteki na początku naszego pliku upload-watcher.js.

upload-watcher.js
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const path = require('path'); const chokidar = require('chokidar'); // --- Konfiguracja --- const API_BASE_URL = 'https://twoja-domena-snapencode.com/api/client/v1'; const API_KEY = process.env.Snapencode_API_KEY || 'sk_twoj_klucz_api_tutaj'; // Najlepsze praktyki: używaj zmiennych środowiskowych const TARGET_FOLDER = 'root/automatyczne-wgrania'; // Ścieżka kolekcji w Snapencode const WATCH_DIRECTORY = './videos-do-wgrania'; // Zbiór do przechowywania plików aktualnie będących w procesie, aby uniknąć podwójnych przesyłań const processingFiles = new Set();

Używanie zmiennych środowiskowych (process.env.Snapencode_API_KEY) dla klucza API jest znacznie bezpieczniejsze niż kodowanie go bezpośrednio w skrypcie.

Krok 2: Stworzenie Głównych Funkcji

Następnie dodajemy dwie główne funkcje: jedną do obsługi przesyłu pliku i drugą do monitorowania statusu procesowania.

upload-watcher.js
// (Dodaj ten kod poniżej sekcji konfiguracji) async function uploadVideo(filePath) { console.log(`[WGRAJĄC] Rozpoczynamy wgranie dla: ${path.basename(filePath)}`); processingFiles.add(filePath); // Oznacz plik jako aktualnie będący w procesie 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] Wgranie przyjęte! ID wideo: ${response.data.data.id}`); return response.data.data.id; } catch (error) { console.error(`[FAŁSZ] Wgranie nie powiodło się dla ${path.basename(filePath)}:`, error.response?.data?.message || error.message); return null; } } async function monitorStatus(videoId, filePath) { if (!videoId) { processingFiles.delete(filePath); // Usuń z zestawu procesów na niepowodzeniu return; } console.log(`[MONITORING] Obserwuje status dla ID wideo: ${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) { // Zakończone console.log(`✅ [ZAKOŃCZONE] Procesowanie zakończone dla ID wideo: ${videoId}!`); clearInterval(interval); processingFiles.delete(filePath); // Usuń z zestawu na sukcesie } else if (status === 7) { // Niepowiodło się console.error(`❌ [NIEPOWODZIŁO] Procesowanie nie powiodło się dla ID wideo: ${videoId}.`); clearInterval(interval); processingFiles.delete(filePath); } else { console.log(`[STATUS] ID wideo ${videoId}: ${status_text} (${status})`); } } catch (error) { console.error(`[BŁĄD] Nie mogło się pobrać statusu dla ${videoId}:`, error.message); clearInterval(interval); processingFiles.delete(filePath); } }, 5000); // Sprawdź co 5 sekund }

Ten skrypt demonstruje interakcję serwer-serwer. Nigdy nie udostępniaj swojego klucza API w kodzie klienta.

Krok 3: Inicjalizacja Obserwatora Plików

Na końcu dodajemy logikę chokidar na koniec skryptu. Ten będzie obserwował katalogi i wywoła nasze funkcje gdy nowy plik zostanie dodany.

upload-watcher.js
// (Dodaj ten kod na końcu pliku) function initializeWatcher() { console.log(`--- Snapencode Watch Folder Zainicjowany ---`); console.log(`Obserwuje nowe wideo w: ${path.resolve(WATCH_DIRECTORY)}`); if (!fs.existsSync(WATCH_DIRECTORY)) { console.log(`Tworzę katalog obserwowany...`); fs.mkdirSync(WATCH_DIRECTORY, { recursive: true }); } const watcher = chokidar.watch(WATCH_DIRECTORY, { ignored: /(^|[\/\\])\../, // ignoruj pliki zaczynające się od punktu persistent: true, ignoreInitial: true, // Nie wgruj plików które są już tam na starcie }); watcher.on('add', (filePath) => { if (processingFiles.has(filePath)) { return; // Przeskocz jeśli jesteśmy już w procesie } console.log(`[DETECTOWANO] Nowy plik: ${path.basename(filePath)}`); // Czekaj chwilę aby upewnić się że plik jest całkowicie zapisany przed przesłaniem setTimeout(async () => { const videoId = await uploadVideo(filePath); await monitorStatus(videoId, filePath); }, 2000); }); } initializeWatcher();

Krok 4: Uruchom Twój Obserwator

Z skryptem upload-watcher.js ukończonym, możesz go uruchomić z terminala.

# Najlepsze praktyki: Ustaw klucz API jako zmienną środowiskową export Snapencode_API_KEY="sk_twoj_klucz_api_tutaj" # Uruchom skrypt node upload-watcher.js

Teraz, każdy nowy plik wideo który zostanie wprowadzony do katalogu ./videos-do-wgrania zostanie automatycznie przesyłany i procesowany!