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':