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,
};
};