rsshub
Version:
Make RSS Great Again!
59 lines (58 loc) • 2.11 kB
JavaScript
import { t as rofetch } from "./ofetch-W1aeTHCo.mjs";
import { t as parseDate } from "./parse-date-CjhZE69i.mjs";
import { t as cache_default } from "./cache-CiDoUSLo.mjs";
import { t as timezone } from "./timezone-DE--ze1V.mjs";
import { load } from "cheerio";
//#region lib/routes/asahi/utils.ts
const rootUrl = "https://www.asahi.com";
const buildFeed = async (ctx, currentUrl) => {
const limit = Number(ctx.req.query("limit")) || 6;
const response = await rofetch(currentUrl);
const $ = load(response);
$(".Time").remove();
const slistVars = /slist_vars = (\{[^}]*\})/.exec(response)?.[1];
let list;
if (slistVars) {
const { theme, feature = "", pageper = "80" } = JSON.parse(slistVars.replaceAll(/([{,])\s*(\w+):/g, "$1\"$2\":"));
const { docs } = await rofetch(`${rootUrl}/fusionlink/slist/`, {
query: {
theme,
feature,
pageper,
page: 1
},
headers: {
referer: currentUrl,
"x-requested-with": "XMLHttpRequest"
}
});
list = docs.slice(0, limit).map((doc) => ({
link: doc.url,
title: doc.title,
pubDate: timezone(parseDate(doc.date, "YYYYMMDDHHmmss"), 9)
}));
} else list = [...new Set($("#MainInner .Section .List li a[href*=\"/articles/\"]").toArray().map((item) => {
const url = new URL($(item).attr("href"), currentUrl);
url.search = "";
return url.href;
}))].slice(0, limit).map((link) => ({ link }));
const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => {
const content = load(await rofetch(item.link));
content(".notPrint, svg").remove();
const pubDate = content("meta[name=\"pubdate\"]").attr("content");
return {
...item,
description: content(".nfyQp").html(),
title: content("meta[name=\"TITLE\"]").attr("content") ?? item.title,
pubDate: pubDate ? parseDate(pubDate) : item.pubDate
};
})));
return {
title: $("title").text(),
link: currentUrl,
item: items,
description: "朝日新聞社のニュースサイト、朝日新聞デジタルの社会ニュースについてのページです"
};
};
//#endregion
export { rootUrl as n, buildFeed as t };