diff --git a/docs/README.md b/docs/README.md
index 2db2d5fab9..ea57aea009 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1256,6 +1256,14 @@ GitHub 官方也提供了一些 RSS:
+
+
+
+
+
+
+
+
| 通知公告 | 工作信息 | 招生信息 | 培养信息 | 学位学科 | 国际交流 | 创新工程 |
diff --git a/router.js b/router.js
index c366607708..46e83d7a9f 100644
--- a/router.js
+++ b/router.js
@@ -544,6 +544,11 @@ router.get('/shanghaitech/sist/activity', require('./routes/universities/shangha
// 上海交通大学
router.get('/sjtu/seiee/academic', require('./routes/universities/sjtu/seiee/academic'));
+router.get('/sjtu/seiee/bjwb/major_select', require('./routes/universities/sjtu/seiee/bjwb/major_select'));
+router.get('/sjtu/seiee/bjwb/major_transfer', require('./routes/universities/sjtu/seiee/bjwb/major_transfer'));
+router.get('/sjtu/seiee/bjwb/postgraduate', require('./routes/universities/sjtu/seiee/bjwb/postgraduate'));
+router.get('/sjtu/seiee/bjwb/abroad', require('./routes/universities/sjtu/seiee/bjwb/abroad'));
+
router.get('/sjtu/gs/tzgg/:type?', require('./routes/universities/sjtu/gs/tzgg'));
// 江南大学
diff --git a/routes/universities/sjtu/seiee/bjwb/abroad.js b/routes/universities/sjtu/seiee/bjwb/abroad.js
new file mode 100644
index 0000000000..8c08094654
--- /dev/null
+++ b/routes/universities/sjtu/seiee/bjwb/abroad.js
@@ -0,0 +1,57 @@
+const axios = require('../../../../../utils/axios');
+const cheerio = require('cheerio');
+const url = require('url');
+
+const host = 'http://bjwb.seiee.sjtu.edu.cn';
+
+module.exports = async (ctx) => {
+ const link = url.resolve(host, `bkjwb/list/1507-1-20.htm`);
+ const response = await axios.get(link);
+
+ const $ = cheerio.load(response.data);
+
+ const list = $('.list_box_5 li')
+ .map((i, e) => ({
+ date: $(e)
+ .children('span')
+ .text()
+ .slice(1, -1),
+ title: $(e)
+ .children('a')
+ .text()
+ .slice(2),
+ link: $(e)
+ .children('a')
+ .attr('href'),
+ }))
+ .get();
+
+ const out = await Promise.all(
+ list.map(async (item) => {
+ const itemUrl = url.resolve(host, item.link);
+ 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: item.title,
+ link: itemUrl,
+ author: '上海交通大学电子信息与电气工程学院本科教务办',
+ description: $('.article_content').text(),
+ pubDate: new Date(item.date),
+ };
+ ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
+ return Promise.resolve(single);
+ })
+ );
+
+ ctx.state.data = {
+ title: '上海交通大学电子信息与电气工程学院本科教务办 -- 交换交流',
+ link,
+ item: out,
+ };
+};
diff --git a/routes/universities/sjtu/seiee/bjwb/major_select.js b/routes/universities/sjtu/seiee/bjwb/major_select.js
new file mode 100644
index 0000000000..c2a8584228
--- /dev/null
+++ b/routes/universities/sjtu/seiee/bjwb/major_select.js
@@ -0,0 +1,57 @@
+const axios = require('../../../../../utils/axios');
+const cheerio = require('cheerio');
+const url = require('url');
+
+const host = 'http://bjwb.seiee.sjtu.edu.cn';
+
+module.exports = async (ctx) => {
+ const link = url.resolve(host, 'bkjwb/list/1503-1-20.htm');
+ const response = await axios.get(link);
+
+ const $ = cheerio.load(response.data);
+
+ const list = $('.list_box_5 li')
+ .map((i, e) => ({
+ date: $(e)
+ .children('span')
+ .text()
+ .slice(1, -1),
+ title: $(e)
+ .children('a')
+ .text()
+ .slice(2),
+ link: $(e)
+ .children('a')
+ .attr('href'),
+ }))
+ .get();
+
+ const out = await Promise.all(
+ list.map(async (item) => {
+ const itemUrl = url.resolve(host, item.link);
+ 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: item.title,
+ link: itemUrl,
+ author: '上海交通大学电子信息与电气工程学院本科教务办',
+ description: $('.article_content').text(),
+ pubDate: new Date(item.date),
+ };
+ ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
+ return Promise.resolve(single);
+ })
+ );
+
+ ctx.state.data = {
+ title: '上海交通大学电子信息与电气工程学院本科教务办 -- 分专业',
+ link,
+ item: out,
+ };
+};
diff --git a/routes/universities/sjtu/seiee/bjwb/major_transfer.js b/routes/universities/sjtu/seiee/bjwb/major_transfer.js
new file mode 100644
index 0000000000..eddf2cd799
--- /dev/null
+++ b/routes/universities/sjtu/seiee/bjwb/major_transfer.js
@@ -0,0 +1,57 @@
+const axios = require('../../../../../utils/axios');
+const cheerio = require('cheerio');
+const url = require('url');
+
+const host = 'http://bjwb.seiee.sjtu.edu.cn';
+
+module.exports = async (ctx) => {
+ const link = url.resolve(host, 'bkjwb/list/1505-1-20.htm');
+ const response = await axios.get(link);
+
+ const $ = cheerio.load(response.data);
+
+ const list = $('.list_box_5 li')
+ .map((i, e) => ({
+ date: $(e)
+ .children('span')
+ .text()
+ .slice(1, -1),
+ title: $(e)
+ .children('a')
+ .text()
+ .slice(2),
+ link: $(e)
+ .children('a')
+ .attr('href'),
+ }))
+ .get();
+
+ const out = await Promise.all(
+ list.map(async (item) => {
+ const itemUrl = url.resolve(host, item.link);
+ 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: item.title,
+ link: itemUrl,
+ author: '上海交通大学电子信息与电气工程学院本科教务办',
+ description: $('.article_content').text(),
+ pubDate: new Date(item.date),
+ };
+ ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
+ return Promise.resolve(single);
+ })
+ );
+
+ ctx.state.data = {
+ title: '上海交通大学电子信息与电气工程学院本科教务办 -- 转专业',
+ link,
+ item: out,
+ };
+};
diff --git a/routes/universities/sjtu/seiee/bjwb/postgraduate.js b/routes/universities/sjtu/seiee/bjwb/postgraduate.js
new file mode 100644
index 0000000000..06e3060402
--- /dev/null
+++ b/routes/universities/sjtu/seiee/bjwb/postgraduate.js
@@ -0,0 +1,57 @@
+const axios = require('../../../../../utils/axios');
+const cheerio = require('cheerio');
+const url = require('url');
+
+const host = 'http://bjwb.seiee.sjtu.edu.cn';
+
+module.exports = async (ctx) => {
+ const link = url.resolve(host, 'bkjwb/list/1506-1-20.htm');
+ const response = await axios.get(link);
+
+ const $ = cheerio.load(response.data);
+
+ const list = $('.list_box_5 li')
+ .map((i, e) => ({
+ date: $(e)
+ .children('span')
+ .text()
+ .slice(1, -1),
+ title: $(e)
+ .children('a')
+ .text()
+ .slice(2),
+ link: $(e)
+ .children('a')
+ .attr('href'),
+ }))
+ .get();
+
+ const out = await Promise.all(
+ list.map(async (item) => {
+ const itemUrl = url.resolve(host, item.link);
+ 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: item.title,
+ link: itemUrl,
+ author: '上海交通大学电子信息与电气工程学院本科教务办',
+ description: $('.article_content').text(),
+ pubDate: new Date(item.date),
+ };
+ ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
+ return Promise.resolve(single);
+ })
+ );
+
+ ctx.state.data = {
+ title: '上海交通大学电子信息与电气工程学院本科教务办 -- 直升研究生',
+ link,
+ item: out,
+ };
+};