mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-24 23:12:34 +08:00
fix(route/upc): fix FetchError bug when fetching the Full Text (#19645)
* fix(route/upc): fix FetchError bug when fetching the Full Text - fix the bug in dealing with external links * fix(route/upc): Add fetching full texts from additional sites
This commit is contained in:
+32
-46
@@ -6,46 +6,24 @@ import { parseDate } from '@/utils/parse-date';
|
||||
import cache from '@/utils/cache';
|
||||
import timezone from '@/utils/timezone';
|
||||
|
||||
const typeDict = {
|
||||
tzgg: '', // 默认为所有通知
|
||||
'18519': '教学·运行-', // 教学·运行
|
||||
'18520': '学业·学籍-', // 学业·学籍
|
||||
'18521': '教学·研究-', // 教学·研究
|
||||
'18522': '课程·教材-', // 课程·教材
|
||||
'18523': '实践·教学-', // 实践·教学
|
||||
'18524': '创新·创业-', // 创新·创业
|
||||
yywwz: '语言·文字-', // 语言·文字
|
||||
jxwjy: '继续·教育-', // 继续·教育
|
||||
bkwzs: '本科·招生-', // 本科·招生
|
||||
};
|
||||
|
||||
// module.exports = async (ctx) => {
|
||||
const handler = async (ctx) => {
|
||||
// 从 URL 参数中获取通知分类
|
||||
const { type = 'tzgg' } = ctx.req.param();
|
||||
// console.log(type);
|
||||
const baseUrl = 'https://jwc.upc.edu.cn';
|
||||
const { data: response } = await got(`${baseUrl}/${type}/list.htm`);
|
||||
// console.log(`${baseUrl}/${typeDict[type]}/list.htm`);
|
||||
const $ = load(response);
|
||||
// const listItems = $('ul.news_list').find('li');
|
||||
// console.log(`List item count: ${listItems.length}`);
|
||||
// const list = $('ul.news_list') 只会得到第一个li
|
||||
const list = $('ul.news_list')
|
||||
.find('li')
|
||||
// 使用“toArray()”方法将选择的所有 DOM 元素以数组的形式返回。
|
||||
.toArray()
|
||||
// 使用“map()”方法遍历数组,并从每个元素中解析需要的数据。
|
||||
.map((item) => {
|
||||
// console.log(item);
|
||||
item = $(item);
|
||||
const a = item.find('a').first();
|
||||
let linkStr = a.attr('href');
|
||||
// 若链接不是以http开头,则加上前缀
|
||||
if (a.attr('href').startsWith('http://')) {
|
||||
// 改为https访问
|
||||
linkStr.replace('http://', 'https://');
|
||||
} else {
|
||||
// 改为https访问并补全站内链接
|
||||
linkStr = linkStr.replace('http://', 'https://');
|
||||
if (!a.attr('href').startsWith('https://')) {
|
||||
linkStr = `${baseUrl}${a.attr('href')}`;
|
||||
}
|
||||
return {
|
||||
@@ -58,33 +36,41 @@ const handler = async (ctx) => {
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
cache.tryGet(item.link, async () => {
|
||||
const { data: response } = await got(item.link);
|
||||
const $ = load(response);
|
||||
// 选择类名为“comment-body”的第一个元素
|
||||
item.description = $('.read').first().html();
|
||||
// item.pubDate = $('.arti_update').html() === null ? '' : $('.arti_update').html().slice(5, 15);
|
||||
// item.publisher = $('.arti_publisher').html();
|
||||
item.author = $('.arti_publisher').html();
|
||||
// console.log($('.arti_update').html().slice(5, 15));
|
||||
// 上面每个列表项的每个属性都在此重用,
|
||||
// 并增加了一个新属性“description”
|
||||
try {
|
||||
const { data: response } = await got(item.link);
|
||||
const $ = load(response);
|
||||
|
||||
if (item.link.includes('news.upc.edu.cn')) {
|
||||
item.description = $('.v_news_content').html();
|
||||
item.author = $('.nr-zz h2').html();
|
||||
} else if (item.link.includes('app.upc.edu.cn')) {
|
||||
const scriptContent = $('body script').first().html();
|
||||
let dataObj = null;
|
||||
if (scriptContent) {
|
||||
const match = scriptContent.match(/data\s*:\s*function\s*\(\)\s*{\s*return\s*{[^}]*data\s*:\s*({[\s\S]*?})/);
|
||||
if (match && match[1]) {
|
||||
const dataStr = match[1];
|
||||
dataObj = JSON.parse(dataStr);
|
||||
}
|
||||
}
|
||||
item.description = dataObj.content;
|
||||
item.author = dataObj.author;
|
||||
} else {
|
||||
// 选择类名为“comment-body”的第一个元素
|
||||
item.description = $('.read').first().html() || '无法获取正文内容,请手动访问';
|
||||
item.author = $('.arti_publisher').html();
|
||||
}
|
||||
} catch {
|
||||
item.description = '正文内容获取失败';
|
||||
}
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
/* ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${typeDict[type]}教务处通知-中国石油大学(华东)`,
|
||||
// 源链接
|
||||
link: `https://jwc.upc.edu.cn/tzgg/list.htm`,
|
||||
// 源文章
|
||||
item: items,
|
||||
}; */
|
||||
|
||||
return {
|
||||
// 源标题
|
||||
title: `${typeDict[type]}教务处通知-中国石油大学(华东)`,
|
||||
title: `${$('title').text()}-教务处通知-中国石油大学(华东)`,
|
||||
// 源链接
|
||||
link: `${baseUrl}/${type}/list.htm`,
|
||||
// 源文章
|
||||
@@ -111,7 +97,7 @@ export const route: Route = {
|
||||
target: '/jwc/:type?',
|
||||
},
|
||||
],
|
||||
name: '教务处通知公告',
|
||||
name: '教务处',
|
||||
maintainers: ['sddzhyc'],
|
||||
description: `| 所有通知 | 教学·运行 | 学业·学籍 | 教学·研究 | 课程·教材 | 实践·教学 | 创新·创业 | 语言·文字 | 继续·教育 | 本科·招生 |
|
||||
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||||
|
||||
Reference in New Issue
Block a user