mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-06 05:03:44 +08:00
feat: add SJTU教务处通知 (#2860)
This commit is contained in:
@@ -748,6 +748,16 @@ https://rsshub.app/**nuist**/`bulletin` 或 https://rsshub.app/**nuist**/`bullet
|
||||
|
||||
</Route>
|
||||
|
||||
### 教务处通知公告(全文输出)
|
||||
|
||||
<Route author="SeanChao" example="/sjtu/jwc/students" path="/universities/sjtu/jwc/:type?" :paramsDesc="['默认为 students ']">
|
||||
|
||||
| 面向学生的通知 | 新闻中心 | 通知通告 | 教学运行 | 注册学务 | 研究办 | 教改办 | 综合办 | 工会与支部 |
|
||||
| -------------- | -------- | -------- | --------- | -------- | ------ | ------ | ------ | ---------- |
|
||||
| students | news | notice | operation | affairs | yjb | jgb | zhb | party |
|
||||
|
||||
</Route>
|
||||
|
||||
## 上海科技大学
|
||||
|
||||
### 信息科技与技术学院活动
|
||||
|
||||
@@ -558,6 +558,7 @@ router.get('/sjtu/seiee/bjwb/:type', require('./routes/universities/sjtu/seiee/b
|
||||
router.get('/sjtu/seiee/xsb/:type?', require('./routes/universities/sjtu/seiee/xsb'));
|
||||
|
||||
router.get('/sjtu/gs/tzgg/:type?', require('./routes/universities/sjtu/gs/tzgg'));
|
||||
router.get('/sjtu/jwc/:type?', require('./routes/universities/sjtu/jwc'));
|
||||
|
||||
// 江南大学
|
||||
router.get('/ju/jwc/:type?', require('./routes/universities/ju/jwc'));
|
||||
|
||||
119
lib/routes/universities/sjtu/jwc.js
Normal file
119
lib/routes/universities/sjtu/jwc.js
Normal file
@@ -0,0 +1,119 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const url = require('url');
|
||||
const iconv = require('iconv-lite');
|
||||
|
||||
const urlRoot = 'http://www.jwc.sjtu.edu.cn/web/sjtu/';
|
||||
|
||||
const transcode = (buffer) => {
|
||||
const data = iconv.decode(buffer, 'gb2312');
|
||||
return cheerio.load(data);
|
||||
};
|
||||
|
||||
async function getFullArticle(link) {
|
||||
try {
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: link,
|
||||
responseType: 'buffer',
|
||||
});
|
||||
const fullArtData = transcode(response.data);
|
||||
const fullArt = fullArtData('.main_r_co_fo').html();
|
||||
return fullArt;
|
||||
} catch (error) {
|
||||
return '<h1> 这条消息被 -1s 了 </h1>';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const type = ctx.params.type || 'students';
|
||||
const config = {
|
||||
students: {
|
||||
link: '198076.htm',
|
||||
section: '面向学生的通知',
|
||||
},
|
||||
news: {
|
||||
link: '198005.htm',
|
||||
section: '新闻中心',
|
||||
},
|
||||
notice: {
|
||||
link: '198392.htm',
|
||||
section: '通知通告',
|
||||
},
|
||||
operation: {
|
||||
link: '198042.htm',
|
||||
section: '教学运行',
|
||||
},
|
||||
affairs: {
|
||||
link: '198043.htm',
|
||||
section: '注册学务',
|
||||
},
|
||||
yjb: {
|
||||
link: '198044.htm',
|
||||
section: '研究办',
|
||||
},
|
||||
jgb: {
|
||||
link: '198046.htm',
|
||||
section: '教改办',
|
||||
},
|
||||
zhb: {
|
||||
link: '198047.htm',
|
||||
section: '综合办',
|
||||
},
|
||||
party: {
|
||||
link: '198097.htm',
|
||||
section: '工会与支部',
|
||||
},
|
||||
};
|
||||
|
||||
const sectionLink = url.resolve(urlRoot, config[type].link);
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: sectionLink,
|
||||
responseType: 'buffer',
|
||||
});
|
||||
|
||||
const $ = transcode(response.data);
|
||||
|
||||
const out = await Promise.all(
|
||||
$('.main_r_xuxian')
|
||||
.find('tr')
|
||||
.slice(0, 10)
|
||||
.map(async (i, e) => {
|
||||
const title = $(e)
|
||||
.find('a')
|
||||
.text()
|
||||
.replace(/[\r\n]/g, ' ');
|
||||
const relativeLink = $(e)
|
||||
.find('a')
|
||||
.attr('href');
|
||||
const link = url.resolve(sectionLink, relativeLink);
|
||||
const date = new Date(
|
||||
$(e)
|
||||
.children('td')
|
||||
.eq(-1)
|
||||
.text()
|
||||
.match(/\d{4}-\d{2}-\d{2}/)[0]
|
||||
);
|
||||
const timeZone = 8;
|
||||
const serverOffset = date.getTimezoneOffset() / 60;
|
||||
const pubDate = new Date(date.getTime() - 60 * 60 * 1000 * (timeZone + serverOffset)).toUTCString();
|
||||
const description = await ctx.cache.tryGet(link, async () => await getFullArticle(link));
|
||||
const single = {
|
||||
title,
|
||||
link,
|
||||
pubDate,
|
||||
description,
|
||||
};
|
||||
return Promise.resolve(single);
|
||||
})
|
||||
.get()
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '上海交通大学教务处 ' + config[type].section,
|
||||
link: sectionLink,
|
||||
item: out,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user