feat: update sjtu/tongqu data source using API (#5121)

This commit is contained in:
Sean Chao
2020-07-07 17:19:31 +08:00
committed by GitHub
parent 5c3ff7bf63
commit 4b42f53ca5
3 changed files with 38 additions and 19 deletions

View File

@@ -1243,7 +1243,13 @@ type 列表:
### 同去网最新活动 ### 同去网最新活动
<Route author="SeanChao" example="/sjtu/tongqu" path="/sjtu/tongqu"/> <Route author="SeanChao" example="/sjtu/tongqu/lecture" path="/sjtu/tongqu/:type?" :paramsDesc="['类型,默认为全部']">
| 全部 | 最新 | 招新 | 讲座 | 户外 | 招聘 | 游学 | 比赛 | 公益 | 广告 | 其他 |
| ---- | ------ | ----------- | ------- | --------- | ---- | ---------- | ------------ | -------------- | ---- | ------ |
| all | newest | recruitment | lecture | outdoords | jobs | studyTours | competitions | publicWarefare | ads | others |
</Route>
### 研究生招生网招考信息 ### 研究生招生网招考信息

View File

@@ -599,7 +599,7 @@ router.get('/sjtu/seiee/xsb/:type?', require('./routes/universities/sjtu/seiee/x
router.get('/sjtu/gs/tzgg/:type?', require('./routes/universities/sjtu/gs/tzgg')); router.get('/sjtu/gs/tzgg/:type?', require('./routes/universities/sjtu/gs/tzgg'));
router.get('/sjtu/jwc/:type?', require('./routes/universities/sjtu/jwc')); router.get('/sjtu/jwc/:type?', require('./routes/universities/sjtu/jwc'));
router.get('/sjtu/tongqu', require('./routes/universities/sjtu/tongqu/activity')); router.get('/sjtu/tongqu/:type?', require('./routes/universities/sjtu/tongqu/activity'));
router.get('/sjtu/yzb/zkxx/:type', require('./routes/universities/sjtu/yzb/zkxx')); router.get('/sjtu/yzb/zkxx/:type', require('./routes/universities/sjtu/yzb/zkxx'));
// 江南大学 // 江南大学

View File

@@ -1,28 +1,41 @@
const got = require('@/utils/got'); const got = require('@/utils/got');
const cheerio = require('cheerio');
const url = require('url'); const url = require('url');
const urlRoot = 'https://tongqu.sjtu.edu.cn/'; const urlRoot = 'https://tongqu.sjtu.edu.cn';
module.exports = async (ctx) => { module.exports = async (ctx) => {
const sectionLink = url.resolve(urlRoot, 'act/type?type=-1&status=0&order=act.create_time'); const type = ctx.params.type || 'all';
const config = {
all: 0,
newest: -1,
recruitment: 9,
lecture: 2,
outdoors: 10,
jobs: 4,
studyTours: 5,
competitions: 7,
publicWarefare: 11,
ads: 12,
others: 8,
};
const response = await got(sectionLink); // requests API
const data = response.body; const link = `${urlRoot}/api/act/type?type=${config[type]}&status=0&offset=0&offset=0&number=10&order=act.create_time&desc=true`;
const $ = cheerio.load(data); const response = await got(link);
const data = response.data;
const activityInfo = $('body > script:nth-child(2)').html().match('var g_init_type_acts = (.*?);')[1]; // parses data
const activities = JSON.parse(activityInfo).acts; const activities = data.result.acts;
const out = activities.map((i) => { const feeds = activities.map((e) => ({
const title = '【' + i.typename + '】' + i.name; title: e.name,
const link = url.resolve(urlRoot, '/act/' + i.actid); link: url.resolve(urlRoot, '/act/' + e.actid),
const single = { title, link }; category: e.typename,
return single; description: `${e.name}\r\n` + `开始时间: ${e.sign_start_time}\r\n结束时间: ${e.sign_end_time}\r\n` + `地点: ${e.location}\r\n` + `报名人数: ${e.member_count}/${e.max_member}\r\n` + `来自${e.source}\r\n`,
}); }));
ctx.state.data = { ctx.state.data = {
title: '同去网最新活动', title: '同去网活动',
link: sectionLink, link: link,
item: out, item: feeds,
}; };
}; };