forked from DIYgod/RSSHub
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(route): add route for gr.xidian.edu.cn (DIYgod#16538)
- Loading branch information
Showing
1 changed file
with
288 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,288 @@ | ||
import { Route } from '@/types'; | ||
import cache from '@/utils/cache'; | ||
import got from '@/utils/got'; | ||
import { load } from 'cheerio'; | ||
import { parseDate } from '@/utils/parse-date'; | ||
|
||
const baseUrl = 'https://gr.xidian.edu.cn'; | ||
|
||
const struct = { | ||
home_zxdt: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '主页-最新动态', | ||
path: '/zxdt', | ||
}, | ||
home_tzgg1: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '主页-通知公告', | ||
path: '/tzgg1', | ||
}, | ||
home_jzbg: { | ||
selector: { | ||
list: '.jzbg-list ul li', | ||
}, | ||
name: '主页-讲座报告', | ||
path: '/jzbg', | ||
}, | ||
yyjs_jbqk: { | ||
name: '研院介绍-基本情况', | ||
path: '/yyjs/jbqk', | ||
}, | ||
yyjs_jbqk1: { | ||
name: '研院介绍-机构设置', | ||
path: '/yyjs/jbqk1', | ||
}, | ||
yyjs_jbqk2: { | ||
name: '研院介绍-部门领导', | ||
path: '/yyjs/jbqk2', | ||
}, | ||
yyjs_jbqk3: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '研院介绍-服务指南', | ||
path: '/yyjs/jbqk3', | ||
}, | ||
yyjs_jbqk4: { | ||
name: '研院介绍-学院联系方式', | ||
path: '/yyjs/jbqk4', | ||
}, | ||
yjsy: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '招生信息', | ||
path: '/yjsy', | ||
}, | ||
yjsy_yjszs: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '招生信息-硕士研究生招生', | ||
path: '/yjsy/yjszs', | ||
}, | ||
yjsy_bsyjszs: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '招生信息-博士研究生招生', | ||
path: '/yjsy/bsyjszs', | ||
}, | ||
yjsy_qtlxzs: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '招生信息-其他类型招生', | ||
path: '/yjsy/qtlxzs', | ||
}, | ||
pygl: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理', | ||
path: '/pygl', | ||
}, | ||
pygl_xsxw: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-学术学位', | ||
path: 'pygl/pyfa1/xsxw1', | ||
}, | ||
pygl_zyxw: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-专业学位', | ||
path: '/pygl/pyfa1/zyxw1', | ||
}, | ||
pygl_jxgl: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-教学管理', | ||
path: '/pygl/jxgl', | ||
}, | ||
pygl_jxgl1: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-课程建设', | ||
path: '/pygl/jxgl1', | ||
}, | ||
pygl_jxgl2: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-管理规定', | ||
path: '/pygl/jxgl2', | ||
}, | ||
pygl_jxgl3: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-国际交流', | ||
path: '/pygl/jxgl3', | ||
}, | ||
pygl_bslc: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '培养管理-办事流程', | ||
path: '/pygl/bslc', | ||
}, | ||
xwsy: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '学位授予', | ||
path: '/xwsy', | ||
}, | ||
xwsy_tzgg: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '学位授予-通知公告', | ||
path: '/xwsy/tzgg', | ||
}, | ||
xwsy_gzzd: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '学位授予-规章制度', | ||
path: '/xwsy/gzzd', | ||
}, | ||
xwsy_swmd: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '学位授予-授位名单', | ||
path: '/xwsy/swmd', | ||
}, | ||
xwsy_zlxz: { | ||
selector: { | ||
list: '.main-right-list ul li', | ||
}, | ||
name: '学位授予-资料下载', | ||
path: '/xwsy/zlxz', | ||
}, | ||
}; | ||
|
||
export const route: Route = { | ||
path: '/gr/:category?', | ||
categories: ['university'], | ||
example: '/xidian/gr/home_tzgg1', | ||
parameters: { category: '通知类别,默认为主页-通知公告' }, | ||
features: { | ||
requireConfig: false, | ||
requirePuppeteer: false, | ||
antiCrawler: false, | ||
supportBT: false, | ||
supportPodcast: false, | ||
supportScihub: false, | ||
}, | ||
name: '研究生院/卓越工程师学院', | ||
maintainers: ['ZiHao256'], | ||
handler, | ||
description: `| 文章来源 | 参数 | | ||
| ------------- | ------------ | | ||
| ✅主页-最新动态 | home_zxdt | | ||
| ✅主页-通知公告 | home_tzgg1 | | ||
| ✅主页-讲座报告 | home_jzbg | | ||
| ✅研院介绍-基本情况 | yyjs_jbqk | | ||
| ✅研院介绍-机构设置 | yyjs_jbqk1 | | ||
| ✅研院介绍-部门领导 | yyjs_jbqk2 | | ||
| ✅研院介绍-服务指南 | yyjs_jbqk3 | | ||
| ✅研院介绍-学院联系方式 | yyjs_jbqk4 | | ||
| ✅招生信息 | yjsy | | ||
| ✅招生信息-硕士研究生招生 | yjsy_yjszs | | ||
| ✅招生信息-博士研究生招生 | yjsy_bsyjszs | | ||
| ✅招生信息-其他类型招生 | yjsy_qtlxzs | | ||
| ✅培养管理 | pygl | | ||
| ✅培养管理-学术学位 | pygl_xsxw | | ||
| ✅培养管理-专业学位 | pygl_zyxw | | ||
| ✅培养管理-教学管理 | pygl_jxgl | | ||
| ✅培养管理-课程建设 | pygl_jxgl1 | | ||
| ✅培养管理-管理规定 | pygl_jxgl2 | | ||
| ✅培养管理-国际交流 | pygl_jxgl3 | | ||
| ✅培养管理-办事流程 | pygl_bslc | | ||
| ✅学位授予 | xwsy | | ||
| ✅学位授予-通知公告 | xwsy_tzgg | | ||
| ✅学位授予-规章制度 | xwsy_gzzd | | ||
| ✅学位授予-授位名单 | xwsy_swmd | | ||
| ✅学位授予-资料下载 | xwsy_zlxz |`, | ||
radar: [ | ||
{ | ||
source: ['gr.xidian.edu.cn/'], | ||
}, | ||
], | ||
}; | ||
|
||
async function handler(ctx) { | ||
const { category = 'home_tzgg1' } = ctx.req.param(); | ||
const url = `${baseUrl}/${struct[category].path}.htm`; | ||
const response = await got(url, { | ||
headers: { | ||
referer: baseUrl, | ||
}, | ||
https: { | ||
rejectUnauthorized: false, | ||
}, | ||
}); | ||
|
||
const $ = load(response.data); | ||
|
||
if (category === 'yyjs_jbqk' || category === 'yyjs_jbqk1' || category === 'yyjs_jbqk2' || category === 'yyjs_jbqk4') { | ||
return { | ||
title: $('.right-bt-left').text(), | ||
link: url, | ||
item: [ | ||
{ | ||
title: $('.right-bt-left').text(), | ||
link: url, | ||
description: $('.main-right').html(), | ||
}, | ||
], | ||
}; | ||
} else { | ||
let items = $(struct[category].selector.list) | ||
.toArray() | ||
.map((item) => { | ||
item = $(item); | ||
return { | ||
title: item.find('a').text(), | ||
link: new URL(item.find('a').attr('href'), baseUrl).href, | ||
pubDate: parseDate(item.find('span').text()), | ||
}; | ||
}); | ||
|
||
items = await Promise.all( | ||
items.map((item) => | ||
cache.tryGet(item.link, async () => { | ||
const detailResponse = await got(item.link, { | ||
headers: { | ||
referer: url, | ||
}, | ||
https: { | ||
rejectUnauthorized: false, | ||
}, | ||
}); | ||
const content = load(detailResponse.data); | ||
content('.content-sxt').remove(); | ||
item.description = content('[name="_newscontent_fromname"]').html(); | ||
return item; | ||
}) | ||
) | ||
); | ||
|
||
return { | ||
title: $('title').text(), | ||
link: url, | ||
item: items, | ||
}; | ||
} | ||
} |