UNPKG

rsshub

Version:
53 lines (52 loc) 2 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"; //#region lib/routes/xuetangx/course-info.ts const route = { path: "/course/:sign", categories: ["study"], example: "/xuetangx/course/THU08091000320", parameters: { sign: "课程 sign(如 `THU08091000320`),从课程页 URL 中可得到" }, radar: [{ source: ["www.xuetangx.com/course/:sign"] }], name: "课程信息", maintainers: ["sanmmm"], handler }; async function handler(ctx) { const { sign } = ctx.req.param(); const baseUrl = "https://www.xuetangx.com"; const headers = { xtbz: "xt" }; const [basicInfo, classroom] = await Promise.all([cache_default.tryGet(`xuetangx:course:info:${sign}`, () => rofetch(`${baseUrl}/api/v1/lms/product/get_product_basic_info/?sign=${sign}`, { headers })), rofetch(`${baseUrl}/api/v1/lms/product/classroom/`, { query: { sign }, headers })]); const link = `${baseUrl}/course/${sign}`; const courseTitle = basicInfo.data.course_name; const item = await Promise.all(classroom.data.current.map(async (c) => { const skuInfo = (await rofetch(`${baseUrl}/api/v1/lms/product/sku_pay_detail/`, { query: { cid: c.classroom_id, sign }, headers })).data.sku_info.map((sku) => `${sku.name}: ¥${sku.current_price}${sku.leaf_count} 课时)`).join("<br>"); const info = `班次: ${c.classroom_name}<br>开课时间: ${parseDate(c.class_start).toUTCString()}<br>结课时间: ${parseDate(c.class_end).toUTCString()}<br>${skuInfo}`; return { title: `${courseTitle} - ${c.classroom_name}`, description: `${info}<br>报名人数: ${c.count}`, link: `${link}/${c.classroom_id}`, guid: info, pubDate: parseDate(c.class_start) }; })); return { title: `${courseTitle} - 课程信息`, description: basicInfo.data.short_intro, link, image: basicInfo.data.cover, item, allowEmpty: true }; } //#endregion export { route };