rsshub
Version:
Make RSS Great Again!
83 lines (81 loc) • 2.96 kB
JavaScript
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 };