UNPKG

rsshub

Version:
91 lines (90 loc) 2.82 kB
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"; const route = { path: "/news/:category?", categories: ["study"], example: "/shanbay/news", parameters: { category: { description: "分类 id", options: Object.entries({ aaaaa: "全部", aphen: "时文", brfpia: "生活", qvyrg: "商业", exicx: "科技", phena: "科普", iycfg: "趣闻", ytmwg: "成长", kdpkg: "科学", zisju: "心理", hooui: "经济", ucbyq: "美文", bvfjmu: "自然", wnzun: "人文" }).map(([value, label]) => ({ value, label })), default: "aaaaa" } }, radar: [{ source: ["web.shanbay.com/reading/web-news"], target: "/news" }], name: "今日短文", maintainers: ["qiwihui"], handler, url: "web.shanbay.com/reading/web-news" }; async function handler(ctx) { const { category = "aaaaa" } = ctx.req.param(); const apiUrl = "https://apiv3.shanbay.com"; const baseUrl = "https://web.shanbay.com/reading/web-news"; const headers = { Origin: "https://web.shanbay.com", Referer: "https://web.shanbay.com/" }; const categoryMap = await cache_default.tryGet("shanbay:news:categories", async () => { const { objects } = await rofetch(`${apiUrl}/news/categories`); return Object.fromEntries(objects.map((item) => [item.id, item.name])); }); const response = await rofetch(`${apiUrl}/news/retrieve/articles`, { headers, query: { sbay_level_id: "aaaaa", category_id: category, page: 1, ipp: ctx.req.query("limit") ? Number(ctx.req.query("limit")) : 15 } }); const items = await Promise.all(response.objects.map((article) => cache_default.tryGet(`${baseUrl}/articles/${article.id}`, async () => { const $ = load((await rofetch(`${apiUrl}/news/articles/${article.id}`)).content, { xmlMode: true }); const description = $("para").toArray().map((para) => { const $para = $(para); const img = $para.find("img url").text(); return img ? `<img src="${img.split("?", 1)[0]}" alt="${$para.find("img desc").text()}" />` : `<p>${$para.find("sent").toArray().map((sent) => $(sent).text()).join(" ")}</p>`; }).join(""); return { title: `${article.title_en} | ${article.title_cn}`, description, link: `${baseUrl}/articles/${article.id}`, pubDate: timezone(parseDate(article.published_at), 8), category: [ article.category.name, article.exam_level.name, article.sbay_level.name ], author: `${article.source.name_en} (${article.source.name_cn})` }; }))); return { title: `扇贝阅读 - ${categoryMap[category] ?? "全部"}`, link: baseUrl, item: items }; } //#endregion export { route };