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