rsshub
Version:
Make RSS Great Again!
109 lines (99 loc) • 3.04 kB
text/typescript
import { Route } from '@/types';
import cache from '@/utils/cache';
import got from '@/utils/got';
import { load } from 'cheerio';
import * as url from 'node:url';
const baseUrl = 'http://www.wsyu.edu.cn';
const typeMap = {
xxyw: {
name: '学校要闻',
url: '/info/iList.jsp?cat_id=10307',
},
zhxw: {
name: '综合新闻',
url: '/info/iList.jsp?cat_id=10119',
},
mtjj: {
name: '媒体聚焦',
url: '/info/iList.jsp?cat_id=10120',
},
};
export const route: Route = {
path: '/news/:type?',
categories: ['university'],
example: '/wsyu/news/xxyw',
parameters: { type: '分类,默认为 `xxyw`' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: '新闻中心',
maintainers: ['Derekmini'],
handler,
description: `| 学校要闻 | 综合新闻 | 媒体聚焦 |
| -------- | -------- | -------- |
| xxyw | zhxw | mtjj |`,
};
async function handler(ctx) {
const type = ctx.req.param('type') || 'xxyw';
const link = baseUrl + typeMap[type].url;
const response = await got({
method: 'get',
url: link,
headers: {
Referer: baseUrl,
},
});
const $ = load(response.data);
const urlList = $('.mainContent li')
.slice(0, 10)
.toArray()
.map((e) => $('a', e).attr('href'));
const titleList = $('.mainContent li')
.slice(0, 10)
.toArray()
.map((e) => $('a', e).text());
const dateList = $('.mainContent li')
.slice(0, 10)
.toArray()
.map((e) => $('span', e).text());
const out = await Promise.all(
urlList.map(async (itemUrl, index) => {
itemUrl = url.resolve(baseUrl, itemUrl);
if (itemUrl.includes('.htm')) {
const cacheIn = await cache.get(itemUrl);
if (cacheIn) {
return JSON.parse(cacheIn);
}
const response = await got.get(itemUrl);
const $ = load(response.data);
$('.content .photos').remove();
const single = {
title: titleList[index],
link: itemUrl,
description: $('.content').html(),
pubDate: dateList[index],
};
cache.set(itemUrl, JSON.stringify(single));
return single;
} else {
const single = {
title: titleList[index],
link: itemUrl,
description: '此链接为文件,请点击下载',
pubDate: dateList[index],
};
return single;
}
})
);
return {
title: '武昌首义学院-' + typeMap[type].name,
link,
item: out,
};
}