diff --git a/docs/university.md b/docs/university.md
index f1f8afb10..ed4322e6f 100644
--- a/docs/university.md
+++ b/docs/university.md
@@ -1958,6 +1958,44 @@ type 列表:
+## 西北农林科技大学
+
+### 校园要闻
+
+
+
+### 教务公告
+
+
+
+### 后勤公告
+
+
+
+### 图书馆公告
+
+
+
+### 网教中心公告
+
+
+
+### 团委公告
+
+
+
+### 计财处公告
+
+
+
+### 研究生院公告
+
+
+
+### 信息工程学院公告
+
+
+
## 西南财经大学
### 经济信息工程学院
diff --git a/lib/router.js b/lib/router.js
index 66a305c9e..bd53b22ba 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -807,6 +807,17 @@ router.get('/uestc/cqe/:type?', require('./routes/universities/uestc/cqe'));
router.get('/uestc/gr', require('./routes/universities/uestc/gr'));
router.get('/uestc/sice', require('./routes/universities/uestc/sice'));
+// 西北农林科技大学
+router.get('/nwafu/news', require('./routes/universities/nwafu/news'));
+router.get('/nwafu/jiaowu', require('./routes/universities/nwafu/jiaowu'));
+router.get('/nwafu/gs', require('./routes/universities/nwafu/gs'));
+router.get('/nwafu/lib', require('./routes/universities/nwafu/lib'));
+router.get('/nwafu/nic', require('./routes/universities/nwafu/nic'));
+router.get('/nwafu/54youth', require('./routes/universities/nwafu/54youth'));
+router.get('/nwafu/jcc', require('./routes/universities/nwafu/jcc'));
+router.get('/nwafu/yjshy', require('./routes/universities/nwafu/yjshy'));
+router.get('/nwafu/cie', require('./routes/universities/nwafu/cie'));
+
// 云南大学
router.get('/ynu/grs/zytz', require('./routes/universities/ynu/grs/zytz'));
router.get('/ynu/grs/qttz/:category', require('./routes/universities/ynu/grs/qttz'));
diff --git a/lib/routes/universities/nwafu/54youth.js b/lib/routes/universities/nwafu/54youth.js
new file mode 100644
index 000000000..231382c58
--- /dev/null
+++ b/lib/routes/universities/nwafu/54youth.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..4855f8776
--- /dev/null
+++ b/lib/routes/universities/nwafu/cie.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..a86852e3c
--- /dev/null
+++ b/lib/routes/universities/nwafu/gs.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..b2c7e7e31
--- /dev/null
+++ b/lib/routes/universities/nwafu/jcc.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..db2b929b3
--- /dev/null
+++ b/lib/routes/universities/nwafu/jiaowu.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..d6371a540
--- /dev/null
+++ b/lib/routes/universities/nwafu/lib.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..49ad66aa6
--- /dev/null
+++ b/lib/routes/universities/nwafu/news.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..8e65b5590
--- /dev/null
+++ b/lib/routes/universities/nwafu/nic.js
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 000000000..eaf58faa0
--- /dev/null
+++ b/lib/routes/universities/nwafu/yjshy.js
@@ -0,0 +1,28 @@
+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(),
+ };
+};