mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-05 12:21:31 +08:00
feat: 添加 uestc auto and cs 的路由 (#2816)
This commit is contained in:
@@ -167,6 +167,40 @@ pageClass: routes
|
||||
|
||||
</Route>
|
||||
|
||||
### 计算机科学与工程学院
|
||||
|
||||
<Route author="talengu" example="/uestc/cs/ztlj*xskb" path="/universities/uestc/cs/:type?" :paramsDesc="['默认为 `ztlj*xskb`']">
|
||||
|
||||
| 学院新闻 | 学生科 | 教务科 | 研管科 | 学术看板 |
|
||||
| ---------- | --------- | --------- | --------- | ---------- |
|
||||
| xwzx\*xyxw | tzgg\*xsk | tzgg\*jwk | tzgg\*ygk | ztlj\*xskb |
|
||||
|
||||
注 1: xwzx\*xyxw 对应 http://www.scse.uestc.edu.cn/xwzx/xyxw.htm ;
|
||||
tzgg\*xsk 对应 http://www.scse.uestc.edu.cn/tzgg/xsk.htm
|
||||
|
||||
可自定义设置
|
||||
|
||||
注 2; 用+号来叠加 学生科+教务科 `/uestc/cs/ztlj*xskb+tzgg*jwk`
|
||||
|
||||
</Route>
|
||||
|
||||
### 自动化工程学院
|
||||
|
||||
<Route author="talengu" example="/uestc/auto/tzgg1" path="/universities/uestc/news/:type?" :paramsDesc="['默认为 `tzgg1`']">
|
||||
|
||||
| 通知公告 | 学术看板 | 焦点新闻 | 综合新闻 |
|
||||
| -------- | -------- | -------- | -------- |
|
||||
| tzgg1 | xskb1 | jdxw | zhxw1 |
|
||||
|
||||
注 1: tzgg1 对应 http://www.auto.uestc.edu.cn/index/tzgg1.htm ;
|
||||
xskb1 对应 http://www.auto.uestc.edu.cn/index/xskb1.htm
|
||||
|
||||
可自定义设置
|
||||
|
||||
注 2: 用+号来叠加,通知公告+学术看板 `/uestc/auto/tzgg1+xskb1`
|
||||
|
||||
</Route>
|
||||
|
||||
## 东莞理工学院
|
||||
|
||||
### 教务处通知
|
||||
|
||||
@@ -636,6 +636,8 @@ router.get('/sctu/jwc/:type/:id', require('./routes/universities/sctu/jwc/contex
|
||||
// 电子科技大学
|
||||
router.get('/uestc/jwc/:type?', require('./routes/universities/uestc/jwc'));
|
||||
router.get('/uestc/news/:type?', require('./routes/universities/uestc/news'));
|
||||
router.get('/uestc/auto/:type?', require('./routes/universities/uestc/auto'));
|
||||
router.get('/uestc/cs/:type?', require('./routes/universities/uestc/cs'));
|
||||
|
||||
// 昆明理工大学
|
||||
router.get('/kmust/jwc/:type?', require('./routes/universities/kmust/jwc'));
|
||||
|
||||
127
lib/routes/universities/uestc/auto.js
Normal file
127
lib/routes/universities/uestc/auto.js
Normal file
@@ -0,0 +1,127 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 获取含有列表的页面
|
||||
async function loadTypePage(link) {
|
||||
const Response = await got({
|
||||
method: 'get',
|
||||
url: link,
|
||||
});
|
||||
const data = Response.data;
|
||||
return { data };
|
||||
}
|
||||
// 同步获取含有列表的页面
|
||||
const ProcessListPage = async (list, caches) =>
|
||||
await Promise.all(
|
||||
list.map(async (link) => {
|
||||
const itemUrl = link;
|
||||
// 使用tryGet方法从缓存获取内容。
|
||||
// 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
|
||||
const other = await caches.tryGet(itemUrl, async () => await loadTypePage(itemUrl));
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, other));
|
||||
})
|
||||
);
|
||||
|
||||
// 完整文章页
|
||||
async function load(link) {
|
||||
const response = await got.get(link);
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
// 将style去掉
|
||||
const reg = /style\s*?=\s*?([‘"])[\s\S]*?\1/gi;
|
||||
const description = $('div.v_news_content')
|
||||
.html()
|
||||
.replace(reg, '');
|
||||
|
||||
// addNoReferrer($, 'div#vsb_content', '', 'http://www.auto.uestc.edu.cn');
|
||||
// 提取内容
|
||||
return { description };
|
||||
}
|
||||
|
||||
// 同步完整文章页
|
||||
const ProcessFeed = async (list, caches) => {
|
||||
const host = 'http://www.auto.uestc.edu.cn/';
|
||||
|
||||
return await Promise.all(
|
||||
list.map(async (item) => {
|
||||
const $ = cheerio.load(item);
|
||||
const title = $('h6 a').text();
|
||||
|
||||
// 还原相对链接为绝对链接
|
||||
const itemUrl = $('h6 a')
|
||||
.attr('href')
|
||||
.replace('..', host);
|
||||
const itemDate = new Date(
|
||||
$('span')
|
||||
.text()
|
||||
.replace(/-/g, '/')
|
||||
).toUTCString();
|
||||
|
||||
// 列表上提取到的信息
|
||||
const single = {
|
||||
title: title,
|
||||
link: itemUrl,
|
||||
author: '成电自动化',
|
||||
guid: itemUrl,
|
||||
pubDate: itemDate,
|
||||
};
|
||||
|
||||
// 使用tryGet方法从缓存获取内容。
|
||||
// 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
|
||||
const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
|
||||
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, single, other));
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
// 通知公告 http://www.auto.uestc.edu.cn/index/tzgg1.htm
|
||||
// 学术看板 http://www.auto.uestc.edu.cn/index/xskb1.htm
|
||||
// 焦点新闻 http://www.auto.uestc.edu.cn/index/jdxw.htm
|
||||
// 综合新闻 http://www.auto.uestc.edu.cn/index/zhxw1.htm
|
||||
|
||||
// 测试:http://localhost:1200/uestc/auto/tzgg1+xskb1
|
||||
module.exports = async (ctx) => {
|
||||
const baseUrl = 'http://www.auto.uestc.edu.cn/';
|
||||
const baseIndexUrl = 'http://www.auto.uestc.edu.cn/index/';
|
||||
|
||||
const type = ctx.params.type || 'tzgg1';
|
||||
const allType = type.split('+');
|
||||
|
||||
const listLink = [];
|
||||
for (const idx in allType) {
|
||||
listLink.push(baseIndexUrl + allType[idx] + '.htm');
|
||||
}
|
||||
const Pages = await ProcessListPage(listLink, ctx.cache);
|
||||
|
||||
// 合并要处理的link
|
||||
let headName = '自动化';
|
||||
let list = null;
|
||||
for (const idx in Pages) {
|
||||
const $ = cheerio.load(Pages[idx].data);
|
||||
headName =
|
||||
headName +
|
||||
'+' +
|
||||
$('title')
|
||||
.text()
|
||||
.split('-')[0];
|
||||
if (list === null) {
|
||||
list = $('dl.clearfix');
|
||||
} else {
|
||||
list = $('dl.clearfix').append(list);
|
||||
}
|
||||
}
|
||||
list = list.get();
|
||||
|
||||
// 处理所有的页面
|
||||
const result = await ProcessFeed(list, ctx.cache);
|
||||
|
||||
ctx.state.data = {
|
||||
title: headName,
|
||||
link: baseUrl,
|
||||
description: '电子科技大学 - ' + headName,
|
||||
item: result,
|
||||
};
|
||||
};
|
||||
136
lib/routes/universities/uestc/cs.js
Normal file
136
lib/routes/universities/uestc/cs.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
// const { addNoReferrer } = require('@/utils/common-utils');
|
||||
|
||||
// 获取含有列表的页面
|
||||
async function loadTypePage(link) {
|
||||
const Response = await got({
|
||||
method: 'get',
|
||||
url: link,
|
||||
});
|
||||
const data = Response.data;
|
||||
return { data };
|
||||
}
|
||||
// 同步获取含有列表的页面
|
||||
const ProcessListPage = async (list, caches) =>
|
||||
await Promise.all(
|
||||
list.map(async (link) => {
|
||||
const itemUrl = link;
|
||||
// 使用tryGet方法从缓存获取内容。
|
||||
// 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
|
||||
const other = await caches.tryGet(itemUrl, async () => await loadTypePage(itemUrl));
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, other));
|
||||
})
|
||||
);
|
||||
|
||||
// 完整文章页
|
||||
async function load(link) {
|
||||
const response = await got.get(link);
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
// 将style去掉
|
||||
const reg = /style\s*?=\s*?([‘"])[\s\S]*?\1/gi;
|
||||
const description = $('div#vsb_content')
|
||||
.html()
|
||||
.replace(reg, '');
|
||||
|
||||
// addNoReferrer($, 'div#vsb_content', '', 'http://www.scse.uestc.edu.cn');
|
||||
// 提取内容
|
||||
return { description };
|
||||
}
|
||||
|
||||
const ProcessFeed = async (list, caches) => {
|
||||
const host = 'http://www.scse.uestc.edu.cn/';
|
||||
|
||||
return await Promise.all(
|
||||
list.map(async (item) => {
|
||||
const $ = cheerio.load(item);
|
||||
const title = $('span a').text();
|
||||
// 还原相对链接为绝对链接
|
||||
const itemUrl = $('span a')
|
||||
.attr('href')
|
||||
.replace('..', host);
|
||||
const itemDate = new Date(
|
||||
$('span#time')
|
||||
.text()
|
||||
.replace(/-/g, '/')
|
||||
).toUTCString();
|
||||
|
||||
// 列表上提取到的信息
|
||||
const single = {
|
||||
title: title,
|
||||
link: itemUrl,
|
||||
author: '成电计算机',
|
||||
guid: itemUrl,
|
||||
pubDate: itemDate,
|
||||
};
|
||||
|
||||
// 使用tryGet方法从缓存获取内容。
|
||||
// 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
|
||||
const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
|
||||
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, single, other));
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
// 网站地图 http://www.scse.uestc.edu.cn/index/wzdt.htm
|
||||
// 通知公告
|
||||
// 办公室 http://www.scse.uestc.edu.cn/tzgg/bgs.htm
|
||||
// 组织人事 http://www.scse.uestc.edu.cn/tzgg/zzrs.htm
|
||||
// 科研科 http://www.scse.uestc.edu.cn/tzgg/kyk.htm
|
||||
// 研管科 http://www.scse.uestc.edu.cn/tzgg/ygk.htm
|
||||
// 教务科 http://www.scse.uestc.edu.cn/tzgg/jwk.htm
|
||||
// 学生科 http://www.scse.uestc.edu.cn/tzgg/xsk.htm
|
||||
// 国际办 http://www.scse.uestc.edu.cn/tzgg/gjb.htm
|
||||
// 综合教育 http://www.scse.uestc.edu.cn/tzgg/zhjy.htm
|
||||
// 创新创业 http://www.scse.uestc.edu.cn/tzgg/cxcy.htm
|
||||
// Info http://www.scse.uestc.edu.cn/tzgg/Info.htm
|
||||
// 安全工作 http://www.scse.uestc.edu.cn/tzgg/aqgz.htm
|
||||
// 学术看板 http://www.scse.uestc.edu.cn/ztlj/xskb.htm
|
||||
|
||||
// 测试: http://localhost:1200/uestc/cs/ztlj*xskb+tzgg*jwk
|
||||
module.exports = async (ctx) => {
|
||||
const baseUrl = 'http://www.scse.uestc.edu.cn/';
|
||||
const type = ctx.params.type || 'ztlj*xskb';
|
||||
const allType = type.split('+');
|
||||
|
||||
const listLink = [];
|
||||
for (const idx in allType) {
|
||||
listLink.push(baseUrl + allType[idx].replace('*', '/') + '.htm');
|
||||
}
|
||||
|
||||
const Pages = await ProcessListPage(listLink, ctx.cache);
|
||||
|
||||
let headName = '计算机';
|
||||
let list = null;
|
||||
// 合并要处理的link
|
||||
for (const idx in Pages) {
|
||||
const $ = cheerio.load(Pages[idx].data);
|
||||
headName =
|
||||
headName +
|
||||
'+' +
|
||||
$('title')
|
||||
.text()
|
||||
.split('-')[0];
|
||||
if (list === null) {
|
||||
list = $('div#newsList').find('p');
|
||||
} else {
|
||||
list = $('div#newsList')
|
||||
.find('p')
|
||||
.append(list);
|
||||
}
|
||||
}
|
||||
list = list.get();
|
||||
|
||||
const result = await ProcessFeed(list, ctx.cache);
|
||||
|
||||
ctx.state.data = {
|
||||
title: headName,
|
||||
link: baseUrl,
|
||||
description: '电子科技大学 - ' + headName,
|
||||
item: result,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user