UNPKG

rsshub

Version:
165 lines (163 loc) 4.74 kB
import "./dist-Bog6z_OM.mjs"; import "./config-MQ-7ebJ_.mjs"; import { t as ViewType } from "./types-gOySfSXJ.mjs"; import "./logger-C4avouvV.mjs"; import { t as ofetch_default } from "./ofetch-DKl_Ma9g.mjs"; import { n as parseRelativeDate } from "./parse-date-r5WDWHno.mjs"; import "./is-worker-DESPicPc.mjs"; import { t as cache_default } from "./cache-SV6W5EPy.mjs"; import { t as timezone } from "./timezone-CA9Huotp.mjs"; import { t as renderDescription } from "./description-CEa-amEm.mjs"; import { load } from "cheerio"; //#region lib/routes/dgtle/video.ts const handler = async (ctx) => { const limit = Number.parseInt(ctx.req.query("limit") ?? "18", 10); const baseUrl = "https://www.dgtle.com"; const targetUrl = new URL("video", baseUrl).href; const apiUrl = new URL("video/list/1", baseUrl).href; const $ = load(await ofetch_default(targetUrl)); const language = $("html").attr("lang") ?? "zh-CN"; const response = await ofetch_default(apiUrl); let items = []; items = response.data.list.slice(0, limit).map((item) => { const title = item.title; const image = item.cover?.split(/\?/)?.[0]; const description = renderDescription({ images: image ? [{ src: image, alt: title }] : void 0, intro: item.description }); const linkUrl = item.url; const authors = [{ name: item.author.username, url: void 0, avatar: item.author.avatar_path?.split(/\?/)?.[0] }]; const guid = `dgtle-${item.id}`; return { title, description, link: linkUrl, author: authors, guid, id: guid, content: { html: description, text: description }, image, banner: image, language, enclosure_length: item.duration }; }); items = await Promise.all(items.map((item) => { if (!item.link) return item; return cache_default.tryGet(item.link, async () => { const $$ = load(await ofetch_default(item.link)); const title = $$("h1.video-title").text(); const $$enclosureEl = $$("div.video-play video source").first(); const enclosureUrl = $$enclosureEl.attr("src"); const image = $$("div.video-play").attr("data-url"); const description = renderDescription({ videos: enclosureUrl ? [{ src: enclosureUrl, type: "video/mp4", poster: image }] : void 0, intro: $$("h3.video-summary").text() }); const pubDateStr = $$("p.video-time").text()?.split(/\s/)?.[0]; const linkUrl = $$(".title").attr("href"); const categoryEls = $$(".category").toArray(); const categories = [...new Set(categoryEls.map((el) => $$(el).text()).filter(Boolean))]; const authors = $$(".author").toArray().map((authorEl) => { const $$authorEl = $$(authorEl); return { name: $$authorEl.text(), url: $$authorEl.attr("href"), avatar: $$authorEl.find("img").attr("src") }; }); const guid = $$(".id").text(); const upDatedStr = pubDateStr; let processedItem = { title, description, pubDate: pubDateStr ? timezone(parseRelativeDate(pubDateStr), 8) : item.pubDate, link: linkUrl ? new URL(linkUrl, baseUrl).href : item.link, category: categories, author: authors, doi: $$("meta[name=\"citation_doi\"]").attr("content"), guid, id: guid, content: { html: description, text: description }, image, banner: image, updated: upDatedStr ? timezone(parseRelativeDate(upDatedStr), 8) : item.updated, language }; if (enclosureUrl) { const enclosureType = $$enclosureEl.attr("type") || "video/mp4"; processedItem = { ...processedItem, enclosure_url: enclosureUrl, enclosure_type: enclosureType, enclosure_title: title, enclosure_length: item.enclosure_length, itunes_duration: item.enclosure_length, itunes_item_image: image }; } return { ...item, ...processedItem }; }); })); const author = $("meta[name=\"keywords\"]").attr("content")?.split(/,/)[0] ?? void 0; return { title: $("title").text().trim().split(/\s/)[0], description: $("meta[name=\"description\"]").attr("content"), link: targetUrl, item: items, allowEmpty: true, author, language, itunes_author: author, itunes_category: "Technology", id: targetUrl }; }; const route = { path: "/video", name: "视频", url: "www.dgtle.com", maintainers: ["nczitzk"], handler, example: "/dgtle/video", parameters: void 0, description: void 0, categories: ["new-media"], features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportRadar: true, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["www.dgtle.com/video"], target: "/video" }], view: ViewType.Articles }; //#endregion export { handler, route };