From 7118a449ed1c7c68a954d6d7ff4eb1019df193b5 Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Tue, 3 Sep 2024 01:12:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20add=20=E5=8D=8E=E4=B8=AD?= =?UTF-8?q?=E7=A7=91=E6=8A=80=E5=A4=A7=E5=AD=A6=E7=A0=94=E7=A9=B6=E7=94=9F?= =?UTF-8?q?=E9=99=A2=20(#16595)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add 华中科技大学研究生院 * trigger build --- lib/routes/hust/gs.ts | 281 +++++++++++++++++++++++++++++++++++ lib/routes/hust/namespace.ts | 2 +- 2 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 lib/routes/hust/gs.ts diff --git a/lib/routes/hust/gs.ts b/lib/routes/hust/gs.ts new file mode 100644 index 000000000..563133913 --- /dev/null +++ b/lib/routes/hust/gs.ts @@ -0,0 +1,281 @@ +import { Route } from '@/types'; + +import cache from '@/utils/cache'; +import got from '@/utils/got'; +import { load } from 'cheerio'; +import { parseDate } from '@/utils/parse-date'; + +export const handler = async (ctx) => { + const { category = 'xwdt' } = ctx.req.param(); + const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 16; + + const rootUrl = 'https://gs.hust.edu.cn'; + const currentUrl = new URL(`${category}.htm`, rootUrl).href; + + const { data: response } = await got(currentUrl); + + const $ = load(response); + + let items = $('div.btlist ul li') + .slice(0, limit) + .toArray() + .map((item) => { + item = $(item); + + const a = item.find('a'); + const link = a.prop('href'); + + return { + title: a.text(), + pubDate: parseDate(item.find('span.time').text()), + link: link.startsWith('http') ? link : new URL(link, rootUrl).href, + }; + }); + + items = await Promise.all( + items.map((item) => + cache.tryGet(item.link, async () => { + try { + const { data: detailResponse } = await got(item.link); + + const $$ = load(detailResponse); + + const description = $$('div.v_news_content').html(); + + item.title = $$('div.article_title h1, h5').text(); + item.description = description; + item.content = { + html: description, + text: $$('div.v_news_content').text(), + }; + } catch { + // no-empty + } + + return item; + }) + ) + ); + + const image = new URL($('div.logo img').prop('content'), rootUrl).href; + + return { + title: $('title').text(), + description: $('META[Name="keywords"]').prop('Content'), + link: currentUrl, + item: items, + allowEmpty: true, + image, + }; +}; + +export const route: Route = { + path: '/gs/:category{.+}?', + name: '研究生院', + url: 'gs.hust.edu.cn', + maintainers: ['nczitzk'], + handler, + example: '/hust/gs/xwdt', + parameters: { category: '分类,默认为新闻动态,即 `xwdt`,可在对应分类页 URL 中找到' }, + description: `:::tip + 若订阅 [新闻动态](https://gs.hust.edu.cn/xwdt.htm),网址为 \`https://gs.hust.edu.cn/xwdt.htm\`。截取 \`https://gs.hust.edu.cn/\` 到末尾 \`.htm\` 的部分 \`xwdt\` 作为参数填入,此时路由为 [\`/hust/gs/xwdt\`](https://rsshub.app/hust/gs/xwdt)。 + ::: + + | [新闻动态](https://gs.hust.edu.cn/xwdt.htm) | [研究生服务专区](https://gs.hust.edu.cn/yjsfwzq.htm) | [综合管理](https://gs.hust.edu.cn/gzzd/zhgl.htm) | + | ------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------- | + | [xwdt](https://rsshub.app/hust/gs/xwdt) | [yjsfwzq](https://rsshub.app/hust/gs/yjsfwzq) | [gzzd/zhgl](https://rsshub.app/hust/gs/gzzd/zhgl) | + + #### [通知公告](https://gs.hust.edu.cn/tzgg/kcjksap.htm) + + | [课程及考试安排](https://gs.hust.edu.cn/tzgg/kcjksap.htm) | [国际交流](https://gs.hust.edu.cn/tzgg/gjjl.htm) | [学位工作](https://gs.hust.edu.cn/tzgg/xwgz.htm) | [同济医学院](https://gs.hust.edu.cn/tzgg/tjyxy.htm) | [其他](https://gs.hust.edu.cn/tzgg/qt.htm) | + | --------------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | --------------------------------------------------- | --------------------------------------------- | + | [tzgg/kcjksap](https://rsshub.app/hust/gs/tzgg/kcjksap) | [tzgg/gjjl](https://rsshub.app/hust/gs/tzgg/gjjl) | [tzgg/xwgz](https://rsshub.app/hust/gs/tzgg/xwgz) | [tzgg/tjyxy](https://rsshub.app/hust/gs/tzgg/tjyxy) | [tzgg/qt](https://rsshub.app/hust/gs/tzgg/qt) | + + #### [学籍管理](https://gs.hust.edu.cn/pygz/zbjs1/xjyd.htm) + + | [学籍异动](https://gs.hust.edu.cn/pygz/zbjs1/xjyd.htm) | [毕业管理](https://gs.hust.edu.cn/pygz/zbjs1/bygl.htm) | + | ------------------------------------------------------------- | ------------------------------------------------------------- | + | [pygz/zbjs1/xjyd](https://rsshub.app/hust/gs/pygz/zbjs1/xjyd) | [pygz/zbjs1/bygl](https://rsshub.app/hust/gs/pygz/zbjs1/bygl) | + + #### [教学管理](https://gs.hust.edu.cn/pygz/zbjs13/jxyj.htm) + + | [教学研究](https://gs.hust.edu.cn/pygz/zbjs13/jxyj.htm) | [课程教材](https://gs.hust.edu.cn/pygz/zbjs13/kcjc.htm) | [教学安排](https://gs.hust.edu.cn/pygz/zbjs13/jxap.htm) | [课表查询](https://gs.hust.edu.cn/pygz/zbjs13/kbcx.htm) | + | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | + | [pygz/zbjs13/jxyj](https://rsshub.app/hust/gs/pygz/zbjs13/jxyj) | [pygz/zbjs13/kcjc](https://rsshub.app/hust/gs/pygz/zbjs13/kcjc) | [pygz/zbjs13/jxap](https://rsshub.app/hust/gs/pygz/zbjs13/jxap) | [pygz/zbjs13/kbcx](https://rsshub.app/hust/gs/pygz/zbjs13/kbcx) | + + #### [培养过程](https://gs.hust.edu.cn/pygz/pygc.htm) + + | [培养方案](https://gs.hust.edu.cn/pygz/pygc/pyfa.htm) | [硕博连读](https://gs.hust.edu.cn/pygz/pygc/sbld.htm) | + | ----------------------------------------------------------- | ----------------------------------------------------------- | + | [pygz/pygc/pyfa](https://rsshub.app/hust/gs/pygz/pygc/pyfa) | [pygz/pygc/sbld](https://rsshub.app/hust/gs/pygz/pygc/sbld) | + + #### [国际交流](https://gs.hust.edu.cn/pygz/zbjs11/gjgpxm.htm) + + | [国家公派项目](https://gs.hust.edu.cn/pygz/zbjs11/gjgpxm.htm) | [国际学术会议](https://gs.hust.edu.cn/pygz/zbjs11/gjxshy.htm) | [校际合作项目](https://gs.hust.edu.cn/pygz/zbjs11/xjhzxm.htm) | [国际交流与合作办事流程](https://gs.hust.edu.cn/pygz/zbjs11/gjjlyhzbslc.htm) | + | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------- | + | [pygz/zbjs11/gjgpxm](https://rsshub.app/hust/gs/pygz/zbjs11/gjgpxm) | [pygz/zbjs11/gjxshy](https://rsshub.app/hust/gs/pygz/zbjs11/gjxshy) | [pygz/zbjs11/xjhzxm](https://rsshub.app/hust/gs/pygz/zbjs11/xjhzxm) | [pygz/zbjs11/gjjlyhzbslc](https://rsshub.app/hust/gs/pygz/zbjs11/gjjlyhzbslc) | + + #### [专业学位](https://gs.hust.edu.cn/pygz/zbjs111/xwsqdml.htm) + + | [学位授权点目录](https://gs.hust.edu.cn/pygz/zbjs111/xwsqdml.htm) | [专业学位建设](https://gs.hust.edu.cn/pygz/zbjs111/zyxwjs.htm) | [特色培养](https://gs.hust.edu.cn/pygz/zbjs111/tspy.htm) | + | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------- | + | [pygz/zbjs111/xwsqdml](https://rsshub.app/hust/gs/pygz/zbjs111/xwsqdml) | [pygz/zbjs111/zyxwjs](https://rsshub.app/hust/gs/pygz/zbjs111/zyxwjs) | [pygz/zbjs111/tspy](https://rsshub.app/hust/gs/pygz/zbjs111/tspy) | + + #### [学位工作](https://gs.hust.edu.cn/xwgz/xwdjs.htm) + + | [学位点建设](https://gs.hust.edu.cn/xwgz/xwdjs.htm) | [学位授予](https://gs.hust.edu.cn/xwgz/xwsy.htm) | [导师队伍](https://gs.hust.edu.cn/xwgz/dsdw.htm) | + | --------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | + | [xwgz/xwdjs](https://rsshub.app/hust/gs/xwgz/xwdjs) | [xwgz/xwsy](https://rsshub.app/hust/gs/xwgz/xwsy) | [xwgz/dsdw](https://rsshub.app/hust/gs/xwgz/dsdw) | + `, + categories: ['university'], + + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportRadar: true, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['gs.hust.edu.cn/:category'], + target: (params) => { + const category = params.category; + + return `/hust/gs${category ? `/${category}` : ''}`; + }, + }, + { + title: '新闻动态', + source: ['gs.hust.edu.cn/xwdt.htm'], + target: '/gs/xwdt', + }, + { + title: '研究生服务专区', + source: ['gs.hust.edu.cn/yjsfwzq.htm'], + target: '/gs/yjsfwzq', + }, + { + title: '综合管理', + source: ['gs.hust.edu.cn/gzzd/zhgl.htm'], + target: '/gs/gzzd/zhgl', + }, + { + title: '通知公告 - 课程及考试安排', + source: ['gs.hust.edu.cn/tzgg/kcjksap.htm'], + target: '/gs/tzgg/kcjksap', + }, + { + title: '通知公告 - 国际交流', + source: ['gs.hust.edu.cn/tzgg/gjjl.htm'], + target: '/gs/tzgg/gjjl', + }, + { + title: '通知公告 - 学位工作', + source: ['gs.hust.edu.cn/tzgg/xwgz.htm'], + target: '/gs/tzgg/xwgz', + }, + { + title: '通知公告 - 同济医学院', + source: ['gs.hust.edu.cn/tzgg/tjyxy.htm'], + target: '/gs/tzgg/tjyxy', + }, + { + title: '通知公告 - 其他', + source: ['gs.hust.edu.cn/tzgg/qt.htm'], + target: '/gs/tzgg/qt', + }, + { + title: '学籍管理 - 学籍异动', + source: ['gs.hust.edu.cn/pygz/zbjs1/xjyd.htm'], + target: '/gs/pygz/zbjs1/xjyd', + }, + { + title: '学籍管理 - 毕业管理', + source: ['gs.hust.edu.cn/pygz/zbjs1/bygl.htm'], + target: '/gs/pygz/zbjs1/bygl', + }, + { + title: '教学管理 - 教学研究', + source: ['gs.hust.edu.cn/pygz/zbjs13/jxyj.htm'], + target: '/gs/pygz/zbjs13/jxyj', + }, + { + title: '教学管理 - 课程教材', + source: ['gs.hust.edu.cn/pygz/zbjs13/kcjc.htm'], + target: '/gs/pygz/zbjs13/kcjc', + }, + { + title: '教学管理 - 教学安排', + source: ['gs.hust.edu.cn/pygz/zbjs13/jxap.htm'], + target: '/gs/pygz/zbjs13/jxap', + }, + { + title: '教学管理 - 课表查询', + source: ['gs.hust.edu.cn/pygz/zbjs13/kbcx.htm'], + target: '/gs/pygz/zbjs13/kbcx', + }, + { + title: '培养过程 - 培养方案', + source: ['gs.hust.edu.cn/pygz/pygc/pyfa.htm'], + target: '/gs/pygz/pygc/pyfa', + }, + { + title: '培养过程 - 硕博连读', + source: ['gs.hust.edu.cn/pygz/pygc/sbld.htm'], + target: '/gs/pygz/pygc/sbld', + }, + { + title: '国际交流 - 国家公派项目', + source: ['gs.hust.edu.cn/pygz/zbjs11/gjgpxm.htm'], + target: '/gs/pygz/zbjs11/gjgpxm', + }, + { + title: '国际交流 - 国际学术会议', + source: ['gs.hust.edu.cn/pygz/zbjs11/gjxshy.htm'], + target: '/gs/pygz/zbjs11/gjxshy', + }, + { + title: '国际交流 - 校际合作项目', + source: ['gs.hust.edu.cn/pygz/zbjs11/xjhzxm.htm'], + target: '/gs/pygz/zbjs11/xjhzxm', + }, + { + title: '国际交流 - 国际交流与合作办事流程', + source: ['gs.hust.edu.cn/pygz/zbjs11/gjjlyhzbslc.htm'], + target: '/gs/pygz/zbjs11/gjjlyhzbslc', + }, + { + title: '专业学位 - 学位授权点目录', + source: ['gs.hust.edu.cn/pygz/zbjs111/xwsqdml.htm'], + target: '/gs/pygz/zbjs111/xwsqdml', + }, + { + title: '专业学位 - 专业学位建设', + source: ['gs.hust.edu.cn/pygz/zbjs111/zyxwjs.htm'], + target: '/gs/pygz/zbjs111/zyxwjs', + }, + { + title: '专业学位 - 特色培养', + source: ['gs.hust.edu.cn/pygz/zbjs111/tspy.htm'], + target: '/gs/pygz/zbjs111/tspy', + }, + { + title: '学位工作 - 学位点建设', + source: ['gs.hust.edu.cn/xwgz/xwdjs.htm'], + target: '/gs/xwgz/xwdjs', + }, + { + title: '学位工作 - 学位授予', + source: ['gs.hust.edu.cn/xwgz/xwsy.htm'], + target: '/gs/xwgz/xwsy', + }, + { + title: '学位工作 - 导师队伍', + source: ['gs.hust.edu.cn/xwgz/dsdw.htm'], + target: '/gs/xwgz/dsdw', + }, + ], +}; diff --git a/lib/routes/hust/namespace.ts b/lib/routes/hust/namespace.ts index c4f337abd..e0a189682 100644 --- a/lib/routes/hust/namespace.ts +++ b/lib/routes/hust/namespace.ts @@ -2,5 +2,5 @@ import type { Namespace } from '@/types'; export const namespace: Namespace = { name: '华中科技大学', - url: 'aia.hust.edu.cn', + url: 'hust.edu.cn', };