diff --git a/README.md b/README.md index 3f27800bf6..5ecdd95186 100644 --- a/README.md +++ b/README.md @@ -283,6 +283,8 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇 - AppSolution - 果壳网 - 科学人 +- 南京邮电大学 + - 教务处通知与新闻 diff --git a/docs/README.md b/docs/README.md index 9c7dc5283d..0972a2b80e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -384,6 +384,24 @@ RSSHub 同时支持 RSS 2.0、Atom 和 [JSON Feed](https://jsonfeed.org/) 输出 参数: 无 +### 南京邮电大学 + +#### 教务处通知与新闻 + +举例: [https://rsshub.app/njupt/jwc/notice](https://rsshub.app/njupt/jwc/notice) + +路由: `/njupt/jwc/:type?` + +参数: + +- type, 可选, 默认为 `notice` + +| 通知公告 | 教务快讯 | +| -------- | -------- | +| notice | news | + +======= + ## 传统媒体类 ### 央视新闻 diff --git a/router.js b/router.js index 0a43b49bdf..d041f8e6ec 100755 --- a/router.js +++ b/router.js @@ -487,6 +487,9 @@ router.get('/scnu/cs/match', require('./routes/universities/scnu/cs/match')); // 中国科学院 router.get('/cas/sim/academic', require('./routes/universities/cas/sim/academic')); +// 南京邮电大学 +router.get('/njupt/jwc/:type?', require('./routes/universities/njupt/jwc')); + // ifanr router.get('/ifanr/appso', require('./routes/ifanr/appso')); diff --git a/routes/universities/njupt/jwc.js b/routes/universities/njupt/jwc.js new file mode 100644 index 0000000000..3da898a4bc --- /dev/null +++ b/routes/universities/njupt/jwc.js @@ -0,0 +1,68 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); +const url = require('url'); + +const host = 'http://jwc.njupt.edu.cn'; + +const map = { + notice: '/1594', + news: '/1596', +}; + +module.exports = async (ctx) => { + const type = ctx.params.type || 'notice'; + const link = host + map[type] + '/list.htm'; + const response = await axios({ + method: 'get', + url: link, + headers: { + Referer: host, + }, + }); + const $ = cheerio.load(response.data); + + const list = $('.content') + .find('a') + .slice(0, 10) + .map((i, e) => $(e).attr('href')) + .get(); + + const out = await Promise.all( + list.map(async (itemUrl) => { + itemUrl = url.resolve(host, itemUrl); + const cache = await ctx.cache.get(itemUrl); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const response = await axios.get(itemUrl); + const $ = cheerio.load(response.data); + + const single = { + title: $('.Article_Title').text(), + link: itemUrl, + description: $('.wp_articlecontent') + .html() + .replace(/src="\//g, `src="${url.resolve(host, '.')}`) + .replace(/href="\//g, `href="${url.resolve(host, '.')}`) + .trim(), + pubDate: new Date( + $('.Article_PublishDate') + .text() + .replace('发布时间:', '') + ), + }; + ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60); + return Promise.resolve(single); + }) + ); + let info = '通知公告'; + if (type === 'news') { + info = '教务快讯'; + } + ctx.state.data = { + title: '南京邮电大学 -- ' + info, + link, + item: out, + }; +};