UNPKG

rsshub

Version:
81 lines (79 loc) 3.05 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import { t as logger_default } from "./logger-Czu8UMNd.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./proxy-Db7uGcYb.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { n as puppeteer_default } from "./puppeteer-DGmvuGvT.mjs"; import { t as getOriginAvatar } from "./utils-CQKS3rFA.mjs"; //#region lib/routes/douyin/live.ts const route = { path: "/live/:rid", categories: ["live"], example: "/douyin/live/685317364746", parameters: { rid: "直播间 id, 可在主播直播间页 URL 中找到" }, features: { requireConfig: false, requirePuppeteer: true, antiCrawler: true, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["live.douyin.com/:rid"] }], name: "直播间开播", maintainers: ["TonyRL"], handler }; async function handler(ctx) { const rid = ctx.req.param("rid"); if (Number.isNaN(rid)) throw new invalid_parameter_default("Invalid room ID. Room ID should be a number."); const pageUrl = `https://live.douyin.com/${rid}`; const renderData = await cache_default.tryGet(`douyin:live:${rid}`, async () => { let roomInfo$1; const browser = await puppeteer_default(); const page = await browser.newPage(); await page.setRequestInterception(true); page.on("request", (request) => { request.resourceType() === "document" || request.resourceType() === "stylesheet" || request.resourceType() === "script" || request.resourceType() === "xhr" ? request.continue() : request.abort(); }); page.on("response", async (response) => { if (response.request().url().includes("/webcast/room/web/enter")) roomInfo$1 = await response.json(); }); logger_default.http(`Requesting ${pageUrl}`); await page.goto(pageUrl, { waitUntil: "networkidle2" }); await browser.close(); return roomInfo$1; }, config.cache.routeExpire, false); if (renderData.status_code !== 0) throw new Error(`Status code ${renderData.status_code}`); const roomInfo = renderData.data.data[0]; const roomOwner = renderData.data.user; const nickname = roomOwner.nickname; const userAvatar = roomOwner.avatar_thumb.url_list[0]; const items = []; if (roomInfo.id_str) { if (roomInfo.status === 2) items.push({ title: `开播:${roomInfo.title}`, description: `<img src="${roomInfo.cover.url_list[0]}">`, link: pageUrl, author: nickname, guid: roomInfo.id_str }); else if (roomInfo.status === 4) items.push({ title: `当前直播已结束,期待下一场:${roomInfo.title}`, link: `https://www.douyin.com/user/${roomOwner.sec_uid}`, author: nickname, guid: roomInfo.id_str }); } return { title: `${nickname}的抖音直播间 - 抖音直播`, description: `欢迎来到${nickname}的抖音直播间,${nickname}与大家一起记录美好生活 - 抖音直播`, image: getOriginAvatar(userAvatar), link: pageUrl, item: items, allowEmpty: true }; } //#endregion export { route };