پلیر امن XAPlayer با Node.js و Express
گرفتن توکن پخش روی سرور Node.js با fetch و نمایش پلیر امن XAPlayer در صفحهی درس اپلیکیشن Express.
همهی راهنماها
شروع
شروع سریع: اولین دورهی قفلشده در ۱۰ دقیقهامنیت ویدیو: رمزگذاری، واترمارک و آنچه هیچ پلیری نمیتواندنصب روی سایت شما
قرار دادن پلیر امن در وردپرسفروش دورهی ویدیویی با ووکامرس و پلیر امنپلیر امن XAPlayer در مودلپلیر امن XAPlayer در لاراولپلیر امن XAPlayer با Node.js و Expressپلیر امن XAPlayer در Next.jsپلیر امن XAPlayer با پایتون: جنگو و فلسکسایت HTML، سایتساز یا بدون سروربرای فروشندهها
بارگذاری ویدیو و قفلگذاری خودکارصدور لایسنس، محدودیت دستگاه و صدور گروهیجلوگیری از دانلود ویدیو با IDM: راهنمای کامل برای مدرسهاقفلگذاری ویدیو در وردپرس و ووکامرسبرای دانشجوها
راهنمای دانشجو: تماشای دوره با کد لایسنسپلتفرمها: اندروید، آیفون، ویندوز، مک و لینوکستماشای دوره در اندرویدتماشای دوره در آیفون و آیپدتماشای دوره در ویندوز، مک و لینوکسبرای برنامهنویسها
مرجع API: قرار دادن پلیر امن در هر سایتیک تابع کوچک مینویسید که برای کاربر واردشده توکن پخش میگیرد، و یک مسیر Express که پلیر را نمایش میدهد. Node.js نسخهی ۱۸ به بالا fetch را خودش دارد و بستهی اضافه لازم نیست.
پیش از شروع#
- در پنل XAPlayer به «تنظیمات» بروید و در بخش «کلید API» یک کلید بسازید. کلید فقط یک بار نمایش داده میشود؛ همان لحظه کپیاش کنید.
- در «سایتهای مجاز برای نمایش پلیر» نشانی کامل سایتتان را اضافه کنید، مثلاً https://academy.example.com. اگر سایت با www هم باز میشود، آن را هم اضافه کنید.
- شناسهی دوره را بردارید: در «تنظیمات»، بخش «راهنمای نمایش پلیر در سایت شما» دوره را انتخاب کنید تا شناسهاش در نمونهکد نوشته شود. همان بخش آخر نشانی صفحهی دوره در پنل هم هست.
# .env (or your host's environment settings)
XAPLAYER_API_KEY=xap_sk_...
تابع گرفتن توکن#
// xaplayer.js (Node 18 or later: fetch is built in)
const XAPLAYER = 'https://xaplayer.ir/api/v1';
export async function playerUrl({ courseId, videoId, user }) {
const res = await fetch(`${XAPLAYER}/embed-tokens`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.XAPLAYER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
...(videoId ? { videoId } : { courseId }),
viewer: { id: String(user.id), name: user.name },
}),
});
if (!res.ok) throw new Error(`XAPlayer ${res.status}: ${await res.text()}`);
const { url } = await res.json();
return url;
}
مسیر صفحهی درس#
// server.js
import express from 'express';
import { playerUrl } from './xaplayer.js';
const app = express();
// requireLogin and userBoughtCourse are your own: your sign-in and your orders.
app.get('/courses/:courseId/watch', requireLogin, async (req, res, next) => {
try {
if (!(await userBoughtCourse(req.user, req.params.courseId))) return res.sendStatus(403);
const url = await playerUrl({ courseId: req.params.courseId, user: req.user });
res.render('watch', { url }); // or any template engine you use
} catch (err) {
next(err);
}
});
اگر کار نکرد#
| نشانه | علت و راهحل |
|---|---|
| جای پلیر خالی است یا مرورگر میگوید «اجازهی اتصال ندارد» | نشانی سایت در «سایتهای مجاز» نیست یا با www/بدون www فرق دارد. نشانی دقیق صفحه را اضافه کنید. |
| خطای ۴۰۱ (unauthorized) | کلید API اشتباه است یا کلید تازهای ساختهاید و کلید قبلی از کار افتاده. کلید را دوباره کپی کنید. |
| خطای ۴۰۴ (not_found) | شناسهی دوره یا ویدیو اشتباه است یا متعلق به حساب دیگری است. |
| خطای ۴۰۰ (bad_request) | بدنهی درخواست ناقص است: دقیقاً یکی از courseId یا videoId را بفرستید و viewer.id را خالی نگذارید. |
| پلیر بعد از چند ساعت «زمان صفحه تمام شده» میگوید | توکن منقضی شده. هر بار که صفحه باز میشود توکن تازه بگیرید و نشانی پلیر را کش نکنید. |
XAPlayer را ۱۴ روز رایگان، با ۱۰ لایسنس هدیه امتحان کنید.
دورهی خود را رایگان امتحان کنید