UNPKG

rsshub

Version:
83 lines (81 loc) 2.96 kB
import "./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 got_default } from "./got-KxxWdaxq.mjs"; import { load } from "cheerio"; //#region lib/routes/ebc/realtime.ts const route = { path: "/realtime/:category?", categories: ["traditional-media"], example: "/ebc/realtime/politics", parameters: { category: "Category from the last segment of the URL of the corresponding site" }, features: { requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, requireConfig: false }, name: "即時新聞", maintainers: ["quiniapiezoelectricity"], handler, description: "", radar: [{ source: ["news.ebc.net.tw/realtime/:category"], target: "/:category" }] }; async function handler(ctx) { const category = ctx.req.param("category") ?? ""; const $ = load((await got_default("https://news.ebc.net.tw/list/load", { method: "POST", headers: { Accept: "*/*", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest" }, body: new URLSearchParams({ list_type: "realtime", cate_code: category, page: "1" }).toString() })).data); const feed = $("div.list > a").toArray().map((item) => new URL($(item).attr("href") ?? "", "https://news.ebc.net.tw").href); const items = await Promise.all(feed.map((url) => cache_default.tryGet(url, async () => { const $$1 = load((await got_default(url)).data); const metadata = $$1("[type=\"application/ld+json\"]").toArray().flatMap((item) => JSON.parse($$1(item).text())).find((item) => item["@type"] === "NewsArticle"); $$1(".img_box").each((_, elem) => { $$1(elem).children("div.img_caption").replaceWith($$1(`<figcaption>${$$1(elem).children("div.img_caption").text()}</figcaption>`)); $$1(elem).children("div.img").children().unwrap(); $$1(elem).wrapInner($$1("<figure></figure>")); }); $$1("[style=\"font-size:16px;\"]").each((_, elem) => { $$1(elem).replaceWith(`<small>${$$1(elem).text()}</small>`); }); const cover = $$1("div.article_cover"); const content = $$1("div.article_content"); content.find(".inline_text, .inline_box, .rss_box").remove(); return { title: metadata.headline, link: url, pubDate: parseDate(metadata.datePublished), author: metadata.author.name, description: cover.html() + content.html(), category: metadata.keywords ? [metadata.articleSection, ...metadata.keywords.split(",")] : [metadata.articleSection] }; }))); return { title: "東森新聞|即時", link: category ? `https://news.ebc.net.tw/realtime/${category}` : "https://news.ebc.net.tw/realtime", language: "zh-TW", item: items }; } //#endregion export { route };