From 4e79abd39dd001047a755c335cd92b524445cc61 Mon Sep 17 00:00:00 2001
From: karinido <37145311+karinido@users.noreply.github.com>
Date: Fri, 18 Aug 2023 19:37:02 +0800
Subject: [PATCH] feat(route): add descriptions for nwafu (#13067)
* feat(route): add descriptions for nwafu
docs: update the docs
scriptsformat scripts
refactor: migrate to v2
* Create radar.js
* Update radar.js
* feat(route): fix the route
* Update website/docs/routes/university.md
* Update website/docs/routes/university.md
* Update all.js
* Update all.js
* Update lib/v2/nwafu/all.js
* Update all.js
---------
---
lib/router.js | 11 -------
lib/routes/universities/nwafu/54youth.js | 28 ----------------
lib/routes/universities/nwafu/cie.js | 28 ----------------
lib/routes/universities/nwafu/gs.js | 28 ----------------
lib/routes/universities/nwafu/jcc.js | 28 ----------------
lib/routes/universities/nwafu/jiaowu.js | 28 ----------------
lib/routes/universities/nwafu/lib.js | 28 ----------------
lib/routes/universities/nwafu/news.js | 28 ----------------
lib/routes/universities/nwafu/nic.js | 28 ----------------
lib/routes/universities/nwafu/yjshy.js | 28 ----------------
lib/v2/nwafu/all.js | 41 ++++++++++++++++++++++++
lib/v2/nwafu/maintainer.js | 3 ++
lib/v2/nwafu/radar.js | 13 ++++++++
lib/v2/nwafu/router.js | 3 ++
lib/v2/nwafu/utils.js | 25 +++++++++++++++
website/docs/routes/university.md | 34 ++++----------------
16 files changed, 91 insertions(+), 291 deletions(-)
delete mode 100644 lib/routes/universities/nwafu/54youth.js
delete mode 100644 lib/routes/universities/nwafu/cie.js
delete mode 100644 lib/routes/universities/nwafu/gs.js
delete mode 100644 lib/routes/universities/nwafu/jcc.js
delete mode 100644 lib/routes/universities/nwafu/jiaowu.js
delete mode 100644 lib/routes/universities/nwafu/lib.js
delete mode 100644 lib/routes/universities/nwafu/news.js
delete mode 100644 lib/routes/universities/nwafu/nic.js
delete mode 100644 lib/routes/universities/nwafu/yjshy.js
create mode 100644 lib/v2/nwafu/all.js
create mode 100644 lib/v2/nwafu/maintainer.js
create mode 100644 lib/v2/nwafu/radar.js
create mode 100644 lib/v2/nwafu/router.js
create mode 100644 lib/v2/nwafu/utils.js
diff --git a/lib/router.js b/lib/router.js
index 3f9cfa30c..1c199d092 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -336,17 +336,6 @@ router.get('/sctu/xgxy/:id', lazyloadRouteHandler('./routes/universities/sctu/in
router.get('/sctu/jwc/:type?', lazyloadRouteHandler('./routes/universities/sctu/jwc/index'));
router.get('/sctu/jwc/:type/:id', lazyloadRouteHandler('./routes/universities/sctu/jwc/context'));
-// 西北农林科技大学
-router.get('/nwafu/news', lazyloadRouteHandler('./routes/universities/nwafu/news'));
-router.get('/nwafu/jiaowu', lazyloadRouteHandler('./routes/universities/nwafu/jiaowu'));
-router.get('/nwafu/gs', lazyloadRouteHandler('./routes/universities/nwafu/gs'));
-router.get('/nwafu/lib', lazyloadRouteHandler('./routes/universities/nwafu/lib'));
-router.get('/nwafu/nic', lazyloadRouteHandler('./routes/universities/nwafu/nic'));
-router.get('/nwafu/54youth', lazyloadRouteHandler('./routes/universities/nwafu/54youth'));
-router.get('/nwafu/jcc', lazyloadRouteHandler('./routes/universities/nwafu/jcc'));
-router.get('/nwafu/yjshy', lazyloadRouteHandler('./routes/universities/nwafu/yjshy'));
-router.get('/nwafu/cie', lazyloadRouteHandler('./routes/universities/nwafu/cie'));
-
// 云南大学
router.get('/ynu/grs/zytz', lazyloadRouteHandler('./routes/universities/ynu/grs/zytz'));
router.get('/ynu/grs/qttz/:category', lazyloadRouteHandler('./routes/universities/ynu/grs/qttz'));
diff --git a/lib/routes/universities/nwafu/54youth.js b/lib/routes/universities/nwafu/54youth.js
deleted file mode 100644
index 231382c58..000000000
--- a/lib/routes/universities/nwafu/54youth.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://54youth.nwsuaf.edu.cn/wjtz/tzgg/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.news-list > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 团委公告',
- link: 'https://54youth.nwsuaf.edu.cn/wjtz/tzgg/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/cie.js b/lib/routes/universities/nwafu/cie.js
deleted file mode 100644
index 4855f8776..000000000
--- a/lib/routes/universities/nwafu/cie.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://cie.nwafu.edu.cn/dtytz/tzgg/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('#sort > dd > ul > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 信工学院公告',
- link: 'https://cie.nwafu.edu.cn/dtytz/tzgg/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/gs.js b/lib/routes/universities/nwafu/gs.js
deleted file mode 100644
index a86852e3c..000000000
--- a/lib/routes/universities/nwafu/gs.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://gs.nwsuaf.edu.cn/tzggB/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('#sort > dd > .list > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 后勤公告',
- link: 'https://gs.nwsuaf.edu.cn/tzggB/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/jcc.js b/lib/routes/universities/nwafu/jcc.js
deleted file mode 100644
index b2c7e7e31..000000000
--- a/lib/routes/universities/nwafu/jcc.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://jcc.nwafu.edu.cn/tzgg/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('#sort > dd > .list > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 计财处公告',
- link: 'https://jcc.nwafu.edu.cn/tzgg/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/jiaowu.js b/lib/routes/universities/nwafu/jiaowu.js
deleted file mode 100644
index db2b929b3..000000000
--- a/lib/routes/universities/nwafu/jiaowu.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://jiaowu.nwafu.edu.cn/tzggB/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.list-i > ul > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 教务公告',
- link: 'https://jiaowu.nwafu.edu.cn/tzggB/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/lib.js b/lib/routes/universities/nwafu/lib.js
deleted file mode 100644
index d6371a540..000000000
--- a/lib/routes/universities/nwafu/lib.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://lib.nwafu.edu.cn/gg/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.articleList2.articleList > ul > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 图书馆公告',
- link: 'https://lib.nwafu.edu.cn/gg/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text().slice(1, -1), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/news.js b/lib/routes/universities/nwafu/news.js
deleted file mode 100644
index 49ad66aa6..000000000
--- a/lib/routes/universities/nwafu/news.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://news.nwafu.edu.cn/xnxw/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.list01 > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 校园新闻',
- link: 'https://news.nwafu.edu.cn/xnxw/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/nic.js b/lib/routes/universities/nwafu/nic.js
deleted file mode 100644
index 8e65b5590..000000000
--- a/lib/routes/universities/nwafu/nic.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://nic.nwafu.edu.cn/tzgg1/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('#sort > dd > .list > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 网教中心公告',
- link: 'https://nic.nwafu.edu.cn/tzgg1/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text(), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/routes/universities/nwafu/yjshy.js b/lib/routes/universities/nwafu/yjshy.js
deleted file mode 100644
index eaf58faa0..000000000
--- a/lib/routes/universities/nwafu/yjshy.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://yjshy.nwafu.edu.cn/tzgg/index.htm',
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.sort_rightcont > ul > li');
-
- ctx.state.data = {
- title: '西北农林科技大学 - 研究生院公告',
- link: 'https://yjshy.nwafu.edu.cn/tzgg/index.htm',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return { title: item.find('li a').text(), description: item.find('li a').text(), pubDate: parseDate(item.find('span').text().slice(1, -1), 'YYYY/MM/DD'), link: item.find('li a').attr('href') };
- })
- .get(),
- };
-};
diff --git a/lib/v2/nwafu/all.js b/lib/v2/nwafu/all.js
new file mode 100644
index 000000000..9653dfc6c
--- /dev/null
+++ b/lib/v2/nwafu/all.js
@@ -0,0 +1,41 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const { parseDate } = require('@/utils/parse-date');
+const { nwafuMap } = require('./utils');
+
+module.exports = async (ctx) => {
+ const { type = 'jiaowu' } = ctx.params;
+ const response = await got.get(nwafuMap.get(type)[0]);
+ const $ = cheerio.load(response.data);
+ const list = $(nwafuMap.get(type)[1])
+ .map((index, ele) => {
+ const itemTitle = $(ele).find(nwafuMap.get(type)[2]).text();
+ const itemPubDate = parseDate($(ele).find('span').text(), 'YYYY/MM/DD');
+ const link = new URL($(ele).find(nwafuMap.get(type)[2]).attr('href'), nwafuMap.get(type)[0]);
+
+ return {
+ title: itemTitle,
+ pubDate: itemPubDate,
+ link: link.toString(),
+ };
+ })
+ .get();
+
+ const out = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const detailResponse = await got.get(item.link);
+ const $ = cheerio.load(detailResponse.data);
+ item.description = $(nwafuMap.get(type)[3]).html();
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: nwafuMap.get(type)[4],
+ link: nwafuMap.get(type)[0],
+ description: nwafuMap.get(type)[4],
+ item: out,
+ };
+};
diff --git a/lib/v2/nwafu/maintainer.js b/lib/v2/nwafu/maintainer.js
new file mode 100644
index 000000000..b48f91d1e
--- /dev/null
+++ b/lib/v2/nwafu/maintainer.js
@@ -0,0 +1,3 @@
+module.exports = {
+ '/:type?': ['karinido'],
+};
diff --git a/lib/v2/nwafu/radar.js b/lib/v2/nwafu/radar.js
new file mode 100644
index 000000000..044ddf924
--- /dev/null
+++ b/lib/v2/nwafu/radar.js
@@ -0,0 +1,13 @@
+module.exports = {
+ 'nwafu.edu.cn': {
+ _name: '西北农林科技大学',
+ '.': [
+ {
+ title: '校园要闻',
+ docs: 'https://docs.rsshub.app/routes/university#xi-bei-nong-lin-ke-ji-da-xue-xiao-yuan-yao-wen',
+ source: ['/tzgg.htm', '/'],
+ target: '/nwafu/jiaowu',
+ },
+ ],
+ },
+};
diff --git a/lib/v2/nwafu/router.js b/lib/v2/nwafu/router.js
new file mode 100644
index 000000000..062ffb7cc
--- /dev/null
+++ b/lib/v2/nwafu/router.js
@@ -0,0 +1,3 @@
+module.exports = function (router) {
+ router.get('/:type?', require('./all'));
+};
diff --git a/lib/v2/nwafu/utils.js b/lib/v2/nwafu/utils.js
new file mode 100644
index 000000000..ba7e1dde4
--- /dev/null
+++ b/lib/v2/nwafu/utils.js
@@ -0,0 +1,25 @@
+const libValue = ['https://lib.nwafu.edu.cn/gg/', '.pageList ul li', 'li a', '.pageArticle', `西北农林科技大学图书馆通知公告`];
+const youthValue = ['https://54youth.nwsuaf.edu.cn/twsy/tzgg//', 'section ul li', 'li a', 'article', `共青团西北农林科技大学委员会通知公告`];
+const cieValue = ['https://cie.nwsuaf.edu.cn/dtytz/tzgg/', 'ul.list li', 'li a', '.article', `西北农林科技大学信息工程学院通知公告`];
+const gsValue = ['https://gs.nwsuaf.edu.cn/tzggB/', 'ul.list li', 'li a', '.content', `西北农林科技大学后勤管理处通知公告`];
+const jccValue = ['https://jcc.nwsuaf.edu.cn/tzgg/', 'ul.list li', 'li a', '.article', `西北农林科技大学计划财务处通知公告`];
+const jiaowuValue = ['https://jiaowu.nwsuaf.edu.cn/tzggB/', '.list-i ul li', 'li a', 'article', `西北农林科技大学教务通知公告`];
+const newsValue = ['https://news.nwafu.edu.cn/yxxw/', 'ul.NWAFU-list01 li', 'li a', '.pageArticle', `西北农林科技大学新闻网聚焦院处`];
+const nicValue = ['https://nic.nwsuaf.edu.cn/tzgg1/', 'ul.list li', 'li a', '.article', `西北农林科技大学信息化管理处通知公告`];
+const yjshyValue = ['https://yjshy.nwafu.edu.cn/tzgg/', '.sort_rightcont ul li', 'li a', '.cont', `西北农林科技大学研究生院通知公告`];
+
+const nwafuMap = new Map([
+ ['lib', libValue],
+ ['youth', youthValue],
+ ['cie', cieValue],
+ ['gs', gsValue],
+ ['jcc', jccValue],
+ ['jiaowu', jiaowuValue],
+ ['news', newsValue],
+ ['nic', nicValue],
+ ['yjshy', yjshyValue],
+]);
+
+module.exports = {
+ nwafuMap,
+};
diff --git a/website/docs/routes/university.md b/website/docs/routes/university.md
index 818d6deb8..67e028f9e 100644
--- a/website/docs/routes/university.md
+++ b/website/docs/routes/university.md
@@ -3241,39 +3241,17 @@ paramsDesc={['公告类型,详见表格']}>
### 校园要闻 {#xi-bei-nong-lin-ke-ji-da-xue-xiao-yuan-yao-wen}
-
+
-### 教务公告 {#xi-bei-nong-lin-ke-ji-da-xue-jiao-wu-gong-gao}
+通知类别
-
-### 后勤公告 {#xi-bei-nong-lin-ke-ji-da-xue-hou-qin-gong-gao}
+| 图书馆 | 共青团团委 | 信工学院 | 后勤管理处 | 计划财务处 | 教务处 | 新闻网 | 信息化管理处 | 研究生院 |
+| -------- | -------- | -------- | -------- | ------------ | -------- | -------- | -------- | -------- |
+| lib | youth | cie | gs | jcc | jiaowu | news | nic | yjshy |
-
+
-### 图书馆公告 {#xi-bei-nong-lin-ke-ji-da-xue-tu-shu-guan-gong-gao}
-
-
-
-### 网教中心公告 {#xi-bei-nong-lin-ke-ji-da-xue-wang-jiao-zhong-xin-gong-gao}
-
-
-
-### 团委公告 {#xi-bei-nong-lin-ke-ji-da-xue-tuan-wei-gong-gao}
-
-
-
-### 计财处公告 {#xi-bei-nong-lin-ke-ji-da-xue-ji-cai-chu-gong-gao}
-
-
-
-### 研究生院公告 {#xi-bei-nong-lin-ke-ji-da-xue-yan-jiu-sheng-yuan-gong-gao}
-
-
-
-### 信息工程学院公告 {#xi-bei-nong-lin-ke-ji-da-xue-xin-xi-gong-cheng-xue-yuan-gong-gao}
-
-
## 西南财经大学 {#xi-nan-cai-jing-da-xue}