UNPKG

rsshub

Version:
101 lines (97 loc) 3.56 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 { t as timezone } from "./timezone-D8cuwzTY.mjs"; import { load } from "cheerio"; //#region lib/routes/buaa/jiaowu.ts const BASE_URL = "https://jiaowu.buaa.edu.cn/bhjwc2.0/index/newsList.do"; const route = { path: "/jiaowu/:cddm?", name: "教务部", url: "jiaowu.buaa.edu.cn", maintainers: ["OverflowCat"], handler, example: "/buaa/jiaowu/02", parameters: { cddm: "菜单代码,可以是 2 位或者 4 位,默认为 `02`(通知公告)" }, description: `::: tip 菜单代码(\`cddm\`)应填写链接中调用的 newsList 接口的参数,可以是 2 位或者 4 位数字。若为 2 位,则为 \`fcd\`(父菜单);若为 4 位,则为 \`cddm\`(菜单代码),其中前 2 位为 \`fcd\`。 示例: 1. 新闻快讯页面的链接中 \`onclick="javascript:onNewsList('03');return false;"\`,对应的路径参数为 \`03\`,完整路由为 \`/buaa/jiaowu/03\`; 2. 通知公告 > 公示专区页面的链接中 \`onclick="javascript:onNewsList2('0203','2');return false;"\`,对应的路径参数为 \`0203\`,完整路由为 \`/buaa/jiaowu/0203\`。 :::`, categories: ["university"], features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportRadar: false, supportBT: false, supportPodcast: false, supportScihub: false } }; async function handler(ctx) { let cddm = ctx.req.param("cddm"); if (!cddm) cddm = "02"; if (cddm.length !== 2 && cddm.length !== 4) throw new Error("cddm should be 2 or 4 digits"); const { title, list } = await getList(BASE_URL, { id: "", fcdTab: cddm.slice(0, 2), cddmTab: cddm, xsfsTab: "2", tplbid: "", xwid: "", zydm: "", zymc: "", yxdm: "", pyzy: "", szzqdm: "" }); return { title, item: await getItems(list), link: BASE_URL, author: "北航教务部", language: "zh-CN" }; } function getArticleUrl(onclick) { if (!onclick) return null; const xwid = onclick.match(/'(\d+)'/)?.at(1); if (!xwid) return null; return `http://jiaowu.buaa.edu.cn/bhjwc2.0/index/newsView.do?xwid=${xwid}`; } async function getList(url, form = {}) { const { body } = await got_default.post(url, { form }); const $ = load(body); return { title: $("#main > div.dqwz > a").last().text() || "北京航空航天大学教务部", list: $("#main div.news_list > ul > li").toArray().map((item) => { const $$1 = load(item); const link = getArticleUrl($$1("a").attr("onclick")); if (link === null) return null; return { title: $$1("a").text(), link, pubDate: timezone(parseDate($$1("span.Floatright").text()), 8) }; }).filter((item) => item !== null) }; } function getItems(list) { return Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const { data: descrptionResponse } = await got_default(item.link); const $descrption = load(descrptionResponse); item.description = $descrption("#main > div.content > div.search_height > div.search_con:has(p)").html()?.replaceAll(/(\r|\n)+/g, "<br />"); item.author = $descrption("#main > div.content > div.search_height > span.search_con").text().split("发布者:").at(-1) || "教务部"; return item; }))); } //#endregion export { route };