From 8a76f8743ba367d260b4560c05f7f72a14967d41 Mon Sep 17 00:00:00 2001 From: Jaya Date: Thu, 13 Apr 2023 00:01:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B9=BF=E8=A5=BF?= =?UTF-8?q?=E6=B0=91=E6=97=8F=E5=A4=A7=E5=AD=A6RSS=E6=94=AF=E6=8C=81=20&&?= =?UTF-8?q?=20fix:=20=E4=BF=AE=E5=A4=8D=E5=8D=97=E4=BA=AC=E6=99=93?= =?UTF-8?q?=E5=BA=84=E5=AD=A6=E9=99=A2RSS=E6=97=A5=E6=9C=9F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=20(#12285)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add gxmzu utils * fix: test01 * fix: try01 * fix: fix njxzc homepage tzgg date * docs: add gxmzu rss docs support * feat: finish gxmzu rss building * fix: fix njxzc radar's docs * fix: fix docs/university * change gxmzu location in docs/university.md * change gxmzu location in docs/university.md again * a secomd attempt to change gxmzu location in docs/university.md * fix: a third attempt to change gxmzu location in docs/university.md * Update lib/v2/gxmzu/utils/index.js * Update lib/v2/gxmzu/maintainer.js --------- --- docs/university.md | 10 +++++++ lib/v2/gxmzu/ai.js | 18 ++++++++++++ lib/v2/gxmzu/maintainer.js | 4 +++ lib/v2/gxmzu/radar.js | 21 ++++++++++++++ lib/v2/gxmzu/router.js | 4 +++ lib/v2/gxmzu/utils/index.js | 55 +++++++++++++++++++++++++++++++++++++ lib/v2/gxmzu/yjs.js | 18 ++++++++++++ lib/v2/njxzc/radar.js | 4 +-- lib/v2/njxzc/utils/index.js | 2 +- 9 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 lib/v2/gxmzu/ai.js create mode 100644 lib/v2/gxmzu/maintainer.js create mode 100644 lib/v2/gxmzu/radar.js create mode 100644 lib/v2/gxmzu/router.js create mode 100644 lib/v2/gxmzu/utils/index.js create mode 100644 lib/v2/gxmzu/yjs.js diff --git a/docs/university.md b/docs/university.md index 8676a2027..7ec313240 100644 --- a/docs/university.md +++ b/docs/university.md @@ -1079,6 +1079,16 @@ pageClass: routes +## 广西民族大学 + +### 研究生院招生公告 + + + +### 人工智能学院通知公告 + + + ## 广州大学 ## 广州大学研招网通知公告 diff --git a/lib/v2/gxmzu/ai.js b/lib/v2/gxmzu/ai.js new file mode 100644 index 000000000..e8228057d --- /dev/null +++ b/lib/v2/gxmzu/ai.js @@ -0,0 +1,18 @@ +const { getNoticeList } = require('./utils'); + +const url = 'https://ai.gxmzu.edu.cn/index/tzgg.htm'; +const host = 'https://ai.gxmzu.edu.cn'; + +module.exports = async (ctx) => { + const out = await getNoticeList(ctx, url, host, 'a', '.timestyle55267', { + title: '.titlestyle55269', + content: '#vsb_content', + date: '.timestyle55269', + }); + + ctx.state.data = { + title: '广西民族大学人工智能学院 -- 通知公告', + link: url, + item: out, + }; +}; diff --git a/lib/v2/gxmzu/maintainer.js b/lib/v2/gxmzu/maintainer.js new file mode 100644 index 000000000..1bbd4f056 --- /dev/null +++ b/lib/v2/gxmzu/maintainer.js @@ -0,0 +1,4 @@ +module.exports = { + '/aitzgg': ['real-jiakai'], + '/yjszsgg': ['real-jiakai'], +}; diff --git a/lib/v2/gxmzu/radar.js b/lib/v2/gxmzu/radar.js new file mode 100644 index 000000000..80a4e882e --- /dev/null +++ b/lib/v2/gxmzu/radar.js @@ -0,0 +1,21 @@ +module.exports = { + 'gxmzu.edu.cn': { + _name: '广西民族大学', + ai: [ + { + title: '人工智能学院通知公告', + docs: 'https://docs.rsshub.app/university.html#guang-xi-min-zu-da-xue-ren-gong-zhi-neng-xue-yuan-tong-zhi-gong-gao', + source: ['/index/tzgg.htm', '/'], + target: '/gxmzu/aitzgg', + }, + ], + yjs: [ + { + title: '研究生院招生公告', + docs: 'https://docs.rsshub.app/university.html#guang-xi-min-zu-da-xue-yan-jiu-sheng-yuan-zhao-sheng-gong-gao', + source: ['/tzgg/zsgg.htm', '/'], + target: '/gxmzu/yjszsgg', + }, + ], + }, +}; diff --git a/lib/v2/gxmzu/router.js b/lib/v2/gxmzu/router.js new file mode 100644 index 000000000..0ceba1b11 --- /dev/null +++ b/lib/v2/gxmzu/router.js @@ -0,0 +1,4 @@ +module.exports = (router) => { + router.get('/aitzgg', require('./ai')); + router.get('/yjszsgg', require('./yjs')); +}; diff --git a/lib/v2/gxmzu/utils/index.js b/lib/v2/gxmzu/utils/index.js new file mode 100644 index 000000000..5e7f5a0d1 --- /dev/null +++ b/lib/v2/gxmzu/utils/index.js @@ -0,0 +1,55 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); +const timezone = require('@/utils/timezone'); + +async function getNoticeList(ctx, url, host, titleSelector, dateSelector, contentSelector) { + const response = await got({ url, https: { rejectUnauthorized: false } }); + const $ = cheerio.load(response.data); + + const list = $(`tr[height=20]`) + .toArray() + .map((item) => { + item = $(item); + return { + title: item.find(titleSelector).attr('title'), + link: new URL(item.find(titleSelector).attr('href'), host).href, + pubDate: timezone(parseDate(item.find(dateSelector).text().trim(), 'YYYY-MM-DD'), +8), + }; + }); + + const out = await Promise.all( + list.map((item) => + ctx.cache.tryGet(item.link, async () => { + if (item.link.includes('.jsp')) { + item.description = '该通知无法直接预览,请点击原文链接↑查看'; + } else { + const response = await got({ url: item.link, https: { rejectUnauthorized: false } }); + if (response.redirectUrls.length) { + item.link = response.redirectUrls[0]; + item.description = '该通知无法直接预览,请点击原文链接↑查看'; + } else { + const $ = cheerio.load(response.data); + item.title = $(contentSelector.title).text(); + const hasEmbeddedPDFScript = $('script:contains("showVsbpdfIframe")').length > 0; + + if (hasEmbeddedPDFScript) { + item.description = '该通知无法直接预览,请点击原文链接↑查看'; + } else { + item.description = $(contentSelector.content).html(); + } + const preDate = $(contentSelector.date).text().replace(/年|月/g, '-').replace(/日/g, ''); + item.pubDate = timezone(parseDate(preDate), +8); + } + } + return item; + }) + ) + ); + + return out; +} + +module.exports = { + getNoticeList, +}; diff --git a/lib/v2/gxmzu/yjs.js b/lib/v2/gxmzu/yjs.js new file mode 100644 index 000000000..485f3c481 --- /dev/null +++ b/lib/v2/gxmzu/yjs.js @@ -0,0 +1,18 @@ +const { getNoticeList } = require('./utils'); + +const url = 'https://yjs.gxmzu.edu.cn/tzgg/zsgg.htm'; +const host = 'https://yjs.gxmzu.edu.cn'; + +module.exports = async (ctx) => { + const out = await getNoticeList(ctx, url, host, 'a', '.timestyle55267', { + title: '.titlestyle55269', + content: '#vsb_content', + date: '.timestyle55269', + }); + + ctx.state.data = { + title: '广西民族大学研究生院 -- 招生公告', + link: url, + item: out, + }; +}; diff --git a/lib/v2/njxzc/radar.js b/lib/v2/njxzc/radar.js index 44e59c422..1fdb2ddc2 100644 --- a/lib/v2/njxzc/radar.js +++ b/lib/v2/njxzc/radar.js @@ -4,7 +4,7 @@ module.exports = { lib: [ { title: '图书馆通知公告', - docs: 'https://docs.rsshub.app/university.html#nan-jing-xiao-zhuang-xue-yuan-guan-wang-tong-zhi-gong-gao', + docs: 'https://docs.rsshub.app/university.html#nan-jing-xiao-zhuang-xue-yuan-tu-shu-guan-tong-zhi-gong-gao', source: ['/pxyhd/list.htm', '/'], target: '/njxzc/libtzgg', }, @@ -12,7 +12,7 @@ module.exports = { www: [ { title: '通知公告', - docs: 'https://docs.rsshub.app/university.html#nan-jing-xiao-zhuang-xue-yuan-tu-shu-guan-tong-zhi-gong-gao', + docs: 'https://docs.rsshub.app/university.html#nan-jing-xiao-zhuang-xue-yuan-guan-wang-tong-zhi-gong-gao', source: ['/89/list.htm', '/'], target: '/njxzc/tzgg', }, diff --git a/lib/v2/njxzc/utils/index.js b/lib/v2/njxzc/utils/index.js index 8a879425b..fbb4051d1 100644 --- a/lib/v2/njxzc/utils/index.js +++ b/lib/v2/njxzc/utils/index.js @@ -33,7 +33,7 @@ async function getNoticeList(ctx, url, host, titleSelector, dateSelector, conten .replace(/src="\//g, `src="${new URL('.', host).href}`) .replace(/href="\//g, `href="${new URL('.', host).href}`) .trim(); - item.pubDate = timezone(parseDate($(contentSelector.date).text().replace('编辑:', '').replace('发布日期:', '')), +8); + item.pubDate = timezone(parseDate($(contentSelector.date).text().replace('编辑:', '').replace('发布日期:', '').replace('发布时间:', '')), +8); } return item; })