mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-11 23:59:56 +08:00
style: auto format
This commit is contained in:
@@ -1187,7 +1187,7 @@
|
||||
target: (params, url) => {
|
||||
const id = new URL(url).hash.match(/home\?id=(.*)/)[1];
|
||||
return id ? `/ncm/user/playlist/${id}` : '';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '云音乐 - 歌单歌曲',
|
||||
@@ -1196,7 +1196,7 @@
|
||||
target: (params, url) => {
|
||||
const id = new URL(url).hash.match(/playlist\?id=(.*)/)[1];
|
||||
return id ? `/ncm/playlist/${id}` : '';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '云音乐 - 歌手专辑',
|
||||
@@ -1205,7 +1205,7 @@
|
||||
target: (params, url) => {
|
||||
const id = new URL(url).hash.match(/album\?id=(.*)/)[1];
|
||||
return id ? `/ncm/artist/${id}` : '';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '云音乐 - 电台节目',
|
||||
@@ -1214,7 +1214,7 @@
|
||||
target: (params, url) => {
|
||||
const id = new URL(url).hash.match(/djradio\?id=(.*)/)[1];
|
||||
return id ? `/ncm/djradio/${id}` : '';
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -2004,9 +2004,9 @@
|
||||
target: (params) => {
|
||||
const id = params.id.match('(.*).html')[1];
|
||||
return id ? `/tencentvideo/playlist/${id}` : '';
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
],
|
||||
},
|
||||
'javbus.com': {
|
||||
_name: 'JavBus',
|
||||
@@ -2745,7 +2745,6 @@
|
||||
docs: 'https://docs.rsshub.app/social-media.html#fur-affinity',
|
||||
source: '/browse/',
|
||||
target: '/furaffinity/browse',
|
||||
|
||||
},
|
||||
{
|
||||
title: '站点状态',
|
||||
|
||||
12
docs/blog.md
12
docs/blog.md
@@ -118,12 +118,6 @@ pageClass: routes
|
||||
|
||||
<Route author="changlan" example="/blogs/jianning" path="/blogs/jianning" radar="1" rssbud="1"/>
|
||||
|
||||
## 敬维博客
|
||||
|
||||
### 文章
|
||||
|
||||
<Route author="a180285" example="/blogs/jingwei.link" path="/blogs/jingwei.link"/>
|
||||
|
||||
## 劍心.回憶
|
||||
|
||||
### 分类
|
||||
@@ -172,6 +166,12 @@ pageClass: routes
|
||||
|
||||
</Route>
|
||||
|
||||
## 敬维博客
|
||||
|
||||
### 文章
|
||||
|
||||
<Route author="a180285" example="/blogs/jingwei.link" path="/blogs/jingwei.link"/>
|
||||
|
||||
## 每日安全
|
||||
|
||||
### 推送
|
||||
|
||||
@@ -35,18 +35,18 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
|
||||
|
||||
</RouteEn>
|
||||
|
||||
## ASML Holding N.V.
|
||||
|
||||
### Press releases & announcements
|
||||
|
||||
<RouteEn author="nczitzk" example="/asml/press-releases" path="/asml/press-releases"/>
|
||||
|
||||
## American Federation of Labor and Congress of Industrial Organizations
|
||||
|
||||
### Blog
|
||||
|
||||
<RouteEn author="nczitzk" example="/aflcio/blog" path="/aflcio/blog"/>
|
||||
|
||||
## ASML Holding N.V.
|
||||
|
||||
### Press releases & announcements
|
||||
|
||||
<RouteEn author="nczitzk" example="/asml/press-releases" path="/asml/press-releases"/>
|
||||
|
||||
## Bell Labs
|
||||
|
||||
### Event and News
|
||||
|
||||
@@ -10,6 +10,18 @@ pageClass: routes
|
||||
|
||||
<Route author="HenryQW" example="/cfd/div_gbp" path="/cfd/div_gbp" />
|
||||
|
||||
## DT 财经
|
||||
|
||||
### 数据侠专栏
|
||||
|
||||
<Route author="nczitzk" example="/dtcj/datahero" path="/dtcj/datahero/:category?" :paramsDesc="['分类,见下表,默认为全部']">
|
||||
|
||||
| 侠创 | 纽约数据科学学院 | RS 实验所 | 阿里云天池 |
|
||||
| ---- | ---------------- | --------- | ---------- |
|
||||
| 5 | 6 | 9 | 10 |
|
||||
|
||||
</Route>
|
||||
|
||||
## finviz
|
||||
|
||||
### 美股股票新闻
|
||||
@@ -127,18 +139,6 @@ pageClass: routes
|
||||
|
||||
</Route>
|
||||
|
||||
## DT 财经
|
||||
|
||||
### 数据侠专栏
|
||||
|
||||
<Route author="nczitzk" example="/dtcj/datahero" path="/dtcj/datahero/:category?" :paramsDesc="['分类,见下表,默认为全部']">
|
||||
|
||||
| 侠创 | 纽约数据科学学院 | RS 实验所 | 阿里云天池 |
|
||||
| ---- | ---------------- | --------- | ---------- |
|
||||
| 5 | 6 | 9 | 10 |
|
||||
|
||||
</Route>
|
||||
|
||||
## 淘股吧股票论坛
|
||||
|
||||
### 论坛总版
|
||||
|
||||
@@ -126,6 +126,31 @@ pageClass: routes
|
||||
|
||||
见 [#AGE 动漫](/anime.html#age-dong-man)
|
||||
|
||||
## AV01(av01.tv)
|
||||
|
||||
### 演员
|
||||
|
||||
::: tip 提示
|
||||
当没有给定排序类型时,默认为按上传时间排序及 mr
|
||||
|
||||
:::
|
||||
|
||||
<Route author="HXHL" example="/av01/actor/七沢みあ" path="/av01/actor/:name/:type?" :paramsDesc="['女优名,必选-仅限日语,可直接在网站上找到','排序顺序,可选-可以是`mr` `rd` `bw` `tr` `lg`']">
|
||||
|
||||
| 按上传时间排序 | 按上市时间排序 | 按观看次数排序 | 按评分排序 | 按时长排序 |
|
||||
| -------------- | -------------- | -------------- | ---------- | ---------- |
|
||||
| mr | rd | bw | tr | lg |
|
||||
|
||||
</Route>
|
||||
|
||||
### 分类
|
||||
|
||||
<Route author="HXHL" example="/av01/tag/中出し" path="/av01/tag/:name/:type?" :paramsDesc="['分类名,必选-仅限日语,可直接在网站上找到','排序顺序,可选-可以是`mr` `rd` `bw` `tr` `lg`']">
|
||||
|
||||
例如,路由 `/av01/tag/中出し` 应该输出 <https://www.av01.tv/tag/%E4%B8%AD%E5%87%BA%E3%81%97> 的排行榜单
|
||||
|
||||
</Route>
|
||||
|
||||
## Avgle
|
||||
|
||||
### 视频列表
|
||||
@@ -1023,29 +1048,3 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
||||
例如,路由 `/zimuzu/top/week/movie` 应该输出 <http://www.rrys2019.com/html/top/week_movie_list.html> 的排行榜单
|
||||
|
||||
</Route>
|
||||
|
||||
## AV01(av01.tv)
|
||||
|
||||
### 演员
|
||||
|
||||
::: tip 提示
|
||||
当没有给定排序类型时,默认为按上传时间排序及mr
|
||||
|
||||
:::
|
||||
|
||||
<Route author="HXHL" example="/av01/actor/七沢みあ" path="/av01/actor/:name/:type?" :paramsDesc="['女优名,必选-仅限日语,可直接在网站上找到','排序顺序,可选-可以是`mr` `rd` `bw` `tr` `lg`']">
|
||||
|
||||
|
||||
| 按上传时间排序 | 按上市时间排序 | 按观看次数排序| 按评分排序|按时长排序|
|
||||
| -------- | -------- |-------- |-------- |--------|
|
||||
| mr | rd | bw | tr | lg |
|
||||
</Route>
|
||||
|
||||
|
||||
### 分类
|
||||
|
||||
<Route author="HXHL" example="/av01/tag/中出し" path="/av01/tag/:name/:type?" :paramsDesc="['分类名,必选-仅限日语,可直接在网站上找到','排序顺序,可选-可以是`mr` `rd` `bw` `tr` `lg`']">
|
||||
|
||||
例如,路由 `/av01/tag/中出し` 应该输出 <https://www.av01.tv/tag/%E4%B8%AD%E5%87%BA%E3%81%97> 的排行榜单
|
||||
|
||||
</Route>
|
||||
|
||||
@@ -2174,6 +2174,12 @@ column 为 third 时可选的 category:
|
||||
|
||||
</Route>
|
||||
|
||||
## 亿欧网
|
||||
|
||||
### 资讯
|
||||
|
||||
<Route author="WenryXu" example="/iyiou" path="/iyiou"/>
|
||||
|
||||
## 有趣天文奇观
|
||||
|
||||
### 首页
|
||||
@@ -2297,9 +2303,3 @@ QueryString:
|
||||
### 全文
|
||||
|
||||
<Route author="HenryQW" example="/zzz" path="/zzz/index"/>
|
||||
|
||||
## 亿欧网
|
||||
|
||||
### 资讯
|
||||
|
||||
<Route author="WenryXu" example="/iyiou" path="/iyiou"/>
|
||||
|
||||
@@ -329,7 +329,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
||||
类型 type
|
||||
|
||||
| 艺术品 | 手工 | 音乐 | 写作 |
|
||||
| ---- | ---- | ---- | ---- |
|
||||
| ------- | ------ | ----- | ------- |
|
||||
| artwork | crafts | music | writing |
|
||||
|
||||
</Route>
|
||||
|
||||
@@ -642,7 +642,6 @@ router.get('/hit/today/:category', require('./routes/universities/hit/today'));
|
||||
// 哈尔滨工业大学(深圳)
|
||||
router.get('/hitsz/article/:category?', require('./routes/universities/hitsz/article'));
|
||||
|
||||
|
||||
// 哈尔滨工业大学(威海)
|
||||
router.get('/hitwh/today', require('./routes/universities/hitwh/today'));
|
||||
|
||||
@@ -2678,7 +2677,6 @@ router.get('/sustyjs', require('./routes/universities/sustyjs/sustyjs'));
|
||||
router.get('/sustech/newshub-zh', require('./routes/universities/sustech/newshub-zh'));
|
||||
router.get('/sustech/bidding', require('./routes/universities/sustech/bidding'));
|
||||
|
||||
|
||||
// 广州大学
|
||||
router.get('/gzyjs', require('./routes/universities/gzyjs/gzyjs'));
|
||||
|
||||
@@ -3970,5 +3968,4 @@ router.get('/iyiou', require('./routes/iyiou'));
|
||||
// 香港商报
|
||||
router.get('/hkcd/pdf', require('./routes/hkcd/pdf'));
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
||||
@@ -113,9 +113,10 @@ module.exports = async (ctx) => {
|
||||
});
|
||||
}
|
||||
// 作者信息
|
||||
let author = "哔哩哔哩番剧";
|
||||
let author = '哔哩哔哩番剧';
|
||||
if (item.desc.user_profile) {
|
||||
author = item.desc.user_profile.info.uname;}
|
||||
author = item.desc.user_profile.info.uname;
|
||||
}
|
||||
|
||||
return {
|
||||
title: getTitle(data),
|
||||
@@ -125,7 +126,6 @@ module.exports = async (ctx) => {
|
||||
}${getIframe(data)}${getIframe(origin)}${imgHTML ? `<br>${imgHTML}` : ''}${videoHTML ? `<br>${videoHTML}` : ''}`,
|
||||
pubDate: new Date(item.desc.timestamp * 1000).toUTCString(),
|
||||
link: link,
|
||||
|
||||
};
|
||||
}),
|
||||
};
|
||||
|
||||
@@ -25,7 +25,7 @@ module.exports = async (ctx) => {
|
||||
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
xmlMode: true,
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
@@ -41,13 +41,14 @@ module.exports = async (ctx) => {
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
list
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
title: item.find('title').text(),
|
||||
description: item.find('description').text(),
|
||||
link: item.find('link').text(),
|
||||
pubDate: new Date(item.find('pubDate').text()).toUTCString(),
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = async (ctx) => {
|
||||
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
xmlMode: true,
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
@@ -40,13 +40,14 @@ module.exports = async (ctx) => {
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
list
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
title: item.find('title').text(),
|
||||
description: item.find('description').text(),
|
||||
link: item.find('link').text(),
|
||||
pubDate: new Date(item.find('pubDate').text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
|
||||
@@ -25,8 +25,7 @@ module.exports = async (ctx) => {
|
||||
// 判断传入的参数type,分别为:artwork、crafts、music、writing
|
||||
if (type === 'artwork') {
|
||||
data = data.artwork;
|
||||
}
|
||||
else if (type === 'crafts') {
|
||||
} else if (type === 'crafts') {
|
||||
data = data.crafts;
|
||||
} else if (type === 'music') {
|
||||
data = data.music;
|
||||
|
||||
@@ -33,13 +33,14 @@ module.exports = async (ctx) => {
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
list
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
title: item.find('title').text(),
|
||||
description: item.find('description').text(),
|
||||
link: item.find('link').text(),
|
||||
pubDate: new Date(item.find('pubDate').text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = async (ctx) => {
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
xmlMode: true,
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
@@ -40,13 +40,14 @@ module.exports = async (ctx) => {
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
list
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
title: item.find('title').text(),
|
||||
description: item.find('description').text(),
|
||||
link: item.find('link').text(),
|
||||
pubDate: new Date(item.find('pubDate').text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = async (ctx) => {
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
xmlMode: true,
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
@@ -40,13 +40,14 @@ module.exports = async (ctx) => {
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
list
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
title: item.find('title').text(),
|
||||
description: item.find('description').text(),
|
||||
link: item.find('link').text(),
|
||||
pubDate: new Date(item.find('pubDate').text()).toUTCString(),
|
||||
// 由于源API未提供作者信息,故无author
|
||||
};
|
||||
})
|
||||
|
||||
@@ -14,10 +14,10 @@ module.exports = async (ctx) => {
|
||||
const status = data.online;
|
||||
|
||||
let description = '';
|
||||
if (Object.keys(data)[0] === "online") {
|
||||
if (Object.keys(data)[0] === 'online') {
|
||||
description = `Status: ${Object.keys(data)[0]} <br> Guests: ${status.guests} <br>Registered: ${status.registered} <br> Other: ${status.other} <br>Total: ${status.total} <br> Fa Server Time: ${data.fa_server_time}`;
|
||||
} else {
|
||||
description = "offline";
|
||||
description = 'offline';
|
||||
}
|
||||
const item = [];
|
||||
item.push({
|
||||
@@ -26,7 +26,6 @@ module.exports = async (ctx) => {
|
||||
link: `https://www.furaffinity.net/`,
|
||||
});
|
||||
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Fur Affinity Status`,
|
||||
@@ -37,5 +36,4 @@ module.exports = async (ctx) => {
|
||||
|
||||
item: item,
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -48,20 +48,18 @@ module.exports = async (ctx) => {
|
||||
const favorites_food = artist_information['Favorite Food'];
|
||||
|
||||
const contact_information = data.contact_information;
|
||||
let contact_result = "null";
|
||||
let contact_result = 'null';
|
||||
|
||||
// 对一个或多个用户联系方式进行遍历
|
||||
if (contact_information !== "null") {
|
||||
contact_result = "";
|
||||
if (contact_information !== 'null') {
|
||||
contact_result = '';
|
||||
for (let i = 0; i < contact_information.length; i++) {
|
||||
for (const j in contact_information[i]) {
|
||||
if (j === "title") {
|
||||
if (j === 'title') {
|
||||
contact_result += `Title: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
else if (j === "name") {
|
||||
} else if (j === 'name') {
|
||||
contact_result += `Name: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
else if (j === "link") {
|
||||
} else if (j === 'link') {
|
||||
contact_result += `Link: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
}
|
||||
@@ -85,7 +83,6 @@ module.exports = async (ctx) => {
|
||||
link: `https://www.furaffinity.net/user/${username}/`,
|
||||
});
|
||||
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Userpage of ${data.name}`,
|
||||
@@ -96,5 +93,4 @@ module.exports = async (ctx) => {
|
||||
|
||||
item: item,
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -3,23 +3,23 @@ const cheerio = require('cheerio');
|
||||
const iconv = require('iconv-lite');
|
||||
|
||||
const encodeMap = {
|
||||
"$$$": "7",
|
||||
"$$$$": "f",
|
||||
"$$$_": "e",
|
||||
"$$_": "6",
|
||||
"$$_$": "d",
|
||||
"$$__": "c",
|
||||
"$_$": "5",
|
||||
"$_$$": "b",
|
||||
"$_$_": "a",
|
||||
"$__": "4",
|
||||
"$__$": "9",
|
||||
"$___": "8",
|
||||
"_": "u",
|
||||
"_$$": "3",
|
||||
"_$_": "2",
|
||||
"__$": "1",
|
||||
"___": "0",
|
||||
$$$: '7',
|
||||
$$$$: 'f',
|
||||
$$$_: 'e',
|
||||
$$_: '6',
|
||||
$$_$: 'd',
|
||||
$$__: 'c',
|
||||
$_$: '5',
|
||||
$_$$: 'b',
|
||||
$_$_: 'a',
|
||||
$__: '4',
|
||||
$__$: '9',
|
||||
$___: '8',
|
||||
_: 'u',
|
||||
_$$: '3',
|
||||
_$_: '2',
|
||||
__$: '1',
|
||||
___: '0',
|
||||
};
|
||||
const tokenPattern = /[A-Z]\.([$_]+)|(\/?\\+)/g;
|
||||
const contentPattern = /\\74\\160\\76[0-9a-fu/\\]+?\\74\/\\160\\76/g;
|
||||
@@ -55,20 +55,22 @@ module.exports = async (ctx) => {
|
||||
if (encoded) {
|
||||
// 提取编码后的正文内容进行复原
|
||||
const rawText = html;
|
||||
let rawContent = "";
|
||||
let rawContent = '';
|
||||
for (const match of rawText.matchAll(tokenPattern)) {
|
||||
if (match[1] in encodeMap) {
|
||||
rawContent += encodeMap[match[1]];
|
||||
}
|
||||
if (match[2]) {
|
||||
rawContent += match[2].replace("\\\\\\\\", "\\").replace("\\\\", "\\");
|
||||
rawContent += match[2].replace('\\\\\\\\', '\\').replace('\\\\', '\\');
|
||||
}
|
||||
}
|
||||
const decodedContentArr = [];
|
||||
for (const contentPar of rawContent.matchAll(contentPattern)) {
|
||||
const decodedStr = contentPar[0].replace(regex16, function (match, grp) {
|
||||
const decodedStr = contentPar[0]
|
||||
.replace(regex16, function (match, grp) {
|
||||
return String.fromCharCode(parseInt(grp, 16));
|
||||
}).replace(regex8, function (match, grp) {
|
||||
})
|
||||
.replace(regex8, function (match, grp) {
|
||||
return String.fromCharCode(parseInt(grp, 8));
|
||||
});
|
||||
decodedContentArr.push(decodedStr);
|
||||
|
||||
@@ -9,7 +9,7 @@ let token = null;
|
||||
const authorizationInfo = {
|
||||
client_id: 'MOBrBDS8blbauoSck0ZfDbtuzpyT',
|
||||
client_secret: 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj',
|
||||
hash_secret: '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c'
|
||||
hash_secret: '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c',
|
||||
};
|
||||
|
||||
async function refreshToken() {
|
||||
|
||||
Reference in New Issue
Block a user