Skip to Content

Tự động hóa quy trình video của bạn với API Snapencode

Học cách xây dựng một đường ống video hoàn toàn tự động, từ tải lên đến xử lý và phân phối, sử dụng API khách hàng-facing Snapencode và một kịch bản Node.js đơn giản.

bởi
Hero image for Tự động hóa quy trình video của bạn với API Snapencode

Trong thế giới nội dung ngày nay, việc tải và xử lý video thủ công có thể là một nút thắt quan trọng, làm chậm toàn bộ đường ống nội dung của bạn. Điểm mạnh thực sự của một nền tảng như Snapencode nằm trong thiết kế API-first của nó, cho phép bạn tự động hóa các nhiệm vụ lặp đi lặp lại này và lấy lại thời gian quý giá.

Trong hướng dẫn này, chúng ta sẽ xây dựng một kịch bản “watch folder” thực tế để theo dõi thư mục cho các tệp tin video mới, tải chúng lên Snapencode tự động và xác nhận trạng thái xử lý của chúng.

Mục tiêu: Tải tệp tin “Watch Folder”

Mục tiêu của chúng ta là tạo một kịch bản Node.js đạt được những gì sau đây:

  1. Theo dõi thư mục cụ thể trên máy tính cục bộ hoặc máy chủ.
  2. Khi có tệp tin video mới (.mp4, .mov, v.v.) được thêm vào, nó sẽ tải chúng lên một tập hợp dữ liệu xác định trong Snapencode tự động.
  3. Sau khi tải lên, nó sẽ theo dõi trạng thái endpoint cho đến khi video được “hoàn thành”.
  4. Một khi hoàn thành, nó sẽ ghi nhận ID của video và sẵn sàng cho tệp tin tiếp theo.

Đây là một giải pháp hoàn hảo cho các quy trình nơi nội dung được tạo lập tự động hoặc được người dùng không kỹ thuật thả vào thư mục chung.

Yêu cầu trước

  • Chìa khóa API Snapencode: Tạo một từ trang quản trị của bạn dưới Cài đặt > Chìa khóa API.
  • Node.js: Chúng ta sẽ sử dụng JavaScript và môi trường Node.js để chạy kịch bản này.
  • axioschokidar: Hai gói đơn giản cho việc thực hiện yêu cầu API và theo dõi tệp tin.
npm install axios chokidar form-data

Xây dựng Kịch bản Tự động hóa

Chúng ta sẽ tạo một kịch bản hoàn chỉnh trong một tệp tin duy nhất. Hãy đặt tên nó là upload-watcher.js.

Bước 1: Cấu hình Kịch bản

Đầu tiên, hãy cấu hình các biến và nhập thư viện cần thiết ở đầu tệp tin 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'); // --- Cấu hình --- 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'; // Lời khuyên tốt nhất: sử dụng biến môi trường const TARGET_FOLDER = 'root/automated-uploads'; // Đường dẫn tập hợp dữ liệu trong Snapencode const WATCH_DIRECTORY = './videos-to-upload'; // Một bộ để theo dõi các tệp tin đang được xử lý để tránh tải lên trùng lặp const processingFiles = new Set();

Sử dụng biến môi trường (process.env.Snapencode_API_KEY) cho chìa khóa API của bạn là rất an toàn hơn so với việc ghi trực tiếp vào kịch bản.

Bước 2: Tạo Các Hàm Cơ bản

Tiếp theo, thêm hai hàm chính: một cho xử lý tải tệp tin và một khác cho theo dõi trạng thái xử lý.

upload-watcher.js
// (Thêm mã này dưới phần cấu hình) async function uploadVideo(filePath) { console.log(`[UPLOADING] Bắt đầu tải lên cho: ${path.basename(filePath)}`); processingFiles.add(filePath); // Xác định tệp tin đang được xử lý 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] Tải lên được chấp nhận! ID Video: ${response.data.data.id}`); return response.data.data.id; } catch (error) { console.error(`[FAILURE] Tải lên thất bại cho ${path.basename(filePath)}:`, error.response?.data?.message || error.message); return null; } } async function monitorStatus(videoId, filePath) { if (!videoId) { processingFiles.delete(filePath); // Xóa khỏi bộ xử lý trên thất bại return; } console.log(`[MONITORING] Theo dõi trạng thái cho ID Video: ${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) { // Hoàn thành console.log(`✅ [COMPLETE] Xử lý hoàn thành cho ID Video: ${videoId}!`); clearInterval(interval); processingFiles.delete(filePath); // Xóa khỏi bộ xử lý trên thành công } else if (status === 7) { // Thất bại console.error(`❌ [FAILED] Xử lý thất bại cho ID Video: ${videoId}.`); clearInterval(interval); processingFiles.delete(filePath); } else { console.log(`[STATUS] ID Video ${videoId}: ${status_text} (${status})`); } } catch (error) { console.error(`[ERROR] Không thể lấy trạng thái cho ${videoId}:`, error.message); clearInterval(interval); processingFiles.delete(filePath); } }, 5000); // Kiểm tra mỗi 5 giây }

Kịch bản này minh họa một tương tác giữa máy chủ. Không bao giờ tiết lộ chìa khóa API của bạn trong mã client-side.

Bước 3: Khởi động Theo dõi Tệp Tin

Cuối cùng, thêm logic chokidar vào cuối kịch bản. Điều này sẽ theo dõi thư mục và kích hoạt các hàm của chúng ta khi có tệp tin mới được thêm.

upload-watcher.js
// (Thêm mã này đến cuối tệp tin) function initializeWatcher() { console.log(`--- Snapencode Watch Folder Được Khởi động ---`); console.log(`Theo dõi các tệp tin mới trong: ${path.resolve(WATCH_DIRECTORY)}`); if (!fs.existsSync(WATCH_DIRECTORY)) { console.log(`Tạo thư mục theo dõi...`); fs.mkdirSync(WATCH_DIRECTORY, { recursive: true }); } const watcher = chokidar.watch(WATCH_DIRECTORY, { ignored: /(^|[\/\\])\../, // bỏ qua tệp tin ẩn persistent: true, ignoreInitial: true, // Không tải lên các tệp tin đã có trên khởi động }); watcher.on('add', (filePath) => { if (processingFiles.has(filePath)) { return; // Bỏ qua nếu đang được xử lý } console.log(`[DETECTED] Tệp tin mới: ${path.basename(filePath)}`); // Chờ một chút để đảm bảo tệp tin đã được viết đầy đủ trước khi tải lên setTimeout(async () => { const videoId = await uploadVideo(filePath); await monitorStatus(videoId, filePath); }, 2000); }); } initializeWatcher();

Bước 4: Chạy Kịch bản Theo Dõi

Với tệp tin upload-watcher.js hoàn chỉnh, bạn có thể chạy nó từ terminal.

# Lời khuyên tốt nhất: đặt chìa khóa API như một biến môi trường export Snapencode_API_KEY="sk_your_api_key_here" # Chạy kịch bản node upload-watcher.js

Bây giờ, bất kỳ tệp tin video mới nào bạn thả vào thư mục ./videos-to-upload sẽ được tải lên và xử lý tự động!