Skip to content

Commit

Permalink
feat(route): 添加北师大-教育学部-培养动态 (DIYgod#18016)
Browse files Browse the repository at this point in the history
* feat(route): 添加北师大-教育学部-培养动态

* Update lib/routes/bnu/fe.ts

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* use a randomised UA of Chrome on macOS by default

---------
  • Loading branch information
etShaw-zh authored Jan 1, 2025
1 parent cd3da64 commit ba22b4e
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions lib/routes/bnu/fe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
import cache from '@/utils/cache';

export const route: Route = {
path: '/fe/:category',
categories: ['university'],
example: '/bnu/fe/18',
parameters: {},
radar: [
{
source: ['fe.bnu.edu.cn/pc/cms1info/list/1/:category'],
},
],
name: '教育学部-培养动态',
maintainers: ['etShaw-zh'],
handler,
description: `\`https://fe.bnu.edu.cn/pc/cms1info/list/1/18\` 则对应为 \`/bnu/fe/18`,
};

async function handler(ctx) {
const { category } = ctx.req.param();
const apiUrl = 'https://fe.bnu.edu.cn/pc/cmscommon/nlist';
let response;
try {
// 发送 POST 请求
response = await got.post(apiUrl, {
headers: {
Accept: 'application/json, text/javascript, */*; q=0.01',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
Origin: 'https://fe.bnu.edu.cn',
Referer: 'https://fe.bnu.edu.cn/pc/cms1info/list/1/18',
'X-Requested-With': 'XMLHttpRequest',
},
body: `columnid=${category}&page=1`, // POST 数据
});
} catch {
throw new Error('Failed to fetch data from API');
}
const jsonData = JSON.parse(response.body);
// 检查返回的 code
if (jsonData.code !== 0 || !jsonData.data) {
throw new Error('Invalid API response');
}

const list = jsonData.data.map((item) => ({
title: item.title,
link: `https://fe.bnu.edu.cn/html/1/news/${item.htmlpath}/n${item.newsid}.html`,
pubDate: parseDate(item.happendate, 'YYYY-MM-DD'),
}));

const out = await Promise.all(
list.map((item) =>
cache.tryGet(item.link, async () => {
const response = await got(item.link);
const $ = load(response.data);
item.author = '北京师范大学教育学部';
item.description = $('.news02_div').html() || '暂无详细内容';
return item;
})
)
);

return {
title: '北京师范大学教育学部-培养动态',
link: 'https://fe.bnu.edu.cn/pc/cms1info/list/1/18',
description: '北京师范大学教育学部-培养动态最新通知',
item: out,
};
}

0 comments on commit ba22b4e

Please sign in to comment.