UNPKG

rsshub

Version:
87 lines (82 loc) 2.78 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./timezone-D8cuwzTY.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { a as parseItem, i as parseEventDetail, n as baseUrl, r as getTagsData, t as apiHost } from "./utils-BSNYjtCS.mjs"; import { load } from "cheerio"; //#region lib/routes/baai/hub.ts const route = { path: ["/hub/:tagId?/:sort?/:range?"], categories: ["programming"], example: "/baai/hub", parameters: { tagId: "社群 ID,可在 [社群页](https://hub.baai.ac.cn/taglist) 或 URL 中找到", sort: "排序,见下表,默认为 `new`", range: "时间跨度,仅在排序 `readCnt` 时有效" }, description: `排序 | 最新 | 最热 | | ---- | ------- | | new | readCnt | 时间跨度 | 3 天 | 本周 | 本月 | | ---- | ---- | ---- | | 3 | 7 | 30 |`, radar: [{ source: ["baai.ac.cn/"], target: (_params, url) => { const searchParams = new URL(url).searchParams; const tagId = searchParams.get("tag_id"); const sort = searchParams.get("sort"); const range = searchParams.get("time_range"); return `/baai/hub${tagId ? `/${tagId}` : ""}${sort ? `/${sort}` : ""}${range ? `/${range}` : ""}`; } }], name: "智源社区", maintainers: ["TonyRL"], handler }; async function handler(ctx) { const { tagId = "", sort = "new", range } = ctx.req.param(); let title, description, brief, iconUrl; if (tagId) { const tag = (await getTagsData()).find((tag$1) => tag$1.id === tagId); if (tag) { title = tag.title; description = tag.description; brief = tag.brief; iconUrl = tag.iconUrl; } else throw new invalid_parameter_default("Tag not found"); } const list = (await ofetch_default(`${apiHost}/api/v1/story/list`, { method: "POST", query: { page: 1, sort, tag_id: tagId, time_range: range } })).data.map((item) => parseItem(item)); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { if (item.eventId) item.description = await parseEventDetail(item); else { const $ = load(await ofetch_default(item.link)); item.description = item.is_event ? $("div.box2").html() : $(".post-content").html(); } return item; }))); return { title: `${title ? `${title} - ` : ""}${description ? `${description} - ` : ""}智源社区`, description: brief, link: `${baseUrl}/?${tagId ? `tag_id=${tagId}&` : ""}sort=${sort}${range ? `&time_range=${range}` : ""}`, image: iconUrl, item: items }; } //#endregion export { route };