UNPKG

rsshub

Version:
145 lines (141 loc) 5.45 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import path from "node:path"; //#region lib/routes/sctv/programme.ts init_esm_shims(); const route = { path: "/programme/:id?/:limit?/:isFull?", categories: ["traditional-media"], example: "/sctv/programme/1", parameters: { id: "节目 id,可在对应节目页中找到,默认为 `1`,即四川新闻联播", limit: "期数,默认为 15,即单次获取最新 15 期", isFull: "是否仅获取完整视频,填写 true/yes 表示是、false/no 表示否,默认是" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "电视回放", maintainers: ["nczitzk"], handler, description: `::: tip 参数 **是否仅获取完整视频** 设置为 \`true\` \`yes\` \`t\` \`y\` 等值后,路由仅返回当期节目的完整视频,而不会返回节目所提供的节选视频。 查看更多电视节目请前往 [电视回放](https://www.sctv.com/column/list) ::: | 节目 | id | | ---------------------- | ------- | | 四川新闻联播 | 1 | | 早安四川 | 2 | | 今日视点 | 3 | | 龙门阵摆四川 | 10523 | | 非常话题 | 1014756 | | 新闻现场 | 8385 | | 黄金三十分 | 8386 | | 全媒直播间 | 8434 | | 晚报十点半 | 8435 | | 现场快报 | 8436 | | 四川乡村新闻 | 3673 | | 四川文旅报道 | 8174 | | 乡村会客厅 | 3674 | | 金字招牌 | 3675 | | 问您所 “?” | 3677 | | 蜀你最能 | 3679 | | 美丽乡村印象 | 3678 | | 美丽乡村 | 3676 | | 乡村大篷车 | 3680 | | 华西论健 | 3681 | | 乡村聚乐部 | 3682 | | 医保近距离 | 6403 | | 音你而来 | 7263 | | 吃八方 | 7343 | | 世界那么大 | 7344 | | 风云川商 | 7345 | | 麻辣烫 | 7346 | | 财经快报 | 7473 | | 医生来了 | 7873 | | 安逸的旅途 | 8383 | | 运动 + | 8433 | | 好戏连台 | 9733 | | 防癌大讲堂 | 1018673 | | 消费新观察 | 1017153 | | 天天耍大牌 | 1014753 | | 廉洁四川 | 1014754 | | 看世界 | 1014755 | | 金熊猫说教育(资讯版) | 1014757 | | 她说 | 1014759 | | 嗨宝贝 | 1014762 | | 萌眼看世界 | 1014764 | | 乡村大讲堂 | 1014765 | | 四川党建 | 1014766 | | 健康四川 | 1014767 | | 技能四川 | 12023 |` }; async function handler(ctx) { const id = ctx.req.param("id") ?? "1"; const limit = ctx.req.param("limit") ? Number.parseInt(ctx.req.param("limit")) : 15; const isFull = /t|y/i.test(ctx.req.param("isFull") ?? "true"); const rootUrl = "https://www.sctv.com"; const apiRootUrl = "https://kscgc.sctv-tf.com"; const apiUrl = `${apiRootUrl}/sctv/lookback/${id}/date.json`; const listUrl = `${apiRootUrl}/sctv/lookback/index/lookbackList.json`; const currentUrl = `${rootUrl}/column/detail?programmeIndex=/sctv/lookback/${id}/index.json`; let response = await got_default({ method: "get", url: apiUrl }); let items = []; const array = response.data.data.programmeArray.slice(0, limit).map((list) => ({ guid: list.id, link: `${apiRootUrl}${list.programmeListUrl}` })); await Promise.all(array.map((list) => cache_default.tryGet(list.link, async () => { const currentItems = (await got_default({ method: "get", url: list.link })).data.data.programmeList.map((item) => ({ guid: item.id, title: item.programmeTitle, link: item.programmeUrl, pubDate: timezone(parseDate(item.pubTime), 8), description: art(path.join(__dirname, "templates/description-9a37f11c.art"), { cover: item.programmeImage, video: item.programmeUrl }) })); let currentFullItems = []; if (isFull) currentFullItems = currentItems.filter((item) => /(\d{4}(?:\.\d{2}){2})/.test(item.title)); items = [...items, ...currentFullItems.length === 0 ? currentItems : currentFullItems]; }))); response = await got_default({ method: "get", url: listUrl }); let name, cover; for (const p of response.data.data.programme_official) if (p.programmeId === id) { name = p.programmeName; cover = p.programmeCover; break; } return { title: `四川广播电视台 - ${name}`, link: currentUrl, item: items.slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 100), image: cover }; } //#endregion export { route };