rsshub
Version:
Make RSS Great Again!
53 lines (52 loc) • 2 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";
//#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 };