diff --git a/docs/en/university.md b/docs/en/university.md
index e32863be7ea6f3..58624fb22a36cf 100644
--- a/docs/en/university.md
+++ b/docs/en/university.md
@@ -40,6 +40,73 @@ Note: [Source website](https://gs.bjtu.edu.cn/) only provides articles in Chines
+## Nanjing University of the Arts
+
+### Official Information
+
+
+
+| News Type | Parameters |
+| ---- | --- |
+| 公告 | 346 |
+| 南艺要闻 | 332 |
+
+
+
+### Shuangxing Information
+
+
+
+| News Type | Parameters |
+| ---- | --- |
+| 校园电视 | 230 |
+| 院部动态 | 232 |
+| 动感校园 | 233 |
+| 招就指南 | 234 |
+| 南艺院报 | 236 |
+
+
+
+### School of Design
+
+
+
+| News Type | Parameters |
+| ---------------------- | ---------- |
+| 学院新闻 NEWS | news |
+| 展览 EXHIBITION | exhibition |
+| 研创 RESEARCH & CREATION | rc |
+| 项目 PROJECT | project |
+| 党团 PARTY | party |
+| 后浪 YOUTH | youth |
+
+
+
+### Graduate Institute
+
+
+
+| News Type | Parameters |
+| ---- | ---- |
+| 招生工作 | 1959 |
+| 培养工作 | 1962 |
+| 学位工作 | 1958 |
+
+
+
+### Library
+
+
+
+| News Type | Parameters |
+| ---- | ---- |
+| 新闻动态 | xwdt |
+| 党建动态 | djdt |
+| 资源动态 | zydt |
+| 服务动态 | fwdt |
+
+
+
## Polimi
### News
diff --git a/docs/other.md b/docs/other.md
index b468f32623125d..d23ccc8d5d006b 100644
--- a/docs/other.md
+++ b/docs/other.md
@@ -402,6 +402,12 @@ type 为 all 时,category 参数不支持 cost 和 free
+## 成都住建蓉 e 办
+
+### 商品住房购房登记
+
+
+
## 滴答清单
### 习惯打卡
diff --git a/docs/university.md b/docs/university.md
index 6102dd609ec388..de3c0598cef7c3 100644
--- a/docs/university.md
+++ b/docs/university.md
@@ -2155,6 +2155,19 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
+### 图书馆
+
+
+
+| 新闻模块 | 参数 |
+| ---- | ---- |
+| 新闻动态 | xwdt |
+| 党建动态 | djdt |
+| 资源动态 | zydt |
+| 服务动态 | fwdt |
+
+
+
## 南京邮电大学
### 教务处通知与新闻
diff --git a/lib/v2/cdzjryb/maintainer.js b/lib/v2/cdzjryb/maintainer.js
new file mode 100644
index 00000000000000..4d2c48498079d1
--- /dev/null
+++ b/lib/v2/cdzjryb/maintainer.js
@@ -0,0 +1,3 @@
+module.exports = {
+ '/zw/projectList': ['TonyRL'],
+};
diff --git a/lib/v2/cdzjryb/projectList.js b/lib/v2/cdzjryb/projectList.js
new file mode 100644
index 00000000000000..58c283875608d5
--- /dev/null
+++ b/lib/v2/cdzjryb/projectList.js
@@ -0,0 +1,49 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const { parseDate } = require('@/utils/parse-date');
+const timezone = require('@/utils/timezone');
+const { art } = require('@/utils/render');
+const path = require('path');
+
+module.exports = async (ctx) => {
+ const url = 'https://zw.cdzjryb.com/lottery/accept/projectList';
+ const { data: response } = await got(url);
+ const $ = cheerio.load(response);
+
+ const list = $('#_projectInfo tr')
+ .toArray()
+ .map((item) =>
+ $(item)
+ .find('td')
+ .toArray()
+ .map((td) => $(td).text().trim())
+ );
+
+ const items = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(`cdzjryb:zw:projectList${item[0]}`, async () => {
+ const { data: notice } = await got.post('https://zw.cdzjryb.com/lottery/accept/getProjectRule', {
+ form: {
+ projectUuid: item[0],
+ },
+ });
+ return {
+ title: item[3],
+ description: art(path.join(__dirname, 'templates/projectList.art'), {
+ item,
+ notice: notice.message,
+ }),
+ link: url,
+ guid: `cdzjryb:zw:projectList:${item[0]}`,
+ pubDate: timezone(parseDate(item[8]), 8),
+ };
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: $('head title').text(),
+ link: url,
+ item: items,
+ };
+};
diff --git a/lib/v2/cdzjryb/radar.js b/lib/v2/cdzjryb/radar.js
new file mode 100644
index 00000000000000..bc6d99999c1bd6
--- /dev/null
+++ b/lib/v2/cdzjryb/radar.js
@@ -0,0 +1,13 @@
+module.exports = {
+ 'cdzjryb.com': {
+ _name: '成都住建蓉 e 办',
+ zw: [
+ {
+ title: '商品住房购房登记',
+ docs: 'https://docs.rsshub.app/other.html#cheng-dou-zhu-jian-rong-e-ban',
+ source: ['/lottery/accept/projectList', '/'],
+ target: '/cdzjryb/zw/projectList',
+ },
+ ],
+ },
+};
diff --git a/lib/v2/cdzjryb/router.js b/lib/v2/cdzjryb/router.js
new file mode 100644
index 00000000000000..ecf2a25c0ca67b
--- /dev/null
+++ b/lib/v2/cdzjryb/router.js
@@ -0,0 +1,3 @@
+module.exports = (router) => {
+ router.get('/zw/projectList', require('./projectList'));
+};
diff --git a/lib/v2/cdzjryb/templates/projectList.art b/lib/v2/cdzjryb/templates/projectList.art
new file mode 100644
index 00000000000000..52b02f201b351d
--- /dev/null
+++ b/lib/v2/cdzjryb/templates/projectList.art
@@ -0,0 +1,23 @@
+
+
+ 区域 |
+ 项目名称 |
+ 预售证号 |
+ 预售范围 |
+ 住房套数 |
+ 开发商咨询电话 |
+ 登记开始时间 |
+ 登记结束时间 |
+ 名单外人员资格已释放时间 |
+ 名单内人员资格已释放时间 |
+ 预审码取得截止时间 |
+ 项目报名状态 |
+
+
+ <% for(let i = 2; i < item.length - 1; i++){ %>
+ <%= item[i] %> |
+ <% } %>
+
+
+登记规则
+{{@ notice }}
diff --git a/lib/v2/nua/lib.js b/lib/v2/nua/lib.js
new file mode 100644
index 00000000000000..a181974f8a1e41
--- /dev/null
+++ b/lib/v2/nua/lib.js
@@ -0,0 +1,39 @@
+const util = require('./utils');
+const baseUrl = 'https://lib.nua.edu.cn';
+
+module.exports = async (ctx) => {
+ const type = ctx.params.type;
+ let webPageName;
+
+ switch (type) {
+ case 'xwdt':
+ webPageName = '.wp_column.column-1.selected';
+ break;
+ case 'djdt':
+ webPageName = '.wp_column.column-2.selected';
+ break;
+ case 'zydt':
+ webPageName = '.wp_column.column-3.selected';
+ break;
+ case 'fwdt':
+ webPageName = '.wp_column.column-4.selected';
+ break;
+ default:
+ throw Error(`暂不支持对${type}的订阅`);
+ }
+
+ const newsUrl = `${baseUrl}/${type}/list.htm`;
+ const listName = 'div.news_con';
+ const artiContent = '.wp_articlecontent';
+ const listDate = '.news_date';
+
+ const items = await util.ProcessList(newsUrl, baseUrl, listName, listDate, webPageName);
+ const results = await util.ProcessFeed(items[0], artiContent, ctx);
+
+ ctx.state.data = {
+ title: 'NUA-图书馆-' + items[1],
+ link: `${baseUrl}/${type}/list.htm`,
+ description: '南京艺术学院 图书馆 ' + items[1],
+ item: results,
+ };
+};
diff --git a/lib/v2/nua/maintainer.js b/lib/v2/nua/maintainer.js
index 6d4282961afcdc..6eb22a2fd6e3eb 100644
--- a/lib/v2/nua/maintainer.js
+++ b/lib/v2/nua/maintainer.js
@@ -2,5 +2,6 @@ module.exports = {
'/dc/:type': ['evnydd0sf'],
'/gra/:type': ['evnydd0sf'],
'/index/:type': ['evnydd0sf'],
+ '/lib/:type': ['evnydd0sf'],
'/sxw/:type': ['evnydd0sf'],
};
diff --git a/lib/v2/nua/radar.js b/lib/v2/nua/radar.js
index 9052e31d1b085c..7edd41efa97eff 100644
--- a/lib/v2/nua/radar.js
+++ b/lib/v2/nua/radar.js
@@ -33,5 +33,13 @@ module.exports = {
target: '/nua/gra/:type',
},
],
+ lib: [
+ {
+ title: '图书馆',
+ docs: 'https://docs.rsshub.app/university.html#nan-jing-yi-shu-xue-yuan',
+ source: ['/:type/list.htm'],
+ target: '/nua/lib/:type',
+ },
+ ],
},
};
diff --git a/lib/v2/nua/router.js b/lib/v2/nua/router.js
index c7ac0eec411e9f..1dad1a1b6b558a 100644
--- a/lib/v2/nua/router.js
+++ b/lib/v2/nua/router.js
@@ -2,5 +2,6 @@ module.exports = function (router) {
router.get('/dc/:type', require('./dc'));
router.get('/gra/:type', require('./gra'));
router.get('/index/:type', require('./index'));
+ router.get('/lib/:type', require('./lib'));
router.get('/sxw/:type', require('./sxw'));
};
diff --git a/lib/v2/nua/utils.js b/lib/v2/nua/utils.js
index fedef79f568fdf..47ccfe8fd879db 100644
--- a/lib/v2/nua/utils.js
+++ b/lib/v2/nua/utils.js
@@ -23,26 +23,21 @@ function arti_link(text, href) {
}
async function ProcessList(newsUrl, baseUrl, listName, listDate, webPageName) {
- const result = await got(newsUrl, {
- https: {
- rejectUnauthorized: false,
- },
- });
+ const result = await got(newsUrl, { https: { rejectUnauthorized: false } });
const $ = cheerio.load(result.data);
- const pageName = $(webPageName).text();
+ const pageName = $(webPageName).text().trim();
const items = $(listName)
.toArray()
.map((item) => {
- item = $(item);
const href = $(item).find('a').attr('href');
const type = pageType(href);
return {
link: type === 'in-nua' ? baseUrl + href : href,
- title: item.find('a').attr('title'),
- pubDate: timezone(parseDate(item.find(listDate).first().text(), 'YYYY-MM-DD'), +8),
+ title: $(item).find('a').attr('title'),
+ pubDate: timezone(parseDate($(item).find(listDate).first().text(), 'YYYY-MM-DD'), +8),
type,
};
});
@@ -55,14 +50,14 @@ const ProcessFeed = async (items, artiContent, ctx) =>
items.map((item) =>
ctx.cache.tryGet(item.link, async () => {
switch (item.type) {
- case 'in-nua' || 'nua':
- // eslint-disable-next-line no-case-declarations
+ case 'in-nua':
+ case 'nua': {
const result = await got(item.link, { https: { rejectUnauthorized: false } });
- // eslint-disable-next-line no-case-declarations
const $ = cheerio.load(result.data);
item.author = $('.arti_publisher').text() + ' ' + $('.arti_views').text();
item.description = $(artiContent).html();
return item;
+ }
case 'wechat-mp':
return fetchArticle(ctx, item.link);
case 'unknown':