RSSHub/lib/routes/neea/index.ts

148 lines
4.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Route } from '@/types';
import cache from '@/utils/cache';
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
import timezone from '@/utils/timezone';
function loadContent(link) {
return cache.tryGet(link, async () => {
// 开始加载页面
const response = await got.get(link);
const $ = load(response.data);
// 获取标题
const title = $('#Content1 > div > ul > li > h1').text();
// 获取正文内容
const introduce = $('#ReportIDtext').html();
return {
title,
description: introduce,
link,
};
});
}
async function handler(ctx) {
const type = ctx.req.param('type');
const host = `https://${type}.neea.edu.cn${typeDic[type].url}`;
const response = await got({
method: 'get',
url: host,
});
const data = response.data;
const $ = load(data);
const list = $(`#ReportIDname > a`).parent().parent().toArray();
const process = await Promise.all(
list.map(async (item) => {
const ReportIDname = $(item).find('#ReportIDname > a');
const ReportIDIssueTime = $(item).find('#ReportIDIssueTime');
const itemUrl = `https://${type}.neea.edu.cn` + $(ReportIDname).attr('href');
const time = ReportIDIssueTime.text();
const single = {
title: $(ReportIDname).text(),
link: itemUrl,
guid: itemUrl,
pubDate: timezone(parseDate(time), +8),
};
const other = await loadContent(String(itemUrl));
return Object.assign({}, single, other);
})
);
return {
title: `${typeDic[String(type)].title}动态`,
link: host,
description: `${typeDic[String(type)].title}动态 `,
item: process,
};
}
const typeDic = {
// 国家教育考试
gaokao: {
url: '/html1/category/1507/1945-1.htm',
title: '普通高考',
},
chengkao: {
url: '/html1/category/1507/1960-1.htm',
title: '成人高考',
},
yankao: {
url: '/html1/category/1507/2005-1.htm',
title: '研究生考试',
},
zikao: {
url: '/html1/category/1508/1403-1.htm',
title: '自学考试',
},
ntce: {
url: '/html1/category/1507/1148-1.htm',
title: '中小学教师资格考试',
},
tdxl: {
url: '/html1/category/2210/313-1.htm',
title: '同等学力申请硕士学位考试',
},
// 社会证书考试
cet: {
url: '/html1/category/16093/1124-1.htm',
title: '全国四六级考试CET',
},
ncre: {
url: '/html1/category/1507/872-1.htm',
title: '全国计算机等级考试NCRE',
},
nit: {
url: '/html1/category/1507/1630-1.htm',
title: '全国计算机应用水平考试NIT',
},
pets: {
url: '/html1/category/1507/1570-1.htm',
title: '全国英语等级考试PETS',
},
wsk: {
url: '/html1/category/1507/1646-1.htm',
title: '全国外语水平考试WSK',
},
ccpt: {
url: '/html1/category/1507/2035-1.htm',
title: '书画等级考试CCPT',
},
};
export const route: Route = {
path: '/local/:type',
name: '国内考试动态',
url: 'www.neea.edu.cn',
maintainers: ['SunShinenny'],
example: '/neea/local/cet',
parameters: { type: '考试项目,见下表' },
categories: ['study'],
features: {
supportRadar: true,
},
radar: Object.entries(typeDic).map(([type, value]) => ({
title: `${value.title}动态`,
source: [`${type}.neea.edu.cn`, `${type}.neea.cn`],
target: `/local/${type}`,
})),
handler,
description: `| | 考试项目 | type |
| ------------ | ----------------------------- | -------- |
| 国家教育考试 | 普通高考 | gaokao |
| | 成人高考 | chengkao |
| | 研究生考试 | yankao |
| | 自学考试 | zikao |
| | 中小学教师资格考试 | ntce |
| | 同等学力申请硕士学位考试 | tdxl |
| 社会证书考试 | 全国四六级考试CET | cet |
| | 全国计算机等级考试NCRE | ncre |
| | 全国计算机应用水平考试NIT | nit |
| | 全国英语等级考试PETS | pets |
| | 全国外语水平考试WSK | wsk |
| | 书画等级考试CCPT | ccpt |`,
};