diff --git a/docs/README.md b/docs/README.md
index 2f6dee0ae9..436e2c34b3 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1980,11 +1980,64 @@ GitHub 官方也提供了一些 RSS:
#### 本科生院工作通知
-举例:
+举例:
-路由: `/heu/ugs/news`
+路由: `/heu/ugs/news/:author?/:category?`
-参数: 无
+参数:
+
+- author,可选,发布部门,默认为 `gztz`
+- category,可选,分类,默认为 `all`
+
+author 列表:
+
+| 教务处 | 实践教学与交流处 | 教育评估处 | 专业建设处 | 国家大学生文化素质基地 | 教师教学发展中心 | 综合办公室 | 工作通知 |
+| ------ | ---------------- | ---------- | ---------- | ---------------------- | ---------------- | ---------- | -------- |
+| jwc | sjjxyjlzx | jypgc | zyjsc | gjdxswhszjd | jsjxfzzx | zhbgs | gztz |
+
+category 列表:
+
+`all` 为全部
+
+教务处:
+
+| 教学安排 | 考试管理 | 学籍管理 | 外语统考 | 成绩管理 |
+| -------- | -------- | -------- | -------- | -------- |
+| jxap | ksgl | xjgl | wytk | cjgl |
+
+实践教学与交流处:
+
+| 实验教学 | 实验室建设 | 校外实习 | 学位论文 | 课程设计 | 创新创业 | 校际交流 |
+| -------- | ---------- | -------- | -------- | -------- | -------- | -------- |
+| syjx | sysjs | xwsx | xwlw | kcsj | cxcy | xjjl |
+
+教育评估处:
+
+| 教学研究与教学成果 | 质量监控 |
+| ------------------ | -------- |
+| jxyjyjxcg | zljk |
+
+专业建设处:
+
+| 专业与教材建设 | 陈赓实验班 | 教学名师与优秀主讲教师 | 课程建设 | 双语教学 |
+| -------------- | ---------- | ---------------------- | -------- | -------- |
+| zyyjcjs | cgsyb | jxmsyyxzjjs | kcjs | syjx |
+
+国家大学生文化素质基地:无
+
+教师教学发展中心:
+
+| 教师培训 |
+| -------- |
+| jspx |
+
+综合办公室:
+
+| 联系课程 |
+| -------- |
+| lxkc |
+
+工作通知:无
## 传统媒体
diff --git a/router.js b/router.js
index d085ca1b44..291386728b 100644
--- a/router.js
+++ b/router.js
@@ -503,7 +503,7 @@ router.get('/cas/sim/academic', require('./routes/universities/cas/sim/academic'
router.get('/njupt/jwc/:type?', require('./routes/universities/njupt/jwc'));
// 哈尔滨工程大学
-router.get('/heu/ugs/news', require('./routes/universities/heu/ugs/news'));
+router.get('/heu/ugs/news/:author?/:category?', require('./routes/universities/heu/ugs/news'));
// ifanr
router.get('/ifanr/appso', require('./routes/ifanr/appso'));
diff --git a/routes/universities/heu/ugs/news.js b/routes/universities/heu/ugs/news.js
index f287510c3c..b3e5acc54c 100644
--- a/routes/universities/heu/ugs/news.js
+++ b/routes/universities/heu/ugs/news.js
@@ -1,34 +1,122 @@
const axios = require('../../../../utils/axios');
const cheerio = require('cheerio');
+const url = require('url');
+
+const baseUrl = 'http://ugs.hrbeu.edu.cn';
+
+const authorMap = {
+ gztz: {
+ all: '/2821',
+ },
+ jwc: {
+ all: '/jwc',
+ jxap: '/2847',
+ ksgl: '/2895',
+ xjgl: '/2902',
+ wytk: '/2897',
+ cjgl: '/2901',
+ },
+ sjjxyjlc: {
+ all: '/3206',
+ syjx: '/2847',
+ sysjs: '/sysjs',
+ xwsx: '/2909',
+ xwlw: '/2910',
+ kcsj: '/2911',
+ cxcy: '/2913',
+ xjjl: '/xjjl',
+ },
+ jypgc: {
+ all: '/3207',
+ jxyjyjxcg: '/2916',
+ zljk: '/2917',
+ },
+ zyjsc: {
+ all: '/3208',
+ zyyjcjs: '/2914',
+ cgsyb: '/2925',
+ jxmsyyxzjjs: '/2918',
+ ktjs: '/2919',
+ syjx: '/2920',
+ },
+ gjdxswhszjd: {
+ all: '/3209',
+ },
+ jsjxfzzx: {
+ all: '/3210',
+ jspx: '/2915',
+ },
+ zhbgs: {
+ all: '/3211',
+ lxkc: '/lxkc',
+ },
+};
module.exports = async (ctx) => {
+ const author = ctx.params.author || 'gztz';
+ const category = ctx.params.category || 'all';
+ const link = baseUrl + authorMap[author][category] + '/list.htm';
const response = await axios({
method: 'get',
- url: 'http://ugs.hrbeu.edu.cn/2821/list.htm',
+ url: link,
headers: {
- Referer: 'http://ugs.hrbeu.edu.cn',
+ Referer: baseUrl,
},
});
+ const $ = cheerio.load(response.data);
- const data = response.data;
+ const urlList = $('.wp_article_list_table .border9')
+ .slice(0, 10)
+ .map((i, e) => $('a', e).attr('href'))
+ .get();
- const $ = cheerio.load(data);
- const list = $('.wp_article_list_table .border9');
+ const titleList = $('.wp_article_list_table .border9')
+ .slice(0, 10)
+ .map((i, e) => $('a', e).text())
+ .get();
+
+ const dateList = $('.wp_article_list_table .border9')
+ .slice(0, 10)
+ .map((i, e) => $('.date', e).text())
+ .get();
+
+ const out = await Promise.all(
+ urlList.map(async (itemUrl, index) => {
+ itemUrl = url.resolve(baseUrl, itemUrl);
+ if (itemUrl.indexOf('.htm') !== -1) {
+ 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: titleList[index],
+ link: itemUrl,
+ description: $('.wp_articlecontent')
+ .html()
+ .replace(/src="\//g, `src="${url.resolve(baseUrl, '.')}`)
+ .replace(/href="\//g, `href="${url.resolve(baseUrl, '.')}`)
+ .trim(),
+ pubDate: dateList[index],
+ };
+ ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
+ return Promise.resolve(single);
+ } else {
+ const single = {
+ title: titleList[index],
+ link: itemUrl,
+ description: '此链接为文件,请点击下载',
+ pubDate: dateList[index],
+ };
+ return Promise.resolve(single);
+ }
+ })
+ );
ctx.state.data = {
title: '哈尔滨工程大学本科生院工作通知',
- link: 'http://ugs.hrbeu.edu.cn/2821/list.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return {
- title: item.find('a').text(),
- pubDate: new Date(item.find('.date').text()).toUTCString(),
- link: `http://ugs.hrbeu.edu.cn${item.find('a').attr('href')}`,
- };
- })
- .get(),
+ link: baseUrl,
+ item: out,
};
};