From 4b42f53ca5b83d73a50af6377f12cfed5ff3711d Mon Sep 17 00:00:00 2001 From: Sean Chao Date: Tue, 7 Jul 2020 17:19:31 +0800 Subject: [PATCH] feat: update sjtu/tongqu data source using API (#5121) --- docs/university.md | 8 +++- lib/router.js | 2 +- .../universities/sjtu/tongqu/activity.js | 47 ++++++++++++------- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/docs/university.md b/docs/university.md index e22e7df2cf..8c240409fe 100644 --- a/docs/university.md +++ b/docs/university.md @@ -1243,7 +1243,13 @@ type 列表: ### 同去网最新活动 - + + +| 全部 | 最新 | 招新 | 讲座 | 户外 | 招聘 | 游学 | 比赛 | 公益 | 广告 | 其他 | +| ---- | ------ | ----------- | ------- | --------- | ---- | ---------- | ------------ | -------------- | ---- | ------ | +| all | newest | recruitment | lecture | outdoords | jobs | studyTours | competitions | publicWarefare | ads | others | + + ### 研究生招生网招考信息 diff --git a/lib/router.js b/lib/router.js index d74aa19173..7e3240ebe0 100644 --- a/lib/router.js +++ b/lib/router.js @@ -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/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')); // 江南大学 diff --git a/lib/routes/universities/sjtu/tongqu/activity.js b/lib/routes/universities/sjtu/tongqu/activity.js index c640d4839d..71d8778aa9 100644 --- a/lib/routes/universities/sjtu/tongqu/activity.js +++ b/lib/routes/universities/sjtu/tongqu/activity.js @@ -1,28 +1,41 @@ const got = require('@/utils/got'); -const cheerio = require('cheerio'); const url = require('url'); -const urlRoot = 'https://tongqu.sjtu.edu.cn/'; +const urlRoot = 'https://tongqu.sjtu.edu.cn'; 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); - const data = response.body; - const $ = cheerio.load(data); + // requests API + const link = `${urlRoot}/api/act/type?type=${config[type]}&status=0&offset=0&offset=0&number=10&order=act.create_time&desc=true`; + const response = await got(link); + const data = response.data; - const activityInfo = $('body > script:nth-child(2)').html().match('var g_init_type_acts = (.*?);')[1]; - const activities = JSON.parse(activityInfo).acts; - const out = activities.map((i) => { - const title = '【' + i.typename + '】' + i.name; - const link = url.resolve(urlRoot, '/act/' + i.actid); - const single = { title, link }; - return single; - }); + // parses data + const activities = data.result.acts; + const feeds = activities.map((e) => ({ + title: e.name, + link: url.resolve(urlRoot, '/act/' + e.actid), + category: e.typename, + 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 = { - title: '同去网最新活动', - link: sectionLink, - item: out, + title: '同去网活动', + link: link, + item: feeds, }; };