Merge branch 'master' into master

This commit is contained in:
小虎故洞
2021-02-09 17:25:06 +08:00
committed by GitHub
492 changed files with 21486 additions and 3543 deletions
+4 -2
View File
@@ -7,7 +7,8 @@
},
"env": {
"node": true,
"es6": true
"es6": true,
"browser": true
},
"rules": {
"no-console": 2,
@@ -52,6 +53,7 @@
"prettier/prettier": 0,
"no-await-in-loop": 2,
"require-atomic-updates": 0,
"no-prototype-builtins": 0
"no-prototype-builtins": 0,
"no-new-func": 2
}
}
+1
View File
@@ -1,3 +1,4 @@
# These are supported funding model platforms
patreon: DIYgod
custom: ["https://afdian.net/@diygod", "https://diygod.me/images/zfb.jpg", "https://diygod.me/images/wx.jpg"]
+19 -4
View File
@@ -7,15 +7,30 @@ about: 早起的小可爱有虫抓
请确保已阅读 [文档](https://docs.rsshub.app) 内相关部分,并按照模版提供信息,否则 issue 将被立即关闭。
由于部分源网站反爬缘故,演示地址一些 rss 会返回 status code 403,该问题不是 RSSHub 所致,请勿提交 issue。
请填写内容进code block区域,一行一个。
如果没有符合条件的内容,请填写`NOTEXIST`
-->
- 完整路由地址,包含所有必选与可选参数
#### 路由地址(不包含参数)
- 预期是什么
```routes
```
- 实际发生了什么
#### 完整路由地址,包含所有必选与可选参数
- 部署相关信息
```fullroutes
```
#### 相关文档地址
- https://docs.rsshub.app/...
#### 预期是什么
#### 实际发生了什么
#### 部署相关信息
<!--
如果是演示地址(rsshub.app)有此问题请删除此部分。
+65 -2
View File
@@ -1,3 +1,11 @@
<!--
请不要删除, 自行修改已有结构/注释, 这会导致自动检测失败;不符合要求的部分留空即可
Do not remove existing titles or structures: it breaks CI
-->
## 该 PR 相关 Issue / Involved issue
Close #
@@ -5,9 +13,64 @@ Close #
## 完整路由地址 / Example for the proposed route(s)
<!--
为方便测试,请附上完整路由地址,包括所有必选与可选参数,否则将导致 PR 被关闭。
To simplify the testing workflow, please include the complete route, with all required and optional parameters, otherwise your pull request will be closed.
请按照如下格式填写`routes`区域: 我们将会根据你的参数展开自动测试. 一行一个路由
Please fill the `routes` block follow the format below, as we will perform automatic test based on this information. one route per line.
```
/some/route
/some/other/route
```
如果与路由无关, 请写`NOROUTE`
-->
<!-- 在下方填写, 请不要删除`routes`标识: CI验证需要. FILL BELOW and keep `routes` keyword -->
```routes
```
## 新RSS检查列表 / New RSS Script Checklist
<!--
Please go over the checklist below before PR: this improve your PR pass rate.
Reference: https://docs.rsshub.app/en/joinus/
请在提交PR前检查以下事项: 这可以大大提升通过率
这些就是我们在审核时主要关注的事项, 敬请留意
参考: https://docs.rsshub.app/joinus
-->
- [ ] 这个PR中包含了新的路由吗? Does this PR add new route?
- 如果有, 请完成检查列表. If yes, please finish the check list
- **如果你的PR符合下方某个事项, 也请注明. If any of the checklist item meets your PR, please fill it out.**
- [x] <- 这样打勾
- [ ] 是否提供了文档? Documentation provided?
- [ ] 是否提供了英文文档? EN Documentation provided?
- [ ] 是否支持全文获取? Is this RSS Script support fulltext?
- [ ] 如果全文获取中需要访问文章链接, 是否使用了缓存? If fulltext requires to fetch detail pages, is cache used in the process?
- [缓存说明](https://docs.rsshub.app/joinus/#ti-jiao-xin-de-rsshub-gui-ze-bian-xie-jiao-ben-shi-yong-huan-cun) | [How to use cache](https://docs.rsshub.app/joinus/#ti-jiao-xin-de-rsshub-gui-ze-bian-xie-jiao-ben-shi-yong-huan-cun)
- [ ] 目标是否有明显的反爬/频率限制? Is there any sign of anti-bot or rate limit?
- [ ] 如果有, 是否有对应的措施? (延长缓存时间, 写文档说明, etc.) If yes, do your code reflect this sign? (e.g. write documentations, use long cache time)
- [ ] 是否引入的新的包? Any new package introduced?
- 如果有, 请说明原因. If yes, please state your reason
- [ ] 是否使用了`Puppeteer`? Make use of `Puppeteer`?
- 如果有, 请说明原因. If yes, please state your reason
## 说明 / Note
<!--
Please state your reason/note here
请在这里描述你的原因或留下其他相关的说明
-->
+1
View File
@@ -16,6 +16,7 @@ on:
jobs:
test:
if: github.repository == "DIYgod/RSSHub"
runs-on: ubuntu-latest
steps:
-
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12'
node-version: '14'
- run: yarn install
- run: npm run format
- name: Commit files
+2 -3
View File
@@ -8,14 +8,13 @@ on:
jobs:
build:
if: github.repository == "DIYgod/RSSHub"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12'
node-version: '14'
registry-url: 'https://registry.npmjs.org'
- name: Release
run: |
@@ -0,0 +1,47 @@
name: PR route test
# https://github.com/actions/first-interaction/issues/10#issuecomment-670968624
# https://github.com/actions/first-interaction/issues/10#issuecomment-752360668
# Reopen Included
on:
- pull_request_target
jobs:
testRoute:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch affected routes
id: fetchRoute
uses: actions/github-script@v3
with:
# by default, JSON format returned
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const body = context.payload.pull_request.body
const number = context.payload.pull_request.number
const script = require(`${process.env.GITHUB_WORKSPACE}/scripts/workflow/test-route/identify.js`)
return await script({github, context, core}, body, number)
- name: Waiting for 200 from the Vercel Preview
if: (env.TEST_CONTINUE)
uses: patrickedqvist/wait-for-vercel-preview@master
id: waitFor200
with:
token: ${{ secrets.GITHUB_TOKEN }}
max_timeout: 300
- name: Generate feedback
if: (env.TEST_CONTINUE)
uses: actions/github-script@v3
env:
TEST_BASEURL: ${{steps.waitFor200.outputs.url}}
TEST_ROUTES: ${{ steps.fetchRoute.outputs.result }}
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const link = process.env.TEST_BASEURL
const routes = JSON.parse(process.env.TEST_ROUTES)
const number = context.payload.pull_request.number
core.info(`${link}, ${routes}, ${number}`)
const script = require(`${process.env.GITHUB_WORKSPACE}/scripts/workflow/test-route/test.js`)
return await script({github, context, core}, link, routes, number)
+3 -3
View File
@@ -6,7 +6,7 @@ on:
jobs:
rebase:
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && github.event.comment.author_association == 'COLLABORATOR'
runs-on: ubuntu-latest
steps:
-
@@ -16,6 +16,6 @@ jobs:
fetch-depth: 0
-
name: Automatic Rebase
uses: cirrus-actions/rebase@1.3.1
uses: cirrus-actions/rebase@1.4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.TOKEN_SUPER }}
+2 -3
View File
@@ -4,8 +4,7 @@ on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-16.04
runs-on: ubuntu-latest
services:
redis:
@@ -16,7 +15,7 @@ jobs:
strategy:
matrix:
node-version: [10.x, 12.x]
node-version: [10.x, 12.x, 14.x]
steps:
- uses: actions/checkout@v2
+5 -4
View File
@@ -11,7 +11,7 @@
## Introduction
RSSHub is an open source, easy to use, and extensible RSS feed aggregator, it's capable of generating RSS feeds from pretty much everything.
RSSHub is an open source, easy to use, and extensible RSS feed generator. It's capable of generating RSS feeds from pretty much everything.
RSSHub delivers millions of contents aggregated from all kinds of sources, our vibrant open source community is ensuring the deliver of RSSHub's new routes, new features and bug fixes.
@@ -32,7 +32,7 @@ RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以
### Special Sponsors
<div>
<a href="https://rixcloud.app/rsshub" target="_blank"><img height="60px" src="https://i.imgur.com/TrgP3S1.png"></a>&nbsp;&nbsp;&nbsp;<a href="https://km.bytell.cn/wxcollect" target="_blank"><img height="60px" src="https://i.imgur.com/7sNM1yi.png"></a>
<a href="https://sa.net/" target="_blank"><img height="60px" src="https://i.imgur.com/3rM8nWI.png"></a>&nbsp;&nbsp;&nbsp;<a href="https://km.bytell.cn/wxcollect" target="_blank"><img height="60px" src="https://i.imgur.com/7sNM1yi.png"></a>
</div>
### Sponsors
@@ -55,6 +55,7 @@ Logo designer [sheldonrrr](https://dribbble.com/sheldonrrr)
- [RSSHub Radar](https://github.com/DIYgod/RSSHub-Radar) | 一个可以帮助你快速发现和订阅当前网站 RSS 和 RSSHub 的浏览器扩展
- [RSSBud](https://github.com/Cay-Zhang/RSSBud) ([TestFlight 公测](https://testflight.apple.com/join/rjCVzzHP)) | iOS 平台的 RSSHub Radar,专为移动生态优化
- [RSSAid](https://github.com/lt94/RSSAid) | 基于 Flutter 构建的 Android 平台的 RSSHub Radar
## Join Us
@@ -92,8 +93,8 @@ Recurring donors will be rewarded via express issue response, or even have your
We accept donations via the following ways:
- [WeChat Pay](https://i.loli.net/2019/03/23/5c950ebbc373e.png)
- [Alipay](https://i.loli.net/2019/03/23/5c950ebbc980e.png)
- [WeChat Pay](https://diygod.me/images/wx.jpg)
- [Alipay](https://diygod.me/images/zfb.jpg)
- [Paypal](https://www.paypal.me/DIYgod)
## Author
+9
View File
@@ -0,0 +1,9 @@
# Security Policy
## Supported Version
Latest commits in master branch
## Reporting a Vulnerability
If you believe you have found a security vulnerability in RSSHub, please let us know right away, you can email us at [i@diygod.me](mailto:i@diygod.me). We will investigate all legitimate reports and do our best to quickly fix the problem.
+291 -9
View File
@@ -96,7 +96,10 @@
docs: 'https://docs.rsshub.app/social-media.html#wei-bo',
source: ['/u/:id', '/:id'],
target: (params, url, document) => {
const uid = document && document.documentElement.innerHTML.match(/\$CONFIG\['oid']='(\d+)'/)[1];
let uid = document?.documentElement.innerHTML.match(/\$CONFIG\['oid']='(\d+)'/)?.[1];
if (!uid && !isNaN(params.id)) {
uid = params.id;
}
return uid ? `/weibo/user/${uid}` : '';
},
},
@@ -120,6 +123,17 @@
},
],
},
'weibo.cn': {
_name: '微博',
m: [
{
title: '博主',
docs: 'https://docs.rsshub.app/social-media.html#wei-bo',
source: ['/u/:uid', '/profile/:uid'],
target: '/weibo/user/:uid',
},
],
},
'pixiv.net': {
_name: 'Pixiv',
www: [
@@ -205,7 +219,7 @@
],
},
'youtube.com': {
_name: 'Youtube',
_name: 'YouTube',
www: [
{
title: '用户',
@@ -248,6 +262,12 @@
source: '/trending',
target: '/github/trending/:since',
},
{
title: 'Trending',
docs: 'https://docs.rsshub.app/programming.html#github',
source: '/topics',
target: '/github/topics/:name/:qs?',
},
{
title: '仓库 Issue',
docs: 'https://docs.rsshub.app/programming.html#github',
@@ -322,9 +342,10 @@
{
title: '用户文章',
docs: 'https://docs.rsshub.app/social-media.html#zhi-hu',
source: '/people/:id/posts',
target: '/zhihu/people/posts/:id',
source: '/:usertype/:id/posts',
target: '/zhihu/posts/:usertype/:id',
},
{
title: '热榜',
docs: 'https://docs.rsshub.app/social-media.html#zhi-hu',
@@ -427,7 +448,7 @@
},
'ximalaya.com': {
_name: '喜马拉雅',
www: [
'.': [
{
title: '专辑',
docs: 'https://docs.rsshub.app/multimedia.html#xi-ma-la-ya',
@@ -460,15 +481,45 @@
},
],
},
'juejin.im': {
'juejin.cn': {
_name: '掘金',
'.': [
{
title: '标签',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-biao-qian',
source: '/tag/:tag',
target: '/juejin/tag/:tag',
},
{
title: '小册',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-xiao-ce',
source: '/books',
target: '/juejin/books',
},
{
title: '沸点',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-fei-dian',
source: ['/pins/:type', '/pins/topic/:type'],
target: (params) => (params.type !== 'recommended' ? '/juejin/pins/:type' : '/juejin/pins'),
},
{
title: '专栏',
docs: 'https://docs.rsshub.app/programming.html#jue-jin',
source: '/user/:id/posts',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-zhuan-lan',
source: ['/user/:id', '/user/:id/posts'],
target: '/juejin/posts/:id',
},
{
title: '收藏集',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-shou-cang-ji',
source: ['/user/:id', '/user/:id/collections'],
target: '/juejin/collections/:id',
},
{
title: '单个收藏夹',
docs: 'https://docs.rsshub.app/programming.html#jue-jin-dan-ge-shou-cang-jia',
source: '/collection/:collectionId',
target: '/juejin/collection/:collectionId',
},
],
},
'anime1.me': {
@@ -1710,7 +1761,7 @@
},
'zhaishuyuan.com': {
_name: '斋书苑',
www: [
'.': [
{
title: '最新章节',
docs: 'https://docs.rsshub.app/reading.html#zhai-shu-yuan',
@@ -2005,6 +2056,82 @@
},
],
},
'141jav.com': {
_name: '141JAV BT',
'.': [
{
title: '今日种子',
docs: 'https://docs.rsshub.app/multimedia.html#141jav',
source: '/',
target: (params, url, document) => {
const today = document.querySelector('div.card.mb-1.card-overview').getAttribute('data-date').replace(/-/g, '');
return `/141jav/day/${today}`;
},
},
{
title: '今日演员',
docs: 'https://docs.rsshub.app/multimedia.html#141jav',
source: '/',
target: (params, url, document) => {
const star = document.querySelector('div.card-content > div > a').getAttribute('href');
return `/141jav${star}`;
},
},
{
title: '页面种子',
docs: 'https://docs.rsshub.app/multimedia.html#141jav',
source: ['/:type', '/:type/:key', '/:type/:key/:morekey'],
target: (params, url, document) => {
const itype = params.morekey === undefined ? `${params.type}` : params.type === 'tag' ? 'tag' : 'day';
let ikey = `${itype === 'day' ? params.type : ''}${params.key || ''}${itype === 'tag' && params.morekey !== undefined ? '%2F' : ''}${params.morekey || ''}`;
if (ikey === '' && itype === 'tag') {
ikey = document.querySelector('div.thumbnail.is-inline > a').getAttribute('href').replace('/tag/', '').replace('/', '%2F');
} else if (ikey === '' && itype === 'actress') {
ikey = document.querySelector('div.card > a').getAttribute('href').replace('/actress/', '');
}
return `/141jav/${itype}/${ikey}`;
},
},
],
},
'141ppv.com': {
_name: '141ppv BT',
'.': [
{
title: '今日种子',
docs: 'https://docs.rsshub.app/multimedia.html#141pvp',
source: '/',
target: (params, url, document) => {
const today = document.querySelector('div.card.mb-1.card-overview').getAttribute('data-date').replace(/-/g, '');
return `/141ppv/day/${today}`;
},
},
{
title: '今日演员',
docs: 'https://docs.rsshub.app/multimedia.html#141ppv',
source: '/',
target: (params, url, document) => {
const star = document.querySelector('div.card-content > div > a').getAttribute('href');
return `/141ppv${star}`;
},
},
{
title: '页面种子',
docs: 'https://docs.rsshub.app/multimedia.html#141ppv',
source: ['/:type', '/:type/:key', '/:type/:key/:morekey'],
target: (params, url, document) => {
const itype = params.morekey === undefined ? `${params.type}` : params.type === 'tag' ? 'tag' : 'day';
let ikey = `${itype === 'day' ? params.type : ''}${params.key || ''}${itype === 'tag' && params.morekey !== undefined ? '%2F' : ''}${params.morekey || ''}`;
if (ikey === '' && itype === 'tag') {
ikey = document.querySelector('div.thumbnail.is-inline > a').getAttribute('href').replace('/tag/', '').replace('/', '%2F');
} else if (ikey === '' && itype === 'actress') {
ikey = document.querySelector('div.card > a').getAttribute('href').replace('/actress/', '');
}
return `/141ppv/${itype}/${ikey}`;
},
},
],
},
'sexinsex.net': {
_name: 'sexinsex',
'.': [
@@ -2052,6 +2179,12 @@
source: '/news',
target: '/umass/amherst/ecenews',
},
{
title: 'ECE Seminar',
docs: 'http://docs.rsshub.app/en/university.html#umass-amherst',
source: '/seminars',
target: '/umass/amherst/eceseminar',
},
],
'www.cics': [
{
@@ -2366,6 +2499,50 @@
},
],
},
'matataki.io': {
_name: 'matataki',
www: [
{
title: '最热作品',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: '/article/',
target: '/matataki/posts/hot',
},
{
title: '最新作品',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: '/article/latest',
target: '/matataki/posts/latest',
},
{
title: '作者创作',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: '/user/:uid',
target: (params) => `/matataki/users/${params.uid}/posts`,
},
{
title: 'Fan票关联作品',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: ['/token/:tokenId', '/token/:tokenId/circle'],
target: (params) => `/matataki/tokens/${params.tokenId}/posts`,
},
{
title: '标签关联作品',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: ['/tag/:tagId'],
target: (params, url) => {
const tagName = new URL(url).searchParams.get('name');
return `/matataki/tags/${params.tagId}/${tagName}/posts`;
},
},
{
title: '收藏夹',
docs: 'https://docs.rsshub.app/new-media.html#matataki',
source: '/user/:uid/favlist/:fid',
target: (params) => `/matataki/users/${params.uid}/favorites/${params.fid}/posts`,
},
],
},
'eventernote.com': {
_name: 'Eventernote',
www: [
@@ -2377,4 +2554,109 @@
},
],
},
'instagram.com': {
_name: 'Instagram',
www: [
{
title: '用户',
docs: 'https://docs.rsshub.app/social-media.html#instagram',
source: '/:id',
target: (params) => {
if (params.id !== 'explore' && params.id !== 'developer') {
return '/instagram/user/:id';
}
},
},
],
},
'huya.com': {
_name: '虎牙直播',
'.': [
{
title: '直播间开播',
docs: 'https://docs.rsshub.app/live.html#hu-ya-zhi-bo-zhi-bo-jian-kai-bo',
source: '/:id',
target: '/huya/live/:id',
},
],
},
'craigslist.org': {
_name: 'Craigslist',
'.': [
{
title: '商品搜索列表',
docs: 'https://docs.rsshub.app/shopping.html#craigslist',
},
],
},
'saraba1st.com': {
_name: 'Saraba1st',
bbs: [
{
title: '帖子',
docs: 'https://docs.rsshub.app/bbs.html#saraba1st',
source: '/2b/:id',
target: (params) => {
const id = params.id.includes('thread') ? params.id.split('-')[1] : '';
return id ? `/saraba1st/thread/${id}` : '';
},
},
],
},
'scboy.com': {
_name: 'scboy 论坛',
www: [
{
title: '帖子',
docs: 'https://docs.rsshub.app/bbs.html#scboy',
source: '',
target: (params, url) => {
const id = url.includes('thread') ? url.split('-')[1].split('.')[0] : '';
return id ? `/scboy/thread/${id}` : '';
},
},
],
},
'cqut.edu.cn': {
_name: '重庆理工大学',
tz: [
{
title: '通知',
docs: 'https://docs.rsshub.app/university.html#chong-qing-li-gong-da-xue',
source: '/*',
},
],
lib: [
{
title: '图书馆通知',
docs: 'https://docs.rsshub.app/university.html#chong-qing-li-gong-da-xue',
source: '/*',
},
],
},
'cqwu.net': {
_name: '重庆文理学院',
www: [
{
title: '通知',
docs: 'https://docs.rsshub.app/university.html#chong-qing-wen-li-xue-yuan',
source: '/:type',
target: (params) => {
if (params.type === 'channel_7721.html') {
return '/cqwu/news/notify';
}
},
},
{
title: '学术活动',
docs: 'https://docs.rsshub.app/university.html#chong-qing-wen-li-xue-yuan',
source: '/:type',
target: (params) => {
if (params.type === 'channel_7722.html') {
return '/cqwu/news/academiceve';
}
},
},
],
},
});
+2 -1
View File
@@ -16,7 +16,8 @@ services:
- browserless
browserless:
image: browserless/chrome
# See issue 6680
image: browserless/chrome:1.43-chrome-stable
restart: always
redis:
+11 -13
View File
@@ -1,13 +1,13 @@
<template>
<div class="routeBlock" :id="path">
<p class="badge">
<Badge text="支持 BT" type="tip" vertical="middle" v-if="supportBT"/> <Badge text="支持播客" type="tip" vertical="middle" v-if="supportPodcast"/> <Badge text="支持 Scihub" type="tip" vertical="middle" v-if="supportScihub"/> <a target="_blank" href="/faq.html" v-if="anticrawler"><Badge text="反爬严格" vertical="middle" type="warn"/></a> <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar" v-if="radar"><Badge text="支持浏览器扩展" vertical="middle" type="tip"/></a> <a target="_blank" href="https://github.com/Cay-Zhang/RSSBud" v-if="rssbud"><Badge text="支持 RSSBud" vertical="middle" type="tip"/></a>
<Badge text="支持 BT" type="tip" vertical="middle" v-if="supportBT"/> <Badge text="支持播客" type="tip" vertical="middle" v-if="supportPodcast"/> <Badge text="支持 Scihub" type="tip" vertical="middle" v-if="supportScihub"/> <a target="_blank" href="/faq.html" v-if="anticrawler"><Badge text="反爬严格" vertical="middle" type="warn"/></a> <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar" v-if="radar"><Badge text="支持浏览器扩展" vertical="middle" type="tip"/></a> <a target="_blank" href="https://github.com/Cay-Zhang/RSSBud" v-if="rssbud"><Badge text="支持 RSSBud" vertical="middle" type="tip"/></a> <a target="_blank" href="https://docs.rsshub.app/install/" v-if="selfhost"><Badge text="仅支持自建" vertical="middle" type="warn"/></a>
</p>
<p class="author">
作者: <a v-for="uid in author.split(' ')" :href="`https://github.com/${uid}`" target="_blank"> @{{ uid }} </a>
</p>
<p class="example">
举例: <a :href="'https://rsshub.app'+ example " target="_blank">https://rsshub.app{{example}}</a>
<span>举例:</span> <a :href="demoUrl" target="_blank">{{demoUrl}}</a> <img :src="'https://img.shields.io/website?label=status&style=flat-square&url=' + encodeURIComponent(encodeURI(demoUrl))">
</p>
<p class="path">
路由: <code>{{ path }}</code>
@@ -64,6 +64,10 @@ export default {
type: String,
default: null
},
selfhost: {
type: String,
default: null
},
},
methods: {
renderMarkdown(item) {
@@ -72,17 +76,11 @@ export default {
});
return md.render(item);
},
},
computed: {
demoUrl: function () {
return 'https://rsshub.app'+ this.example
}
}
}
</script>
<style>
li.params p {
display: inline;
}
.routeBlock {
margin: 1rem 0 2rem;
}
#app .page .badge.tip {
background-color: #FFB74D;
}
</style>
+11 -13
View File
@@ -1,13 +1,13 @@
<template>
<div class="routeBlock" :id="path">
<p class="badge">
<Badge text="support BT" type="tip" vertical="middle" v-if="supportBT"/> <Badge text="support podcast" type="tip" vertical="middle" v-if="supportPodcast"/> <a target="_blank" href="/en/faq.html" v-if="anticrawler"><Badge text="strict anti-crawler policy" vertical="middle" type="warn"/></a> <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar" v-if="radar"><Badge text="support browser extension" vertical="middle" type="tip"/></a> <a target="_blank" href="https://github.com/Cay-Zhang/RSSBud" v-if="rssbud"><Badge text="support rssbud" vertical="middle" type="tip"/></a>
<Badge text="support BT" type="tip" vertical="middle" v-if="supportBT"/> <Badge text="support podcast" type="tip" vertical="middle" v-if="supportPodcast"/> <a target="_blank" href="/en/faq.html" v-if="anticrawler"><Badge text="strict anti-crawler policy" vertical="middle" type="warn"/></a> <a target="_blank" href="https://github.com/DIYgod/RSSHub-Radar" v-if="radar"><Badge text="support browser extension" vertical="middle" type="tip"/></a> <a target="_blank" href="https://github.com/Cay-Zhang/RSSBud" v-if="rssbud"><Badge text="support rssbud" vertical="middle" type="tip"/></a> <a target="_blank" href="https://docs.rsshub.app/en/install/" v-if="selfhost"><Badge text="self-host only" vertical="middle" type="warn"/></a>
</p>
<p class="author">
Author: <a v-for="uid in author.split(' ')" :href="`https://github.com/${uid}`" target="_blank"> @{{ uid }} </a>
</p>
<p class="example">
Example: <a :href="'https://rsshub.app'+ example " target="_blank">https://rsshub.app{{example}}</a>
<span>Example:</span> <a :href="demoUrl" target="_blank">{{demoUrl}}</a> <img :src="'https://img.shields.io/website?label=status&style=flat-square&url=' + encodeURIComponent(encodeURI(demoUrl))">
</p>
<p class="path">
Route: <code>{{ path }}</code>
@@ -60,6 +60,10 @@ export default {
type: String,
default: null
},
selfhost: {
type: String,
default: null
},
},
methods: {
renderMarkdown(item) {
@@ -68,17 +72,11 @@ export default {
});
return md.render(item);
},
},
computed: {
demoUrl: function () {
return 'https://rsshub.app'+ this.example
}
}
}
</script>
<style>
li.params p {
display: inline;
}
.routeBlock {
margin: 1rem 0 2rem;
}
#app .page .badge.tip {
background-color: #FFB74D;
}
</style>
Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

+25
View File
@@ -42,3 +42,28 @@ h3 {
.sidebar-sub-headers a.sidebar-link {
color: #F5712C;
}
// for Route and RouteEn components
li.params p {
display: inline;
}
.routeBlock {
margin: 1rem 0 2rem;
}
.routeBlock .example > * {
vertical-align: middle;
}
.routeBlock .example img {
margin-left: 5px;
}
#app .page .badge.tip {
background-color: #FFB74D;
}
#app .page .badge.warn {
background-color: #ff774d;
}
+1 -1
View File
@@ -25,7 +25,7 @@ RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以
### Special Sponsors
<a style="margin-right: 10px;" href="https://rixcloud.app/rsshub" target="_blank"><img alt="rixCloud" height="60px" src="https://cn-south-17-rsshub-16857749.oss.dogecdn.com/rixcloud.png"></a><a style="margin-right: 10px;" href="https://km.bytell.cn/wxcollect" target="_blank"><img alt="知拾收藏" height="60px" src="https://cn-south-17-rsshub-16857749.oss.dogecdn.com/bytell.png"></a>
<a style="margin-right: 10px;" href="https://sa.net/" target="_blank"><img alt="Riven Cloud" height="60px" src="https://cn-south-17-rsshub-16857749.oss.dogecdn.com/rivencloudd.png"></a><a style="margin-right: 10px;" href="https://km.bytell.cn/wxcollect" target="_blank"><img alt="知拾收藏" height="60px" src="https://cn-south-17-rsshub-16857749.oss.dogecdn.com/bytell.png"></a>
### Sponsors
+5 -1
View File
@@ -288,7 +288,7 @@ pageClass: routes
### 风之动漫
<Route author="geeeeoff" path="/fzdm/manhua/:id" example="/fzdm/manhua/39" :paramsDesc="['漫画ID']"/>
<Route author="geeeeoff zytomorrow" path="/fzdm/manhua/:id/:nums?" example="/fzdm/manhua/39/2" :paramsDesc="['漫画ID', '最新的n话, 默认为最新1话']" anticrawler="1"/>
## 海猫吧
@@ -332,6 +332,10 @@ pageClass: routes
<Route author="KenMizz" example="/ssmh" path="/ssmh/" />
### 分类更新
<Route author="Gandum2077" example="/ssmh/category/6" path="/ssmh/category/:cid" :paramsDesc="['分类的id,即对应 URL 中的数字']" />
## 鼠绘漫画
### 鼠绘漫画
+224 -12
View File
@@ -108,6 +108,12 @@ pageClass: routes
| ---- | ------------ | ---- | ----- |
| jobs | translations | qa | links |
## LowEndTalk
### Discussion
<Route author="nczitzk" example="/lowendtalk/discussion/168480" path="/lowendtalk/discussion/:id?" :paramsDesc="['讨论 id']"/>
## MCBBS
### 版块
@@ -168,12 +174,24 @@ pageClass: routes
### 帖子
<Route author="zengxs" example="/saraba1st/thread/1789863" path="/saraba1st/thread/:tid" :paramsDesc="['帖子 id']">
<Route author="zengxs" example="/saraba1st/thread/1789863" path="/saraba1st/thread/:tid" :paramsDesc="['帖子 id']" radar="1">
帖子网址如果为 <https://bbs.saraba1st.com/2b/thread-1789863-1-1.html> 那么帖子 id 就是 `1789863`。
</Route>
## SCBOY 论坛
### 帖子
<Route author="totorowechat" example="/scboy/thread/188673" path="/scboy/thread/:tid" :paramsDesc="['帖子 tid']" radar="1">
帖子网址如果为 <https://www.scboy.com/?thread-188673.htm> 那么帖子 tid 就是 `1789863`。
访问水区需要添加环境变量 `SCBOY_BBS_TOKEN`, 详情见部署页面的配置模块。 `SCBOY_BBS_TOKEN`在 cookies 的`bbs_token`中。
</Route>
## V2EX
### 最热 / 最新主题
@@ -204,6 +222,22 @@ pageClass: routes
<Route author="nczitzk" example="/91ddcc/stage/206" path="/91ddcc/stage/:stage" :paramsDesc="['驿站ID,在 URL 可以找到']"/>
## 超理论坛
### 板块
<Route author="nczitzk" example="/chaoli" path="/chaoli/:channel?" :paramsDesc="['板块,见下表,默认为全部']">
| 数学 | 物理 | 化学 | 生物 | 天文 | 技术 | 管理 | 公告 |
| ---- | ------- | ---- | ------- | ----- | ---- | ----- | ------ |
| math | physics | chem | biology | astro | tech | admin | announ |
| 其他 | 语言 | 社科 | 科幻 | 辑录 |
| ------ | ---- | ------ | ------ | ----------- |
| others | lang | socsci | sci-fi | collections |
</Route>
## 电鸭社区
### 工作机会
@@ -226,7 +260,11 @@ pageClass: routes
### 虎扑 BBS 论坛
<Route author="LogicJake" example="/hupu/bbs/bxj/2" path="/hupu/bbs/:id/:order?" :paramsDesc="['板块 id,可在板块 URL 找到', '排序方式,1最新回帖(默认),2最新发帖,3精华帖']"/>
<Route author="LogicJake" example="/hupu/bbs/bxj/2" path="/hupu/bbs/:id/:order?" :paramsDesc="['板块 id,可在板块 URL 找到', '排序方式,1最新回帖(默认),2最新发帖,3精华帖']">
此路由与旧的 `/hupu/bxj/:id/:order?` 等价,但推荐使用 `/hupu/bbs/:id/:order?`,旧路由可能会在未来被删除。
</Route>
### 分类
@@ -304,6 +342,7 @@ pageClass: routes
| CrackMe | crackme |
| Pwn | pwn |
| WEB 安全 | web |
| 外文翻译 | translate |
| 全站 | all |
| 类型 | type |
@@ -373,6 +412,24 @@ pageClass: routes
</Route>
## 品葱
### 发现
<Route author="zphw" example="/pincong/category/1/new" path="/pincong/category/:category?/:sort?" :paramsDesc="['分类,与官网分类 URL `category-` 后的数字对应,默认为全部', '排序方式,参数可见下表,默认为推荐']" anticrawler="1" />
| 最新 | 推荐 | 热门 |
| ---- | --------- | ---- |
| new | recommend | hot |
### 精选
<Route author="zphw" example="/pincong/hot" path="/pincong/hot/:category?" :paramsDesc="['分类,与官网分类 URL `category-` 后的数字对应,默认为全部']" anticrawler="1" />
### 话题
<Route author="zphw" example="/pincong/topic/美国" path="/pincong/topic/:topic?" :paramsDesc="['话题,可在官网获取']" anticrawler="1" />
## 三星盖乐世社区
### 最新帖子
@@ -439,6 +496,12 @@ pageClass: routes
<Route author="u3u" example="/tieba/post/lz/5853240586" path="/tieba/post/lz/:id" :paramsDesc="['帖子 ID']"/>
### 用户帖子
<Route author="igxlin nczitzk" example="/tieba/user/斗鱼游戏君" path="/tieba/user/:uid" :paramsDesc="['用户 ID']" />
用户 ID 可以通过打开用户的主页后查看地址栏的 `un` 字段来获取。
## 万维读者
### 焦点新闻
@@ -469,24 +532,142 @@ pageClass: routes
<Route author="DIYgod" example="/mi/bbs/board/18066617" path="/mi/bbs/board/:boardId" :paramsDesc="['圈子 id,可在圈子 URL 找到']" radar="1" rssbud="1"/>
## 小木虫论坛
### 期刊点评
<Route author="nczitzk" example="/muchong/journal" path="/muchong/journal/:type?" :paramsDesc="['类型,见下表']"/>
| SCI 期刊 | 中文期刊 |
| -------- | -------- |
| | cn |
### 分类
<Route author="nczitzk" example="/muchong/290" path="/muchong/:id/:type?/:sort?" :paramsDesc="['板块 id,可在板块页 URL 中找到', '子类别 id,可在板块页导航栏中找到,默认为 `all` 即 全部', '排序,可选 `order-tid` 即 发表排序,默认为 回帖排序']">
::: tip 提示
尚不支持需要登录访问的版块
:::
网络生活区
| 休闲灌水 | 虫友互识 | 文学芳草园 | 育儿交流 | 竞技体育 | 有奖起名 | 有奖问答 | 健康生活 |
| -------- | -------- | ---------- | -------- | -------- | -------- | -------- | -------- |
| 6 | 133 | 166 | 359 | 377 | 408 | 69 | 179 |
科研生活区
| 硕博家园 | 教师之家 | 博后之家 | English Cafe | 职场人生 | 专业外语 | 外语学习 | 导师招生 | 找工作 | 招聘信息布告栏 | 考研 | 考博 | 公务员考试 |
| -------- | -------- | -------- | ------------ | -------- | -------- | -------- | -------- | ------ | -------------- | ---- | ---- | ---------- |
| 198 | 199 | 342 | 328 | 405 | 432 | 126 | 430 | 185 | 346 | 127 | 197 | 280 |
学术交流区
| 论文投稿 | SCI 期刊点评 | 中文期刊点评 | 论文道贺祈福 | 论文翻译 | 基金申请 | 学术会议 | 会议与征稿布告栏 |
| -------- | ------------ | ------------ | ------------ | -------- | -------- | -------- | ---------------- |
| 125 | 见期刊路由 | 见期刊路由 | 307 | 278 | 234 | 299 | 345 |
出国留学区
| 留学生活 | 公派出国 | 访问学者 | 海外博后 | 留学 DIY | 签证指南 | 出国考试 | 海外院所点评 | 海外校友录 | 海归之家 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | ------------ | ---------- | -------- |
| 336 | 131 | 386 | 385 | 334 | 335 | 337 | 399 | 见院校路由 | 428 |
化学化工区
| 有机交流 | 有机资源 | 高分子 | 无机 / 物化 | 分析 | 催化 | 工艺技术 | 化工设备 | 石油化工 | 精细化工 | 电化学 | 环境 | SciFinder/Reaxys |
| -------- | -------- | ------ | ----------- | ---- | ---- | -------- | -------- | -------- | -------- | ------ | ---- | ---------------- |
| 189 | 325 | 236 | 170 | 238 | 190 | 373 | 374 | 212 | 227 | 263 | 230 | 343 |
材料区
| 材料综合 | 材料工程 | 微米和纳米 | 晶体 | 金属 | 无机非金属 | 生物材料 | 功能材料 | 复合材料 |
| -------- | -------- | ---------- | ---- | ---- | ---------- | -------- | -------- | -------- |
| 378 | 379 | 233 | 262 | 301 | 213 | 286 | 364 | 365 |
计算模拟区
| 第一性原理 | 量子化学 | 计算模拟 | 分子模拟 | 仿真模拟 | 程序语言 |
| ---------- | -------- | -------- | -------- | -------- | -------- |
| 291 | 290 | 279 | 322 | 292 | 312 |
生物医药区
| 新药研发 | 药学 | 药品生产 | 分子生物 | 微生物 | 动植物 | 生物科学 | 医学 |
| -------- | ---- | -------- | -------- | ------ | ------ | -------- | ---- |
| 192 | 148 | 429 | 366 | 367 | 368 | 144 | 142 |
人文经济区
| 金融投资 | 人文社科 | 管理学 | 经济学 |
| -------- | -------- | ------ | ------ |
| 272 | 453 | 447 | 446 |
专业学科区
| 数理科学综合 | 机械 | 物理 | 数学 | 农林 | 食品 | 地学 | 能源 | 信息科学 | 土木建筑 | 航空航天 | 转基因 |
| ------------ | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | -------- | -------- | ------ |
| 452 | 370 | 228 | 323 | 371 | 207 | 261 | 372 | 145 | 147 | 434 | 438 |
注册执考区
| 化环类执考 | 医药类考试 | 土建类考试 | 经管类考试 | 其他类执考 |
| ---------- | ---------- | ---------- | ---------- | ---------- |
| 414 | 417 | 418 | 415 | 419 |
文献求助区
| 文献求助 | 外文书籍求助 | 标准与专利 | 检索知识 | 代理 Proxy 资源 |
| -------- | ------------ | ---------- | -------- | --------------- |
| 158 | 219 | 226 | 130 | 203 |
资源共享区
| 电脑软件 | 手机资源 | 科研工具 | 科研资料 | 课件资源 | 试题资源 | 资源求助 | 电脑使用 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| 55 | 410 | 188 | 300 | 112 | 380 | 401 | 347 |
科研市场区
| 课堂列表 | 综合广告 | 试剂耗材抗体 | 仪器设备 | 测试定制合成 | 技术服务 | 留学服务 | 教育培训 | 个人求购专版 | 个人转让专版 | QQ 群 / 公众号专版 | 手机红包 | 金币购物 |
| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | -------- | ------------ | ------------ | ------------------ | -------- | -------- |
| 454 | 284 | 390 | 389 | 392 | 396 | 350 | 394 | 316 | 436 | 362 | 302 | 460 |
论坛事务区
| 木虫讲堂 | 论坛更新日志 | 论坛公告发布 | 我来提意见 | 版主交流 | 规章制度 | 论坛使用帮助 (只读) | 我与小木虫的故事 |
| -------- | ------------ | ------------ | ---------- | -------- | -------- | ------------------- | ---------------- |
| 468 | 437 | 5 | 321 | 134 | 317 | 215 | 376 |
版块孵化区
| 版块工场 |
| -------- |
| myf |
</Route>
## 一亩三分地
### 主题帖
### 帖子
<Route author="NavePnow DIYgod" example="/1point3acres/post/hot" path="/1point3acres/post/:category" :paramsDesc="['分类 category, 见下表']"/>
| 热门帖子 | 最新帖子 |
| -------- | -------- |
| hot | new |
### 用户主题帖
<Route author="Maecenas" example="/1point3acres/user/1/threads" path="/1point3acres/user/:id/threads" :paramsDesc="['用户 id,可在 Instant 版网站的个人主页 URL 找到']"/>
### 回帖
### 用户回帖
<Route author="Maecenas" example="/1point3acres/user/1/posts" path="/1point3acres/user/:id/posts" :paramsDesc="['用户 id,可在 Instant 版网站的个人主页 URL 找到']"/>
### 帖子 (手机端的最热与最新 Tab)
<Route author="NavePnow" example="/1point3acres/post/hot" path="/1point3acres/post/:category" :paramsDesc="['分类 category, 见下表']"/>
| 最热帖子 | 最新帖子 |
| -------- | -------- |
| hot | new |
### 录取结果
<Route author="NavePnow" example="/1point3acres/offer/12/null/CMU" path="/1point3acres/offer/:year?/:major?/:school?" :paramsDesc="['录取年份 id,空为null', '录取专业 id,空为null', '录取学校 id,空为null']">
@@ -502,6 +683,37 @@ pageClass: routes
:::
</Route>
### 博客
<Route author="nczitzk" example="/1point3acres/blog" path="/1point3acres/blog/:category?" :paramsDesc="['分类,见下表,可在对应分类页 URL 中找到']">
| 分类 | 分类名 |
| ---------- | --------------------------------------------------------------------- |
| 全部 | |
| 一亩三分地 | 一亩三分地 |
| 论坛精华 | 一亩三分地 - 论坛精华 |
| 咨询服务 | 咨询服务 |
| 学校院系 | 学校院系信息 |
| 找工求职 | 如何找工作 |
| 美国经济 | 如何找工作 - 美国经济与就业 |
| 杂谈其他 | 其他类别 |
| 抄袭 | 其他类别 - 抄袭 |
| 直播 | 其他类别 - 直播 |
| 热门专业 | eecsmis 统计金工等热门专业 |
| EECSMIS | eecsmis 统计金工等热门专业 - eecsmis 专业 |
| 数据科学 | eecsmis 统计金工等热门专业 - 数据科学 |
| 统计金工 | eecsmis 统计金工等热门专业 - 生物统计金融工程公共健康生物技术制药行业 |
| 留学申请 | 留学申请信息 |
| GT 考试 | 留学申请信息 - gt 考试 |
| 定位 | 留学申请信息 - 定位 |
| 文书写作 | 留学申请信息 - 文书写作 |
| 面试 | 留学申请信息 - 面试 |
| 移民绿卡 | 移民办绿卡 |
| 美国学习 | 美国学习 |
| 美国生活 | 美国生活 |
</Route>
## 直播吧
### 子论坛
+14
View File
@@ -10,12 +10,20 @@ pageClass: routes
<Route author="kt286" example="/archdaily" path="/archdaily"/>
## Benedict Evans
<Route author="emdoe" example="/benedictevans" path="/benedictevans"/>
## Google Sites
### 文章更新
<Route author="hoilc" example="/google/sites/outlierseconomics" path="/google/sites/:id" :paramsDesc="['Site ID, 可在 URL 中找到']" radar="1" rssbud="1"/>
## Gwern Branwen
<Route author="cerebrater" example="/gwern/newest" path="/gwern/:category" :paramsDesc="['網誌主頁的分類訊息']"/>
## Hedwig.pub
<Route author="zwithz" example="/blogs/hedwig/zmd" path="/blogs/hedwig/:type" :paramsDesc="['分类, 见下表']"/>
@@ -72,6 +80,12 @@ pageClass: routes
<Route author="Maecenas" example="/blogs/paulgraham" path="/blogs/paulgraham"/>
## Phrack Magazine
### 文章
<Route author="CitrusIce" example="/phrack" path="/phrack" />
## WordPress
<Route author="Lonor" example="/blogs/wordpress/lawrence.code.blog" path="/blogs/wordpress/:domain/:https?" :paramsDesc="['WordPress 博客域名', '默认 https 协议。填写 `http`或`https`']"/>
+36
View File
@@ -122,6 +122,42 @@ Behance 用户主页 URL 获取用户名,如 <https://www.behance.net/mishapet
<Route author="MisteryMonster" example="/unit-image/films/vfx" path="/unit-image/films/:type?" :paramsDesc="['Films 下分类,`vfx`, `game-trailer`, `animation`, `commercials`, `making-of`']"/>
## 优设网
### 设计专题
<Route author="nczitzk" example="/uisdc/zt/design-history" path="/uisdc/zt/:title?" :paramsDesc="['专题名称,可在标签页的 URL 中找到,如 `design-history`;也可填入 `hot` 展示最热门专题,默认展示最新鲜专题']">
更多设计专题请参见 [优设专题](https://www.uisdc.com/zt)
</Route>
### 细节猎人
<Route author="nczitzk" example="/uisdc/topic/all" path="/uisdc/topic/:title?/:sort?" :paramsDesc="['标签名称,可在标签页的 URL 中找到', '排序方式,`hot` 指最热门,默认为最新鲜']">
更多细节标签请参见 [全部标签](https://www.uisdc.com/alltopics)
</Route>
### 设计话题
<Route author="nczitzk" example="/uisdc/talk" path="/uisdc/talk/:sort?" :paramsDesc="['排序方式,`hot` 指最热门,默认为最新鲜']"/>
### 行业新闻
<Route author="nczitzk" example="/uisdc/hangye" path="/uisdc/hangye/:caty?" :paramsDesc="['分类,见下表,默认为全部新闻']">
| 全部新闻 | 活动赛事 | 品牌资讯 | 新品推荐 |
| -------- | --------------- | ---------- | ------------ |
| | events-activity | brand-news | new-products |
</Route>
### 优设读报
<Route author="nczitzk" example="/uisdc/news" path="/uisdc/news"/>
## 站酷
### 推荐
+1 -1
View File
@@ -25,7 +25,7 @@ RSSHub can be used with browser extension [RSSHub Radar](https://github.com/DIYg
### Special Sponsors
<a style="margin-right: 10px;" href="https://rixcloud.app/rsshub" target="_blank"><img height="60px" src="https://i.imgur.com/TrgP3S1.png"></a><a style="margin-right: 10px;" href="https://km.bytell.cn/wxcollect" target="_blank"><img height="60px" src="https://i.imgur.com/7sNM1yi.png"></a>
<a style="margin-right: 10px;" href="https://sa.net/" target="_blank"><img height="60px" src="https://i.imgur.com/3rM8nWI.png"></a><a style="margin-right: 10px;" href="https://km.bytell.cn/wxcollect" target="_blank"><img height="60px" src="https://i.imgur.com/7sNM1yi.png"></a>
### Sponsors
+18
View File
@@ -29,3 +29,21 @@ pageClass: routes
| x | 7 |
</RouteEn>
## LowEndTalk
### Discussion
<RouteEn author="nczitzk" example="/lowendtalk/discussion/168480" path="/lowendtalk/discussion/:id?" :paramsDesc="['Discussion id']"/>
## SCBOY forum
### Thread
<RouteEn author="totorowechat" example="/scboy/thread/188673" path="/scboy/thread/:tid" :paramsDesc="['thread tid']" radar="1">
If the url of the thread is <https://www.scboy.com/?thread-188673.htm> then tid would be `1789863`.
When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environment`. See <https://docs.rsshub.app/en/install/#Deployment> for details. `SCBOY_BBS_TOKEN` is included in cookies with `bbs_token`.
</RouteEn>
+11
View File
@@ -31,3 +31,14 @@ pageClass: routes
### Essays
<RouteEn author="Maecenas" example="/blogs/paulgraham" path="/blogs/paulgraham"/>
## Phrack Magazine
### Article
<RouteEn author="CitrusIce" example="/phrack" path="/phrack" />
## WordPress
<Route author="Lonor" example="/blogs/wordpress/lawrence.code.blog" path="/blogs/wordpress/:domain/:https?" :paramsDesc="['WordPress blog domain', 'use https by default. options: `http` or `https`']"/>
+72
View File
@@ -4,6 +4,52 @@ pageClass: routes
# Gaming
## Blizzard
### News
<RouteEn author="nczitzk" example="/blizzard/news" path="/blizzard/news/:language?/:category?" :paramsDesc="['Language code, see below, en-US by default', 'Category, see below, All News by default']">
Categories
| Category | Slug |
| ---------------------- | ------------------- |
| All News | |
| Diablo III | diablo3 |
| Diablo IV | diablo4 |
| Diablo: Immortal | diablo-immortal |
| Hearthstone | hearthstone |
| Heroes of the Storm | heroes-of-the-storm |
| Overwatch | overwatch |
| StarCraft: Remastered | starcraft |
| StarCraft II | starcraft2 |
| World of Warcraft | world-of-warcraft |
| Warcraft III: Reforged | warcraft3 |
| BlizzCon | blizzcon |
| Inside Blizzard | blizzard |
Language codes
| Language | Code |
| -------------- | ----- |
| Deutsch | de-de |
| English (US) | en-us |
| English (EU) | en-gb |
| Español (EU) | es-es |
| Español (AL) | es-mx |
| Français | fr-fr |
| Italiano | it-it |
| Português (AL) | pt-br |
| Polski | pl-pl |
| Русский | ru-ru |
| 한국어 | ko-kr |
| ภาษาไทย | th-th |
| 日本語 | ja-jp |
| 繁體中文 | zh-tw |
| 简体中文 | zh-cn |
</RouteEn>
## dekudeals
### Category
@@ -16,6 +62,12 @@ pageClass: routes
<RouteEn author="Zyx-A" example="/epicgames/freegames" path="/epicgames/freegames"/>
## Konami
### PES Mobile Announcement
<RouteEn author="HenryQW" example="/konami/pesmobile/en/ios" path="/konami/pesmobile/:lang?/:os?" :paramsDesc="['language, obtained from the URL, eg. zh-cn, zh-tw, en', 'operating system,iOS or Android']"/>
## Metacritic
### Game Releases
@@ -52,6 +104,14 @@ Sorting types, default to `date`:
<RouteEn author="Indexyz" example="/curseforge/files/jei" path="/curseforge/files/:project" :paramsDesc="['Progect shortname or `Project ID`. The short name of the project can be found in the address bar, for exmaple `https://minecraft.curseforge.com/projects/non-update` to `non-update`. `Project ID` can be found in `About This Project` in `Overview`']"/>
### Feed The Beast Modpack Updates
<RouteEn author="gucheen" example="/feed-the-beast/modpack/ftb_presents_direwolf20_1_16" path="/feed-the-beast/modpack/:modpackEntry" :paramsDesc="['entry name of modpack.']">
| param | description |
| ------| ------------ |
| modpackEntry | The entry name of modpack, can be found in modpack\'s page link, for `https://www.feed-the-beast.com/modpack/ftb_presents_direwolf20_1_16`, use `ftb_presents_direwolf20_1_16`. |
</RouteEn>
## Nintendo
### eShop New Game Releases
@@ -114,6 +174,18 @@ For instance, in `https://store.steampowered.com/search/?specials=1&term=atelier
<RouteEn author="maple3142" example="/steam/news/282800" path="/steam/news/:appids" :paramsDesc="['game id']" radar="1" rssbud="1"/>
::: tip
Steam provides some official RSS feeds:
- Game News: https://store.steampowered.com/feeds/news/app/412830/
- Curator/Group/Publisher/Developer News: https://store.steampowered.com/feeds/news/group/35143931/
Game News use the AppID while the rest are only available in the Steam News UI, it seems.
:::
## SteamGifts
### Discussions
+40 -1
View File
@@ -4,12 +4,51 @@ pageClass: routes
# Goverment
## Central Intelligence Agency
### Annual FOIA Reports
<RouteEn author="nczitzk" example="/cia/foia-annual-report" path="/cia/foia-annual-report"/>
## Ministry of Foreign Affairs of Japan
### Press conference
<RouteEn author="sgqy" example="/go.jp/mofa" path="/go.jp/mofa"/>
## Supreme Court of the United States
### Arguments Audios
<RouteEn author="nczitzk" example="/us/supremecourt/argument_audio" path="/us/supremecourt/argument_audio/:year?" :paramsDesc="['Year, current year by default']"/>
## The United States Trade Representative
### Press Releases
<RouteEn author="nczitzk" example="/ustr/press-releases" path="/ustr/press-releases/:year?/:month?" :paramsDesc="['Year, current year by default', 'Month, empty by default, show contents in all year']">
::: tip Tip
Fill in the English expression for the month in the Month field, eg `December` for the 12th Month。
:::
</RouteEn>
## U.S. Department of the Treasury
### Press Releases
<RouteEn author="nczitzk" example="/treasury/press-releases" path="/treasury/press-releases/:category?/:title?" :paramsDesc="['Category, see below, all by default', 'Title keywords, empty by default']">
Category
| Press Releases | Statements & Remarks | Readouts | Testimonies |
| -------------- | -------------------- | -------- | ----------- |
| all | statements-remarks | readouts | testimonies |
</RouteEn>
## United Nations
### Security Council Vetoed a Resolution
@@ -20,4 +59,4 @@ pageClass: routes
### Dispute settlement news
<RouteEn author="nczitzk" example="/wto/dispute-settlement" path="/wto/dispute-settlement/:year?" :paramsDesc="['Year, current year by default']"/>
<RouteEn author="nczitzk" example="/wto/dispute-settlement" path="/wto/dispute-settlement/:year?" :paramsDesc="['Year, current year by default']"/>
+59 -5
View File
@@ -104,6 +104,35 @@ $ docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=3600 -e GITHUB_ACCESS
To configure more options please refer to [Configuration](#configuration).
# Ansible Deployment
This Ansible playbook includes RSSHub, Redis, browserless (uses Docker) and Caddy 2
Currently only support Ubuntu 20.04
Requires sudo privilege and virtualization capability (Docker will be automatically installed)
### Install
```bash
sudo apt update
sudo apt install ansible
git clone https://github.com/DIYgod/RSSHub.git ~/RSSHub
cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# When prompt to enter a domain name, enter the domain name that this machine/VM will use
# For example, if your users use https://rsshub.exmaple.com to access your RSSHub instance, enter rsshub.exmaple.com (remove the https://)
```
### Update
```bash
cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# When prompt to enter a domain name, enter the domain name that this machine/VM will use
# For example, if your users use https://rsshub.exmaple.com to access your RSSHub instance, enter rsshub.exmaple.com (remove the https://)
```
## Manual Deployment
The most direct way to deploy `RSSHub`, you can follow the steps below to deploy`RSSHub` on your computer, server or anywhere.
@@ -318,8 +347,6 @@ RSSHub supports two caching methods: memory and redis
`REDIS_URL`: Redis target address(invalid when `CACHE_TYPE` is set to memory), default to `redis://localhost:6379/`
`REDIS_PASSWORD`: Redis password(invalid when `CACHE_TYPE` is set to memory)
### Proxy Configurations
Partial routes have a strict anti-crawler policy, and can be configured to use proxy
@@ -333,6 +360,9 @@ Partial routes have a strict anti-crawler policy, and can be configured to use p
`PROXY_AUTH`: credentials to authenticate a user agent to proxy server, `Proxy-Authorization: Basic ${process.env.PROXY_AUTH}`
`PROXY_URL_REGEX`: regex for url of enabling proxy, default to `.*`
### CORS Request
RSSHub by default reject CORS requests. This behavior can be modified via setting `ALLOW_ORIGIN: *` or `ALLOW_ORIGIN: www.example.com`.
### User Authentication Configurations
@@ -391,7 +421,9 @@ See the relation between access key/code and white/blacklisting.
`REQUEST_RETRY`: retries allowed for failed requests, default to `2`
`DEBUG_INFO`: display route information on homepage for debugging purpose, default to `true`
`REQUEST_TIMEOUT`: milliseconds to wait for the server to end the response before aborting the request with error, default to `3000`
`DEBUG_INFO`: display route information on homepage for debugging purpose. When set to neither `true` nor `false`, use parameter `debug` to enable display, eg: <https://rsshub.app/?debug=value_of_DEBUG_INFO> . Default to `true`
`NODE_ENV`: display error message on pages for authentication failing, default to `production` (i.e. no display)
@@ -403,6 +435,8 @@ See the relation between access key/code and white/blacklisting.
`SENTRY`: [Sentry](https://sentry.io) dsn, used for error tracking
`SENTRY_ROUTE_TIMEOUT`: Report Sentry if route execution takes more than this milliseconds, default to `3000`
`DISALLOW_ROBOT`: prevent indexing by search engine, default to enable, set false or 0 to disable
`HOTLINK_TEMPLATE`: Replace image link in description to avoid anti-hotlink protection, leave blank to disable this function. Usage reference [#2769](https://github.com/DIYgod/RSSHub/issues/2769). You may use any properity listed in [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL#Properties), format of JS template literal. e.g. `${protocol}//${host}${pathname}`, `https://i3.wp.com/${host}${pathname}`
@@ -444,7 +478,7 @@ See docs of specified route and `lib/config.js` for detail information.
- `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret, support multiple keys, split them with `,`
- `TWITTER_TOKEN_{id}`: Twitter token's corresponding id, replace `{id}` with the id, the value is a combination of `consumer_key consumer_secret access_token access_token_secret` by a comma `,`. Eg. `{consumer_key},{consumer_secret},{access_token},{access_token_secret}`.
- `TWITTER_TOKEN_{handler}`: The token generated by the corresponding Twitter handler, replace `{handler}` with the Twitter handler, the value is a combination of `Twitter API key, Twitter API key secret, Access token, Access token secret` connected by a comma `,`. Eg. `TWITTER_TOKEN_RSSHub=bX1zry5nG4d1RbESQbnADpVIo,2YrD8qo9sXbB8VlYfVmo1Qtw0xsexnOliU5oZofq7aPIGou0Xx,123456789-hlkUHFYmeXrRcf6SEQciP8rP4lzmRgMgwdqIN9aK,pHcPnfa28rCIKhSICUCiaw9ppuSSl7T2f3dnGYpSM0bod`.
- youtube: [API Key application](https://console.developers.google.com/)
@@ -458,6 +492,14 @@ See docs of specified route and `lib/config.js` for detail information.
- `GITHUB_ACCESS_TOKEN`: GitHub Access Token
- Instagram:
- `IG_USERNAME`: Your Instagram username
- `IG_PASSWORD`: Your Instagram password
- `IG_PROXY`: Proxy URL for Instagram
Warning: Two Factor Authentication is *not* supported.
- mail:
- `EMAIL_CONFIG_{email}`: Mail setting, replace `{email}` with the email account, replace `@` in email account with `.`, eg. `EMAIL_CONFIG_xxx.gmail.com`. The value is in the format of `password=password&host=server&port=port`, eg:
@@ -481,4 +523,16 @@ See docs of specified route and `lib/config.js` for detail information.
- Sci-hub for scientific journal routes:
- `SCIHUB_HOST`: The Sci-hub mirror address that is accssible from your location, default to `https://sci-hub.tw`.
- `SCIHUB_HOST`: The Sci-hub mirror address that is accssible from your location, default to `https://sci-hub.se`.
- Wordpress:
- `WORDPRESS_CDN`: Proxy http image link with https link. Consider using:
| url | backbone |
| ---------------------------------------- | ------------ |
| https://imageproxy.pimg.tw/resize?url= | akamai |
| https://images.weserv.nl/?url= | cloudflare |
| https://pic1.xuehuaimg.com/proxy/ | cloudflare |
| https://cors.netnr.workers.dev/ | cloudflare |
| https://netnr-proxy.openode.io/ | digitalocean |
+4
View File
@@ -90,6 +90,10 @@ The parameter id in the route is the id in the URL of the user ’s Google Schol
## MIT Technology Review
<RouteEn author="zphw" example="/technologyreview" path="/technologyreview" />
### Topics
<RouteEn author="laampui" example="/technologyreview/humans-and-technology" path="/technologyreview/:category_name" :paramsDesc="['see below']" />
+3 -3
View File
@@ -6,9 +6,9 @@ pageClass: routes
## 60-Second Science - Scientific American
### Transcript
<RouteEn author="emdoe" example="/60s-science" path="/60s-science"/>
<RouteEn author="emdoe" example="/60s-science/transcript" path="/60s-science/transcript"/>
Full transcript support for better user experience.
## 99% Invisible
@@ -113,6 +113,6 @@ Official RSS: https://eztv.io/ezrss.xml
<RouteEn author="fallenhh" example="/soundcloud/tracks/angeart" path="/soundcloud/tracks/:user" :paramsDesc="['User name']" />
## Youtube
## YouTube
Refer to [#youtube](/en/social-media.html#youtube)
+168
View File
@@ -35,6 +35,24 @@ 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"/>
## Bell Labs
### Event and News
<RouteEn author="nczitzk" example="/bell-labs/events-news" path="/bell-labs/events-news/:category?" :paramsDesc="['Category, see below, Press releases by default']">
| Featured events | Latest recognition | Press releases |
| ------- | ---------- | -------- |
| events | industry-recognition | press-releases |
</RouteEn>
## BOF
### Home
@@ -49,6 +67,10 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
## CGTN
### Opinions
<RouteEn author="nczitzk" example="/cgtn/opinions" path="/cgtn/opinions"/>
### Most Read & Most Share
<RouteEn author="nczitzk" example="/cgtn/most/read/day" path="/cgtn/most/:type?/:time?" :paramsDesc="['Type, `read` as most read, `share` as most share, `read` by default', 'Time range, `all` as all the time, `day` as today, `week` as this week, `month` as this month, `year` as this year, `all` by default']"/>
@@ -57,6 +79,56 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
<RouteEn author="nczitzk" example="/cgtn/top" path="/cgtn/top"/>
### Editors' Pick
<RouteEn author="nczitzk" example="/cgtn/pick" path="/cgtn/pick"/>
## China Labour Bulletin
### Commentary and Analysis
<RouteEn author="nczitzk" example="/clb/commentary" path="/clb/commentary/:lang?" :paramsDesc="['Language, Simplified Chinese by default, or `en` as English']"/>
## China Labour Watch
### Reports
<RouteEn author="nczitzk" example="/chinalaborwatch/reports" path="/chinalaborwatch/reports/:lang?/:industry?" :paramsDesc="['Language, English by default, or `cn` as Simplified Chinese', 'Industry id, see below, all by default']">
| All | Automotive | Cookware | Electronics | Footwear | Furniture | Garment | General | Printing | Retail | Toys |
| - | - | - | - | - | - | - | - | - | - | - |
| | 2 | 6 | 14 | 3 | 4 | 10 | 8 | 1 | 9 | 7 |
</RouteEn>
## Day One
### Blog
<RouteEn author="nczitzk" example="/dayone/blog" path="/dayone/blog"/>
## DeepMind
### Blog
<RouteEn author="nczitzk" example="/deepmind/blog" path="/deepmind/blog/:category?" :paramsDesc="['Category, see below']">
| All | Podcasts | Research | News |
| --- | -------- | -------- | ---- |
| | Podcasts | Research | News |
</RouteEn>
## Deutsche Welle
<RouteEn author="nczitzk" example="/dw/en" path="/dw/:lang?/:caty?" :paramsDesc="['Language, can be found in the URL of the corresponding language version page, German by default', 'Category, all by default']">
| All | German Press | Culture | Economy | Science & Nature |
| ---- | -------- | -------- | -------- | -------- |
| all | press | cul | eco | sci |
</RouteEn>
## Engadget
### Chinese
@@ -95,6 +167,30 @@ Provides a better reading experience (full text articles) over the official one.
</RouteEn>
## Institute of International Education
### Blog
<RouteEn author="nczitzk" example="/iie/blog" path="/iie/blog" />
## International Energy Agency
### News and events
<RouteEn author="nczitzk" example="/iea/news-and-events" path="/iea/:category?" :paramsDesc="['Category, see below, Featured by default']">
| Featured | News | Calendar | Past events |
| --------------- | ---- | -------- | ----------- |
| news-and-events | news | calendar | past-events |
</RouteEn>
## International Mathematical Union
### Fields Medal
<RouteEn author="nczitzk" example="/mathunion/fields-medal" path="/mathunion/fields-medal"/>
## Letterboxd
### User diary
@@ -105,6 +201,10 @@ Provides a better reading experience (full text articles) over the official one.
<RouteEn author="loganrockmore" example="/letterboxd/user/followingdiary/demiadejuyigbe" path="/letterboxd/user/followingdiary/:username" :paramsDesc="['username']" />
## MakeUseOf
<RouteEn author="nczitzk" example="/makeuseof" path="/makeuseof/:category?" :paramsDesc="['Category, Trending by default']"/>
## Matters
### Latest
@@ -123,6 +223,18 @@ Provides a better reading experience (full text articles) over the official one.
<RouteEn author="Cerebrater" example="/matters/author/az" path="/matters/author/:uid" :paramsDesc="['Author id, can be found at author\'s homepage url']" radar="1" rssbud="1"/>
## National Association of Colleges and Employers
### Blog
<RouteEn author="nczitzk" example="/nace/blog" path="/nace/blog/:sort?" :paramsDesc="['Sort, see below, Most Recent by default']">
| Most Recent | Top Rated | Most Read |
| - | - | - |
| | top-blogs | mostreadblogs |
</RouteEn>
## Nautilus
### Topics
@@ -133,6 +245,30 @@ This route provides a flexible plan with full text content to subscribe specific
</RouteEn>
## Oak Ridge National Laboratory
### News
<RouteEn author="nczitzk" example="/ornl/news" path="/ornl/news"/>
## OpenAI
### Blog
<RouteEn author="ncziztk" example="/openai/blog" path="/openai/blog/:tag" :paramsDesc="['Tag, see below, All by default']">
| All | Research | Announcements | Events | Milestones |
| --- | -------- | ------------- | ------ | ---------- |
| | research | announcements | events | milestones |
</RouteEn>
## Polar
### Blog
<RouteEn author="nczitzk" example="/polar/blog" path="/polar/blog"/>
## Quanta Magazine
### Archive
@@ -146,6 +282,12 @@ Compared to the official one, this feed:
</RouteEn>
## Semiconductor Industry Association
### Latest News
<RouteEn author="nczitzk" example="/semiconductors/latest-news" path="/semiconductors/latest-news"/>
## Simons Foundation
### Articles
@@ -188,6 +330,18 @@ Compared to the official one, this feed:
</RouteEn>
## The Brain
### Blog
<RouteEn author="nczitzk" example="/thebrain/blog" path="/thebrain/blog/:category?" :paramsDesc="['Category, see below, Blog by default']">
| Blog | Recorded Events | Big Thinkers |
| ---- | ---- | ---- |
| blog | recorded-events | big-thinkers |
</RouteEn>
## The Verge
<RouteEn author="HenryQW" example="/verge" path="/verge">
@@ -196,6 +350,20 @@ Provides a better reading experience (full text articles) over the official one.
</RouteEn>
## Thrillist
<RouteEn author="loganrockmore" example="/thrillist/food-and-drink" path="/vulture/:tag" :paramsDesc="['Tag']">
Provides all of the Thrillist articles with the specified tag.
</RouteEn>
## VOA News
### Day in Photos
<RouteEn author="nczitzk" example="/voa/day-photos" path="/voa/day-photos"/>
## Vulture
<RouteEn author="loganrockmore" example="/vulture/movies" path="/vulture/:tag/:excludetags?" :paramsDesc="['Tag', 'Comma-delimited list of tags. If an article includes one of these tags, it will be excluded from the RSS feed.']" />
+13 -1
View File
@@ -75,7 +75,7 @@ Official Website: [https://www.ssm.gov.mo/apps1/PreventWuhanInfection/en.aspx](h
> Only support IMAP protocol, email password and other settings refer to [Email setting](/en/install)
<RouteEn author="kt286" example="/mail/imap/rss@rsshub.app" path="/mail/imap/:email" :paramsDesc="['Email account']" />
<RouteEn author="kt286" example="/mail/imap/rss@rsshub.app" path="/mail/imap/:email" :paramsDesc="['Email account']" selfhost="1"/>
## Emi Nitta official website
@@ -111,6 +111,18 @@ Official Website: [https://www.ssm.gov.mo/apps1/PreventWuhanInfection/en.aspx](h
</RouteEn>
## King Arthur
### Baking
<RouteEn author="loganrockmore" example="/kingarthur/story" path="/instapaper/:category">
| Story | Recipes | Tips and Techniques |
| ----- | ------- | ------------------- |
| story | recipes | tips-and-techniques |
</RouteEn>
## MITRE
### All Publications
+12
View File
@@ -42,10 +42,22 @@ pageClass: routes
<RouteEn author="FHYunCai" example="/bing" path="/bing" radar="1" rssbud="1"/>
## ComicsKingdom Comic Strips
<RouteEn author="stjohnjohnson" example="/comicskingdom/baby-blues" path="/comicskingdom/:strip" :paramsDesc="['URL path of the strip on comicskingdom.com']" />
## DailyArt
<RouteEn author="zphw" example="/dailyart/en" path="/dailyart/:language?" :paramsDesc="['Support en, es, fr, de, it, zh, jp, etc. English by default.']" />
## Dilbert Comic Strip
<RouteEn name="Daily Strip" author="Maecenas" example="/dilbert/strip" path="/dilbert/strip"/>
## GoComics Comic Strips
<RouteEn author="stjohnjohnson" example="/gocomics/foxtrot" path="/gocomics/:strip" :paramsDesc="['URL path of the strip on gocomics.com']" />
## Google Doodles
### Update
+96
View File
@@ -10,6 +10,12 @@ pageClass: routes
<Route author="nczitzk" example="/anki/changes" path="/anki/changes"/>
## AnyTXT
### Release Notes
<Route author="nczitzk" example="/anytxt/release-notes" path="/anytxt/release-notes"/>
## Apkpure
### Versions
@@ -36,6 +42,44 @@ pageClass: routes
<RouteEn author="HenryQW" example="/aptonic/action" path="/aptonic/action/:untested?" :paramsDesc="['Set any value to include untested actions.']"/>
## Bandisoft
### History
<RouteEn author="nczitzk" example="/bandisoft/bandizip" path="/bandisoft/:id?/:lang?" :paramsDesc="['Software id, see below, Bandizip by default', 'Language, see below, English by default']">
Software id
| Bandizip (Win) | Bandizip (Mac) | Honeycam | Honeyview |
| -------------- | -------------- | -------- | --------- |
| bandizip | bandizip.mac | honeycam | honeyview |
Language
| English | en |
| 中文 (简体) | cn |
| 中文 (繁體) | tw |
| 日本語 | jp |
| Русский | ru |
| Español | es |
| Français | fr |
| Deutsch | de |
| Italiano | it |
| Slovenčina | sk |
| Українська | uk |
| Беларуская | be |
| Dansk | da |
| Polski | pl |
| Português Brasileiro | br |
| Čeština | cs |
| Nederlands | nl |
| Slovenščina| sl |
| Türkçe| tr |
| ภาษาไทย | th |
| 한국어 | kr |
</RouteEn>
## Chocolatey
### Software Update
@@ -58,6 +102,12 @@ For example: `https://www.curseforge.com/sc2/assets/taylor-mouses-stuff/files` t
</RouteEn>
## Ditto clipboard manager
### Changes
<RouteEn author="nczitzk" example="/ditto/changes" path="/ditto/changes/:type?" :paramsDesc="['Type, `beta` is an option']"/>
## Docker Hub
### Image New Build
@@ -70,6 +120,12 @@ The owner of the official image fills in the library, for example: https://rsshu
:::
## Everything
### Changes
<RouteEn author="nczitzk" example="/everything/changes" path="/everything/changes"/>
## F-Droid
### App Update
@@ -104,12 +160,22 @@ The owner of the official image fills in the library, for example: https://rsshu
<RouteEn author="Jeason0228" example="/ipsw/index/ipsws/iPhone11,8" path="/ipsw/index/:ptype/:pname/" :paramsDesc="['Fill in ipsws or otas to get different versions of firmware','Product name, `http://rsshub.app/ipsw/index/ipsws/iPod`, if you fill in the iPad, follow the entire iPad series(ptype default to ipsws).`http://rsshub.app/ipsw/index/ipsws/iPhone11,8`, if you fill in the specific iPhone11,8, submit to the ipsws firmware information of this model']"/>
## ManicTime
<RouteEn author="nczitzk" example="/manictime/releases" path="/manictime/releases"/>
## Microsoft Edge
### Addons Update
<RouteEn author="hoilc" example="/edge/addon/gangkeiaobmjcjokiofpkfpcobpbmnln" path="/edge/addon/:crxid" :paramsDesc="['Addon id, can be found in addon url']"/>
## Microsoft Store
### Updates
<Route author="hellodword" example="/microsoft-store/updates/9WZDNCRFHVN5/CN" path="/microsoft-store/updates/:productid/:market?" :paramsDesc="['`Share` - `Copy Link` in the Store', '`CN` as default']" />
## Minecraft
Refer to [#minecraft](/en/game.html#minecraft)
@@ -167,6 +233,24 @@ Refer to [#minecraft](/en/game.html#minecraft)
</RouteEn>
## QTTabBar
### Change Log
<RouteEn author="nczitzk" example="/qttabbar/change-log" path="/qttabbar/change-log"/>
## RescueTime
### Release Notes
<RouteEn author="nczitzk" example="/rescuetime/release-notes" path="/rescuetime/release-notes/:os?" :paramsDesc="['OS id, see below']">
| Mac OS | Windows |
| - | - |
| mac | windows |
</RouteEn>
## RSSHub
### New routes
@@ -193,6 +277,12 @@ Refer to [#minecraft](/en/game.html#minecraft)
<RouteEn author="garywill" example="/thunderbird/release" path="/thunderbird/release"/>
## Total Commander
### What's New
<RouteEn author="nczitzk" example="/totalcommander/whatsnew" path="/totalcommander/whatsnew"/>
## Typora
### Changelog
@@ -210,3 +300,9 @@ Refer to [#minecraft](/en/game.html#minecraft)
### Module Update
<RouteEn author="nczitzk" example="/xposed/module/com.ext.star.wars" path="/xposed/module/:mod" :paramsDesc="['module package name']"/>
## XYplorer
### What's New
<RouteEn author="nczitzk" example="/xyplorer/whatsnew" path="/xyplorer/whatsnew"/>
+20
View File
@@ -4,6 +4,12 @@ pageClass: routes
# Programming
## ACM
### A.M.Turing Award Winners
<Route author="nczitzk" example="/acm/amturingaward" path="/acm/amturingaward"/>
## cve.mitre.org
### Search Result
@@ -31,6 +37,20 @@ GitHub provides some official RSS feeds:
<RouteEn path="/github/trending/:since/:language?" example="/github/trending/daily/javascript" :paramsDesc="['time frame, available in [Trending page](https://github.com/trending/javascript?since=monthly) \'s URL, possible values are: daily, weekly or monthly', 'the feed language, available in [Trending page](https://github.com/trending/javascript?since=monthly) \'s URL']" radar="1" rssbud="1"/>
### Topics
<Route author="queensferryme" example="/github/topics/framework" path="/github/topics/:name/:qs?" :paramsDesc="['Topic name, which can be found in the URL of the corresponding [Topics Page](https://github.com/topics/framework)', 'Query string, like `l=php&o=desc&s=stars`. Details listed as follows:']" radar="1" rssbud="1">
| Parameter | Description | Values |
| ---- | ---- | ---- |
| `l` | Language | For instance `php`, which can be found in the URL of the corresponding [Topics page](https://github.com/topics/framework?l=php) |
| `o` | Sorting Order | `asc`, `desc` |
| `s` | Sorting Criteria | `stars`, `forks`, `updated` |
For instance, the `/github/topics/framework/l=php&o=desc&s=stars` route will generate the RSS feed corresponding to this [page](https://github.com/topics/framework?l=php&o=desc&s=stars).
</Route>
### Repo Issues
<RouteEn author="HenryQW AndreyMZ" path="/github/issue/:user/:repo/:state?/:labels?" example="/github/issue/DIYgod/RSSHub/all/bug" :paramsDesc="['GitHub username', 'GitHub repo name', 'the state of the issues. Can be either `open`, `closed`, or `all`. Default: `open`.', 'a list of comma separated label names']" radar="1" rssbud="1"/>
+6
View File
@@ -36,6 +36,12 @@ Parameter `time` only works when `mostwanted` is chosen as the category.
</RouteEn>
## booth.pm
### Shop
<Route author="KTachibanaM" example="/booth.pm/shop/annn-boc0123" path="/booth.pm/shop/:subdomain" :paramsDesc="['Shop subdomain']" />
## Guiltfree.pl
### Onsale
+72 -9
View File
@@ -34,6 +34,30 @@ pageClass: routes
<RouteEn author="maple3142" example="/facebook/page/SonetPCR" path="/facebook/page/:id" :paramsDesc="['page id']" anticrawler="1"/>
## Gab
### User's Posts
<RouteEn author="zphw" example="/gab/user/realdonaldtrump" path="/gab/user/:username" :paramsDesc="['Username']" />
### Popular Posts
<RouteEn author="zphw" example="/gab/popular/hot" path="/gab/popular/:sort?" :paramsDesc="['Sort by, `hot` to be Hot Posts and `top` to be Top Posts. Default: hot']" />
## Instagram
::: warning
Due to Instagram API restrictions, you have to setup your credentials on the server. See deployment guide for more.
If you don't want to setup credentials, use Picuki.
:::
### User Profile
<RouteEn author="oppilate DIYgod" example="/instagram/user/stefaniejoosten" path="/instagram/:category/:key" :paramsDesc="['Feed category. Only user category is supported for now.','Key for such category. E.g. username/ID for user feed']" radar="1" anticrawler="1"/>
## Lofter
### User
@@ -87,7 +111,7 @@ These feed do not include boosts (a.k.a. reblogs). RSSHub provides a feed for us
### User Profile
<Route author="hoilc" example="/picuki/profile/stefaniejoosten" path="/picuki/profile/:id/:displayVideo?" :paramsDesc="['Instagram id','Default to disable the embedded video, set to any value to enable embedding']" />
<RouteEn author="hoilc" example="/picuki/profile/stefaniejoosten" path="/picuki/profile/:id/:displayVideo?" :paramsDesc="['Instagram id','Default to disable the embedded video, set to any value to enable embedding']" />
## pixiv
@@ -119,7 +143,7 @@ These feed do not include boosts (a.k.a. reblogs). RSSHub provides a feed for us
### Following timeline
<RouteEn author="ClarkeCheng" example="/pixiv/user/illustfollows" path="/pixiv/user/illustfollows" radar="1" rssbud="1"/>
<RouteEn author="ClarkeCheng" example="/pixiv/user/illustfollows" path="/pixiv/user/illustfollows" radar="1" rssbud="1" selfhost="1"/>
::: warning
Only for self-hosted
@@ -161,17 +185,50 @@ Due to Twitter API restrictions, the Twitter Routes currently supports tweets wi
:::
Specify options (in query string's format) in parameter `routeParams` to control some extra features for Tweets
| Key | Description | Accepts | Defaults to |
| ------ | ----------- | ------- | ------------ |
| readable | Enable readable layout | 0/1/true/false | false |
| authorNameBold | Display author name in bold | 0/1/true/false | false |
| showAuthorInTitle | Show author name in title | 0/1/true/false | false (true in `/twitter/followings`) |
| showAuthorInDesc | Show author name in description (RSS body) | 0/1/true/false | false (true in `/twitter/followings`) |
| showQuotedAuthorAvatarInDesc | Show avatar of quoted Tweet's author in description (RSS body) (Not recommended if your RSS reader extracts images from description) | 0/1/true/false | false |
| showAuthorAvatarInDesc | Show avatar of author in description (RSS body) (Not recommended if your RSS reader extracts images from description)| 0/1/true/false | false |
| showEmojiForRetweetAndReply | Use "🔁" instead of "Rt", "↩️" & "💬" instead of "Re" | 0/1/true/false | false |
| showRetweetTextInTitle | Show quote comments in title | 0/1/true/false | true |
| addLinkForPics | Add clickable links for Tweet pictures | 0/1/true/false | false |
| showTimestampInDescription| Show timestamp in description | 0/1/true/false | false |
| showQuotedInTitle | Show quoted tweet in title | 0/1/true/false | false |
| widthOfPics | Width of Tweet pictures | Unspecified/Integer | Unspecified |
| heightOfPics | Height of Tweet pictures | Unspecified/Integer | Unspecified |
| sizeOfAuthorAvatar | Size of author's avatar | Integer | 48 |
| sizeOfQuotedAuthorAvatar | Size of quoted tweet's author's avatar | Integer | 24 |
| excludeReplies | Exclude replies, only available in "User timeline" | 0/1/true/false | false |
| includeRts | Include retweets, only available in "User timeline" | 0/1/true/false | true |
| count | `count` parameter passed to Twitter API, only available in "User timeline" | Unspecified/Integer | Unspecified |
Specify different option values than default values to improve readablility. The URL
```
https://rsshub.app/twitter/user/durov/readable=1&authorNameBold=1&showAuthorInTitle=1&showAuthorInDesc=1&showQuotedAuthorAvatarInDesc=1&showAuthorAvatarInDesc=1&showEmojiForRetweetAndReply=1&showRetweetTextInTitle=0&addLinkForPics=1&showTimestampInDescription=1&showQuotedInTitle=1&heightOfPics=150
```
generates
<img src="/readable-twitter.png" alt="Readable Twitter RSS of Durov">
### User timeline
<RouteEn path="/twitter/user/:id/:type?" example="/twitter/user/DIYgod" :paramsDesc="['user id', 'Extra options `exclude_replies` exclude replies,`exclude_rts` exclude retweets,`exclude_rts_replies` exclude replies and retweets, for default include all.']" radar="1" rssbud="1"/>
<RouteEn path="/twitter/user/:id/:routeParams?" example="/twitter/user/DIYgod" :paramsDesc="['user id', 'extra parameters, see the table above; particularly when `routeParams=exclude_replies`, replies are excluded; `routeParams=exclude_rts` excludes retweets,`routeParams=exclude_rts_replies` exclude replies and retweets; for default include all.']" radar="1" rssbud="1"/>
## User following timeline
<RouteEn author="DIYgod" example="/twitter/followings/DIYgod" path="/twitter/followings/:id" :paramsDesc="['user id']" radar="1" rssbud="1">
<RouteEn author="DIYgod" example="/twitter/followings/DIYgod" path="/twitter/followings/:id/:routeParams?" :paramsDesc="['user id', 'extra parameters, see the table above']" radar="1" rssbud="1" selfhost="1">
::: warning
This route requires Twitter token's corresponding id, therefore it's only availble when self-hosting, refer to the [Deploy Guide](/en/install/#route-specific-configurations) for route-specific configurations.
This route requires Twitter token's corresponding id, therefore it's only available when self-hosting, refer to the [Deploy Guide](/en/install/#route-specific-configurations) for route-specific configurations.
:::
@@ -179,21 +236,21 @@ This route requires Twitter token's corresponding id, therefore it's only availb
### List timeline
<RouteEn author="xyqfer" example="/twitter/list/ladyleet/javascript" path="/twitter/list/:id/:name" :paramsDesc="['user name', 'list name']" radar="1" rssbud="1"/>
<RouteEn author="xyqfer" example="/twitter/list/ladyleet/javascript" path="/twitter/list/:id/:name/:routeParams?" :paramsDesc="['user name', 'list name', 'extra parameters, see the table above']" radar="1" rssbud="1"/>
### User likes
<RouteEn author="xyqfer" example="/twitter/likes/DIYgod" path="/twitter/likes/:id" :paramsDesc="['user name']" radar="1" rssbud="1"/>
<RouteEn author="xyqfer" example="/twitter/likes/DIYgod" path="/twitter/likes/:id/:routeParams?" :paramsDesc="['user name', 'extra parameters, see the table above']" radar="1" rssbud="1"/>
### Keyword
<RouteEn author="DIYgod" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword" :paramsDesc="['keyword']" radar="1" rssbud="1"/>
<RouteEn author="DIYgod" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword/:routeParams?" :paramsDesc="['keyword', 'extra parameters, see the table above']" radar="1" rssbud="1"/>
### Trends
<RouteEn author="sakamossan" example="/twitter/trends/23424856" path="/twitter/trends/:woeid?" :paramsDesc="['Yahoo! Where On Earth ID. default to woeid=1 (World Wide)']" radar="1" rssbud="1"/>
## Youtube
## YouTube
::: tip Tiny Tiny RSS users please notice
@@ -207,6 +264,12 @@ Tiny Tiny RSS will add `sandbox="allow-scripts"` to all iframe elements, as a re
### Channel
::: tip
YouTube provides official RSS feeds for channels, for instance <https://www.youtube.com/feeds/videos.xml?channel_id=UCDwDMPOZfxVV0x_dz0eQ8KQ>.
:::
<RouteEn path="/youtube/channel/:id/:embed?" example="/youtube/channel/UCDwDMPOZfxVV0x_dz0eQ8KQ" :paramsDesc="['YouTube channel id', 'Default to embed the video, set to any value to disable embedding']" radar="1" rssbud="1"/>
### Playlist
+2 -2
View File
@@ -20,6 +20,6 @@ Recurring donors will be rewarded via express issue response, or even have your
We accept donations via the following ways:
- [WeChat Pay](https://i.loli.net/2019/03/23/5c950ebbc373e.png)
- [Alipay](https://i.loli.net/2019/03/23/5c950ebbc980e.png)
- [WeChat Pay](https://diygod.me/images/wx.jpg)
- [Alipay](https://diygod.me/images/zfb.jpg)
- [Paypal](https://www.paypal.me/DIYgod)
+68 -1
View File
@@ -28,7 +28,7 @@ Site
### BBC
<RouteEn author="HenryQW" example="/bbc/world-asia" path="/bbc/:channel?" :paramsDesc="['channel, default to `top stories`']">
<RouteEn author="HenryQW DIYgod" example="/bbc/world-asia" path="/bbc/:channel?" :paramsDesc="['channel, default to `top stories`']">
Provides a better reading experience (full text articles) over the official ones.
@@ -108,12 +108,59 @@ Refer to [Chicago Tribune's feed page](https://www.chicagotribune.com/about/ct-c
</RouteEn>
## ChinaFile
### Reporting & Opinion
<RouteEn author="oppilate" example="/chinafile/all" path="/chinafile/:category?" :paramsDesc="['Category, by default `all`']">
Generates full-text feeds that the official feed doesn't provide.
| All | The China NGO Project |
| --- | --------------------- |
| all | ngo |
</RouteEn>
## Financial Times
### myFT personal RSS
<RouteEn author="HenryQW" example="/ft/myft/rss-key" path="/ft/myft/:key" :paramsDesc="['the last part of myFT personal RSS address']">
::: tip tips
- Visit ft.com -> myFT -> Contact Preferences to enable personal RSS feed, see [help.ft.com](https://help.ft.com/faq/email-alerts-and-contact-preferences/what-is-myft-rss-feed/)
- Obtain the key from the personal RSS address, it looks like `12345678-abcd-4036-82db-vdv20db024b8`
:::
</RouteEn>
## NHK
### News Web Easy
<RouteEn author="Andiedie" example="/nhk/news_web_easy" path="/nhk/news_web_easy"/>
## Phoronix
### News & Reviews
<RouteEn author="oppliate" example="/phoronix/news_topic/Intel" path="/phoronix/:page/:queryOrItem?" :paramsDesc="['Page name', 'For `category` it corresponds to `item`, for other pages it\'s `q`. You may find available parameters from their navigator links. E.g. to subscribe to the category page `https://www.phoronix.com/scan.php?page=category&item=Computers`, fill in the path `/phoronix/category/Computers`']" />
## Radio Free Asia (RFA)
<RouteEn author="zphw" example="/rfa/english" path="/rfa/:language?/:channel?/:subChannel?" :paramsDesc="['language, English by default', 'channel', 'subchannel, where applicable']" />
Delivers a better experience by supporting parameter specification.
Parameters can be obtained from the official website, for instance:
`https://www.rfa.org/cantonese/news` corresponds to `/rfa/cantonese/news`
`https://www.rfa.org/cantonese/news/htm` corresponds to `/rfa/cantonese/news/htm`
## Reuters
### Channel
@@ -209,6 +256,16 @@ Provides a better reading experience (full text articles) over the official one.
</RouteEn>
## The Wall Street Journal (WSJ)
### News
<RouteEn author="oppilate" example="/wsj/en-us/opinion" path="/wsj/:lang/:category?" :paramsDesc="['Language, `en-us`, `zh-cn`, `zh-tw` are supported', 'Category, only supported in `en-us`. Supports `opinion`, `world_news`, `us_bussiness`, `market_news`, `technology`, `lifestyle`.']">
Provide full article RSS for WSJ topics.
</RouteEn>
## Yahoo
### News
@@ -226,3 +283,13 @@ Provides a better reading experience (full text articles) over the official one.
| (Empty) | world | business | entertainment | sports | health |
</RouteEn>
## Yahoo! by Author
### News
<RouteEn author="loganrockmore" example="/yahoo-author/hannah-keyser" path="/yahoo-news/:author" :paramsDesc="['Author']">
Provides all of the articles by the specified Yahoo! author.
</RouteEn>
+9 -1
View File
@@ -30,10 +30,18 @@ pageClass: routes
## UMASS Amherst
### College of Electrical and Computer Engineering News
### College of Electrical and Computer Engineering
#### News
<RouteEn author="gammapi" example="/umass/amherst/ecenews" path="/umass/amherst/ecenews" radar="1" rssbud="1"/>
#### Seminar
<RouteEn author="gammapi" example="/umass/amherst/eceseminar" path="/umass/amherst/eceseminar" radar="1" rssbud="1"/>
Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's no upcoming seminars. This is normal and will cause rsshub fail to fetch this feed.
### College of Information & Computer Sciences News
<RouteEn author="gammapi" example="/umass/amherst/csnews" path="/umass/amherst/csnews" radar="1" rssbud="1"/>
+27
View File
@@ -62,6 +62,33 @@ pageClass: routes
&lt;Route author="nczitzk" example="/gelonghui/keyword/ 早报" path="/gelonghui/keyword/:keyword" :paramsDesc="[' 搜索关键字']/>
## 金十数据
<Route author="laampui" example="/jinshi/index" path="/jinshi/index" />
## 麦肯锡中国
<Route author="laampui" example="/mckinsey/autos" path="/mckinsey/:category?" :paramsDesc="['默认为全部,见下表']">
| 汽车 | 金融服务 | 数字化 | 消费者 | 医药与医疗 | 麦肯锡全球研究院 | 全球基础材料 | 创新 | 宏观经济 | 制造业 | 人才与领导力 | 技术,媒体与通信 | 城市化与可持续发展 | 资本项目和基础设施 | 旅游、运输和物流 |
| ----- | ----------------- | ------------------- | --------- | -------------------------- | ------------------------- | ------------ | ---------- | ------------ | ------------- | ----------------- | ---------------------------- | --------------------------- | ------------------------------- | ---------------- |
| autos | banking-insurance | business-technology | consumers | healthcare-pharmaceuticals | mckinsey-global-institute | 全球基础材料 | innovation | macroeconomy | manufacturing | talent-leadership | technology-media-and-telecom | urbanization-sustainability | capital-projects-infrastructure | 交通运输与物流 |
</Route>
## 上海证券交易所
### 本所业务规则
<Route author="nczitzk" example="/sse/sserules" path="/sse/sserules/:slug?" :paramsDesc="['见下文,默认为 latest']">
将目标栏目的网址拆解为 `http://www.sse.com.cn/lawandrules/sserules/` 和后面的字段,把后面的字段中的 `/` 替换为 `-`,即为该路由的 slug
如:(最新规则)[http://www.sse.com.cn/lawandrules/sserules/latest] 的网址在 `http://www.sse.com.cn/lawandrules/sserules/` 后的字段是 `latest`,则对应的 slug 为 `latest`,对应的路由即为 `/sse/sserules/latest`
又如:(设立科创板并试点注册制规则 - 发行上市审核类)[http://www.sse.com.cn/lawandrules/sserules/tib/review] 的网址在 `http://www.sse.com.cn/lawandrules/sserules/` 后的字段是 `tib/review`,则对应的 slug 为 `tib-review`,对应的路由即为 `/sse/sserules/tib-review`
</Route>
## 世界经济论坛
### 报告
+5 -1
View File
@@ -56,9 +56,13 @@ pageClass: routes
## 停电通知
### 95598 停电查询网
<Route author="mjysci" example="/tingdiantz/95598/hb1/wh/wc/" path="/tingdiantz/95598/:province/:city/:district?" :paramsDesc="['省,2~3位拼音缩写,详情见http://www.sttcq.com/td/','市,同上', '区,同上']"/>
### 南京市
<Route author="ocleo1" example="/tingdiantz/nanjing" path="/tingdiantz/nanjing"/>
<Route author="ocleo1" example="/tingdiantz/nanjing" path="/tingdiantz/nanjing"/>
## 停水通知
+123 -23
View File
@@ -40,6 +40,51 @@ pageClass: routes
<Route author="monner-henster" example="/a9vg/a9vg" path="/a9vg/a9vg"/>
## Blizzard
### News
<Route author="nczitzk" example="/blizzard/news" path="/blizzard/news/:language?/:category?" :paramsDesc="['语言代码,见下表,默认为 en-US', '分类,见下表,默认为全部新闻']">
分类
| 分类 | 分类名 |
| -------------------- | ------------------- |
| 所有新闻 | |
| 暗黑破坏神 III | diablo3 |
| 暗黑破坏神:不朽 | diablo-immortal |
| 炉石传说 | hearthstone |
| 风暴英雄 | heroes-of-the-storm |
| 守望先锋 | overwatch |
| 星际争霸:重制版 | starcraft |
| 星际争霸 II | starcraft2 |
| 魔兽世界 | world-of-warcraft |
| 魔兽争霸 III:重制版 | warcraft3 |
| 暴雪嘉年华 | blizzcon |
| 走进暴雪 | blizzard |
语言代码
| 语言 | 语言代码 |
| -------------- | -------- |
| Deutsch | de-de |
| English (US) | en-us |
| English (EU) | en-gb |
| Español (EU) | es-es |
| Español (AL) | es-mx |
| Français | fr-fr |
| Italiano | it-it |
| Português (AL) | pt-br |
| Polski | pl-pl |
| Русский | ru-ru |
| 한국어 | ko-kr |
| ภาษาไทย | th-th |
| 日本語 | ja-jp |
| 繁體中文 | zh-tw |
| 简体中文 | zh-cn |
</Route>
## dekudeals
### 分类
@@ -112,6 +157,18 @@ pageClass: routes
<Route author="GensouSakuya kt286" example="/indienova/article" path="indienova/:type" :paramsDesc="['类型: `article` 文章,`development` 开发']"/>
## Konami
### PES Mobile 公告
<Route author="HenryQW" example="/konami/pesmobile/zh-cn/ios" path="/konami/pesmobile/:lang?/:os?" :paramsDesc="['语言,在URL中获得,如zh-cn, zh-tw, en', '操作系统,iOS 或 Android']"/>
## Liquipedia
### Dota2 战队最近比赛结果
<Route author="wzekin" example="/liquipedia/dota2/matches/Team_Aster" path="liquipedia/dota2/matches/:id" :paramsDesc="['战队名称,可在url中找到。例如:https://liquipedia.net/dota2/Team_Aster']"/>
## Maxjia News
### Dota 2
@@ -154,6 +211,14 @@ pageClass: routes
<Route author="Indexyz" example="/curseforge/files/jei" path="/curseforge/files/:project" :paramsDesc="['项目的短名或者 `Project ID`. 项目的短名可以在地址栏获取到, 例如地址为 `https://minecraft.curseforge.com/projects/non-update`, 短名就为 `non-update`. `Project ID` 可在 `Overview` 中的 `About This Project` 中找到']"/>
### Feed The Beast (FTB) 模组包更新
<Route author="gucheen" example="/feed-the-beast/modpack/ftb_presents_direwolf20_1_16" path="/feed-the-beast/modpack/:modpackEntry" :paramsDesc="['模组包的短名.']">
| 参数 | 说明 |
| ------| ------------ |
| modpackEntry | 模组包的短名从模组包的页面链接中找到,例如 `https://www.feed-the-beast.com/modpack/ftb_presents_direwolf20_1_16`,短名就是 `ftb_presents_direwolf20_1_16`。 |
</Route>
## Nintendo
### eShop 新发售游戏
@@ -212,16 +277,37 @@ pageClass: routes
<Route author="LightStrawberry" example="/psnine/index" path="/psnine/index"/>
### 新闻 - 游戏资讯
### 节点
<Route author="LightStrawberry" example="/psnine/news" path="/psnine/news"/>
### 数折-折扣信息推送
<Route author="nczitzk" example="/psnine/node/news" path="/psnine/node/:id?/:order?" :paramsDesc="['节点 id,见下表,默认为 news', '排序,可选 `date` 即最新,默认为 `obdate` 即综合排序']">
| 站务 | 活动 | 旅记 | 折扣 | 会免 |
| ---- | ----- | ------ | ---- | ---- |
| p9 | event | travel | off | plus |
| 新闻 | 攻略 | 测评 | 心得 | 开箱 |
| ---- | ----- | ------ | ---- | ------- |
| news | guide | review | exp | openbox |
| 游列 | 游计 | Ps4 | Ps5 |
| -------- | -------- | --- | --- |
| gamelist | planlist | ps4 | ps5 |
| 发米通 | Ign | Ucg |
| ------- | --- | --- |
| famitsu | ign | ucg |
</Route>
### 数折 - 折扣信息推送
<Route author="LightStrawberry" example="/psnine/shuzhe" path="/psnine/shuzhe"/>
### 闲游-二手盘信息
### 闲游 - 二手盘信息
<Route author="LightStrawberry" example="/psnine/trade" path="/psnine/trade"/>
### 游戏-新游戏奖杯信息
### 游戏 - 新游戏奖杯信息
<Route author="LightStrawberry" example="/psnine/game" path="/psnine/game"/>
@@ -258,7 +344,13 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
### Steam news
<Route author="maple3142" example="/steam/news/282800" path="/steam/news/:appids" :paramsDesc="['游戏 id']" radar="1" rssbud="1"/>
<Route author="maple3142" example="/steam/news/1091500/schinese" path="/steam/news/:appid/:language?" :paramsDesc="['游戏 id', '语言,默认简体中文']" radar="1" rssbud="1">
| 语言 (Language) | 简体中文 (Simplified Chinese) | 繁體中文 (Traditional Chinese) | 日本語 (Japanese) | 한국어 (Korean) | Български (Bulgarian) | Čeština (Czech) | Dansk (Danish) | Deutsch (German) | Español - España (Spanish - Spain) | Español - Latinoamérica (Spanish - Latin America), | Ελληνικά (Greek) | Français (French) | Italiano (Italian) | Magyar (Hungarian) | Nederlands (Dutch) | Norsk (Norwegian) | Polski (Polish) | Português (Portuguese) | Português - Brasil (Portuguese - Brazil) | Română (Romanian) | Русский (Russian) | Suomi (Finnish) | Svenska (Swedish) | Türkçe (Turkish) | Tiếng Việt (Vietnamese) | Українська (Ukrainian) |
| --------------- | ----------------------------- | ------------------------------ | ----------------- | --------------- | --------------------- | --------------- | -------------- | ---------------- | ---------------------------------- | -------------------------------------------------- | ---------------- | ----------------- | ------------------ | ------------------ | ------------------ | ----------------- | --------------- | ---------------------- | ---------------------------------------- | ----------------- | ----------------- | --------------- | ----------------- | ---------------- | ----------------------- | ---------------------- |
| | schinese | tchinese | japanese | koreana | bulgarian | czech | danish | german | spanish | latam | greek | french | italian | hungarian | dutch | norwegian | polish | portuguese | brazilian | romanian | russian | finnish | swedish | turkish | vietnamese | ukrainian |
</Route>
## SteamGifts
@@ -310,6 +402,16 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
</Route>
## 触乐
<Route author="laampui" example="/chuapp/index/daily" path="/chuapp/index/:category?" :paramsDesc="['默认为 night']">
| 每日聚焦 | 最好玩 | 触乐夜话 | 动态资讯 |
| -------- | ------ | -------- | -------- |
| daily | pcz | night | news |
</Route>
## 二柄 APP
### 新闻
@@ -330,22 +432,6 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
<Route author="KotoriK" example="/pcr/news-cn" path="/pcr/news-cn"/>
## 篝火营地
### 游戏资讯
<Route author="sintak" example="/gouhuo/news/switch" path="/gouhuo/news/:category" :paramsDesc="['资讯类型']">
| 精选 | 海外 | 原创 | PS4 | Xboxone | PC | Switch | 掌机 | 手游 | 新闻 | 评测 | 文化 | 视频 | 音频 | 折扣 |
| ---------- | -------- | ------- | --- | ------- | -- | ------ | -------- | ---------- | ---- | ------ | ------- | ----- | ----- | -------- |
| choiceness | overseas | orignal | ps4 | xboxone | pc | switch | handheld | mobilegame | news | review | culture | video | audio | discount |
</Route>
### 游戏攻略
<Route author="sintak" example="/gouhuo/strategy" path="/gouhuo/strategy"/>
## 怪物猎人世界
### 更新情报
@@ -484,6 +570,16 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
</Route>
## 游戏动力
### 游戏资讯
<Route author="wy916787036" example="/vgn" path="/vgn/:platform?" :paramsDesc="['平台,见下表,默认为全部']">
| Switch | PS4 | PC | Xbox |
| -------- | -------- | -------- | -------- |
| 1 | 2 | 3 | 4 |
</Route>
## 游戏时光
### 游戏时光新闻
@@ -500,7 +596,7 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
## 游研社
### 游研社
### 游研社 - 分类文章
<Route author="LightStrawberry" example="/yystv/category/recommend" path="/yystv/category/:category" :paramsDesc="['专栏类型']">
@@ -510,6 +606,10 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
</Route>
### 游研社 - 全部文章
<Route author="HaitianLiu" example="/yystv/docs" path="/yystv/docs" />
## 原神
### 新闻
+112 -14
View File
@@ -28,6 +28,16 @@ pageClass: routes
</Route>
### 广东省深圳市人民政府
<Route author="laoxua" example="/gov/shenzhen/xxgk/zfxxgj/tzgg" path="/gov/shenzhen/xxgk/zfxxgj/:caty" :paramsDesc="['信息类别']">
| 通知公告 | 政府采购 | 资金信息 | 重大项目 |
| :------: | :------: | :------: | :------: |
| tzgg | zfcg | zjxx | zdxm |
</Route>
## 国家税务总局
### 最新文件
@@ -65,12 +75,58 @@ pageClass: routes
<Route author="y2361547758" example="/gov/nppa/318/45948" path="/gov/nppa/:channel/:content" :paramsDesc="['栏目名id', '文章id']" radar="1" rssbud="1"/>
## 哈尔滨市科技局
### 政务公开
<Route author="XYenon" example="/gov/harbin/kjj" path="/gov/harbin/kjj"/>
## 联合国
### 安理会否决了决议
<Route author="HenryQW" example="/un/scveto" path="/un/scveto"/>
## 美国财政部
### 新闻稿
<Route author="nczitzk" example="/treasury/press-releases" path="/treasury/press-releases/:category?/:title?" :paramsDesc="['分类,见下表,默认为全部', '标题关键字,默认为空']">
分类
| Press Releases | Statements & Remarks | Readouts | Testimonies |
| -------------- | -------------------- | -------- | ----------- |
| all | statements-remarks | readouts | testimonies |
</Route>
## 美国联邦最高法院
### 辩论音频
<Route author="nczitzk" example="/us/supremecourt/argument_audio" path="/us/supremecourt/argument_audio/:year?" :paramsDesc="['年份,默认为当前年份']"/>
## 美国贸易代表办公室
### 新闻稿
<Route author="nczitzk" example="/ustr/press-releases" path="/ustr/press-releases/:year?/:month?" :paramsDesc="['年份,默认为当前年份', '月份,默认为空,即全年']">
::: tip 提示
月份处填写该月的英语表达,如 12 月 应填入 `December`。
:::
</Route>
## 美国中央情报局
### 年度信息自由法报告
<Route author="nczitzk" example="/cia/foia-annual-report" path="/cia/foia-annual-report"/>
## 泉州市跨境电子商务协会
### 新闻动态
@@ -139,6 +195,18 @@ pageClass: routes
<Route author="Yoge-Code" example="/gov/cnca/zxtz" path="/gov/cnca/zxtz"/>
## 中国农工民主党
### 新闻中心
<Route author="nczitzk" example="/ngd" path="/ngd/:slug?" :paramsDesc="['见下文']">
将目标栏目的网址拆解为 `http://www.ngd.org.cn/` 和后面的字段,去掉 `.htm` 后,把后面的字段中的 `/` 替换为 `-`,即为该路由的 slug
如:(要闻动态)[http://www.ngd.org.cn/xwzx/ywdt/index.htm] 的网址在 `http://www.ngd.org.cn/` 后的字段是 `xwzx/ywdt/index.htm`,则对应的 slug 为 `xwzx-ywdt-index`,对应的路由即为 `/ngd/xwzx-ywdt-index`
</Route>
## 中国人大网
<Route author="233yeee" example="/npc/c183" path="/npc/:caty" :paramsDesc="['分类名,支持形如`http://www.npc.gov.cn/npc/*/list.shtml`的网站,传入 npc 之后的参数']">
@@ -149,6 +217,12 @@ pageClass: routes
</Route>
## 中国庭审公开网
### 开庭信息
<Route author="Fatpandac" example="/tingshen" path="/tingshen"/>
## 中国信息通信研究院
### 白皮书
@@ -234,6 +308,32 @@ pageClass: routes
<Route author="EsuRt" example="/gov/statecouncil/briefing" path="/gov/statecouncil/briefing"/>
## 中国证券监督管理委员会
### 发审委公告
<Route author="chinobing" example="/csrc/fashenwei" path="/csrc/fashenwei"/>
### 证监会消息
<Route author="chinobing LogicJake" example="/csrc/news/zjhxwfb-xwfbh" path="/csrc/news/:suffix?" :paramsDesc="['支持形如`http://www.csrc.gov.cn/pub/newsite/*/*`的网站,将 newsite 后面的两段网址后缀以 - 连接']" />
### 申请事项进度
<Route author="hillerliao" example="/csrc/auditstatus/:apply_id" path="/csrc/auditstatus" :paramsDesc="['事项类别id, `https://neris.csrc.gov.cn/alappl/home/xkDetail` 列表中各地址的 appMatrCde 参数']"/>
## 中国政协网
### 栏目
<Route author="nczitzk" example="/cppcc" path="/cppcc/:slug?" :paramsDesc="['见下文']">
将目标栏目的网址拆解为 `http://www.cppcc.gov.cn/` 和后面的字段,去掉 `.shtml` 后,把后面的字段中的 `/` 替换为 `-`,即为该路由的 slug
如:(委员建言)[http://www.cppcc.gov.cn/zxww/newcppcc/wyjy/index.shtml] 的网址在 `http://www.cppcc.gov.cn/` 后的字段是 `zxww/newcppcc/wyjy/index.shtml`,则对应的 slug 为 `zxww-newcppcc-wyjy-index`,对应的路由即为 `/cppcc/zxww-newcppcc-wyjy-index`
</Route>
### 北京市人民政府
#### 北京教育考试院
@@ -313,20 +413,6 @@ pageClass: routes
</Route>
## 中国证券监督管理委员会
### 发审委公告
<Route author="chinobing" example="/csrc/fashenwei" path="/csrc/fashenwei"/>
### 证监会消息
<Route author="chinobing LogicJake" example="/csrc/news/zjhxwfb-xwfbh" path="/csrc/news/:suffix?" :paramsDesc="['支持形如`http://www.csrc.gov.cn/pub/newsite/*/*`的网站,将 newsite 后面的两段网址后缀以 - 连接']" />
### 申请事项进度
<Route author="hillerliao" example="/csrc/auditstatus/:apply_id" path="/csrc/auditstatus" :paramsDesc="['事项类别id, `https://neris.csrc.gov.cn/alappl/home/xkDetail` 列表中各地址的 appMatrCde 参数']"/>
## 中国驻外使领馆
### 大使馆重要通知
@@ -489,6 +575,18 @@ pageClass: routes
<Route author="MisteryMonster" example="/gov/moa/sjzxfb" path="/gov/moa/sjzxfb"/>
## 中华人民共和国人力资源和社会保障部
### 社保减免
<Route author="ncziztk" example="/gov/mohrss/sbjm" path="/gov/mohrss/sbjm/:category?" :paramsDesc="['分类,见下表']">
| 要点新闻 | 政策文件 | 工作动态 | 媒体报道 | 图片新闻 |
| -------- | -------- | -------- | -------- | -------- |
| ydxw | zcwj | gzdt | mtbd | tpxw |
</Route>
## 中华人民共和国商务部
### 政务公开
+111 -21
View File
@@ -106,6 +106,35 @@ $ docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=3600 -e GITHUB_ACCESS
更多配置项请看 [#配置](#pei-zhi)
## Ansible 部署
这个 Ansible playbook 包括了 RSSHub, Redis, browserless (依赖 Docker) 以及 Caddy 2
目前只支持 Ubuntu 20.04
需要 sudo 权限和虚拟化能力(Docker 将会被自动安装)
### 安装
```bash
sudo apt update
sudo apt install ansible
git clone https://github.com/DIYgod/RSSHub.git ~/RSSHub
cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# 当提示输入 domain name 的时候,输入该主机所使用的域名
# 举例:如果您的 RSSHub 用户使用 https://rsshub.exmaple.com 访问您的 RSSHub 实例,输入 rsshub.exmaple.com(去掉 https://)
```
### 更新
```bash
cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# 当提示输入 domain name 的时候,输入该主机所使用的域名
# 举例:如果您的 RSSHub 用户使用 https://rsshub.exmaple.com 访问您的 RSSHub 实例,输入 rsshub.exmaple.com(去掉 https://)
```
## 手动部署
部署 `RSSHub` 最直接的方式,您可以按照以下步骤将 `RSSHub` 部署在您的电脑、服务器或者其他任何地方
@@ -207,7 +236,7 @@ in pkgs.stdenv.mkDerivation {
### 自动更新部署
1. 将 RSSHub [分叉(fork)](https://github.com/login?return_to=%2FDIYgod%2FRSSHub) 到自己的账户下。
2. 把自己的分叉部署到 Heroku:`https://heroku.com/deploy?template=URL`,其中 `URL` 改为分叉地址 (例如 `https://github.com/USERNAME/RSSHub`)。
2. 把自己的分叉部署到 Heroku:`https://heroku.com/deploy?template=URL`,其中 `URL` 改为分叉地址 (例如 `https://github.com/USERNAME/RSSHub`)。
3. 检查 Heroku 设置,随代码库更新自动部署。
4. 安装 [Pull](https://github.com/apps/pull) 应用,定期将 RSSHub 改动自动同步至你的分叉。
@@ -322,27 +351,25 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式
`REDIS_URL`: Redis 连接地址(redis 缓存类型时有效),默认为 `redis://localhost:6379/`
`REDIS_PASSWORD`: Redis 连接密码(redis 缓存类型时有效)
### 代理配置
部分路由反爬严格,可以配置使用代理抓取。
可通过**代理 URI**或**代理选项**两种方式来配置代理,当两种配置方式同时被设置时,RSSHub 将会使用**代理 URI**中的配置。
可通过**代理 URI **或**代理选项**两种方式来配置代理,当两种配置方式同时被设置时,RSSHub 将会使用**代理 URI **中的配置。
#### 代理 URI
`PROXY_URI`: 代理 URI,支持 socks4, socks5, http, https
> 代理 URI 的格式为:
> 代理 URI 的格式为:
>
> - `{protocol}://{host}:{port}`
> - `{protocol}://{username}:{password}@{host}:{port}` (带身份凭证)
> - `{protocol}://{username}:{password}@{host}:{port}` (带身份凭证)
>
> 一些示例:
> 一些示例:
>
> - `socks4://127.0.0.1:1080`
> - `socks5://user:pass@127.0.0.1:1080` (用户名为 `user`, 密码为 `pass`)
> - `socks5://user:pass@127.0.0.1:1080` (用户名为 `user`, 密码为 `pass`)
> - `socks://127.0.0.1:1080` (protocol 为 socks 时表示 `socks5`)
> - `http://127.0.0.1:8080`
> - `http://user:pass@127.0.0.1:8080`
@@ -372,6 +399,10 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式
`HTTP_BASIC_AUTH_PASS`: Http basic authentication 密码,默认为 `passw0rd`,请务必修改
### 跨域请求
RSSHub 默认对跨域请求限制为当前连接所在的域名,即不允许跨域。可以通过 `ALLOW_ORIGIN: *` 或者 `ALLOW_ORIGIN: www.example.com` 以对跨域访问进行修改。
### 访问控制配置
RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行访问控制。开启任意选项将会激活全局访问控制,没有访问权限将会导致访问被拒绝。同时可以通过 `ALLOW_LOCALHOST: true` 赋予所有本地 IP 访问权限。
@@ -418,7 +449,9 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
`REQUEST_RETRY`: 请求失败重试次数,默认 `2`
`DEBUG_INFO`: 是否在首页显示路由信息,默认 `true`
`REQUEST_TIMEOUT`: 请求超时毫秒数,默认 `3000`
`DEBUG_INFO`: 是否在首页显示路由信息。值为非 `true` `false` 时,在请求中带上参数 `debug` 开启显示,例如:<https://rsshub.app/?debug=value_of_DEBUG_INFO> 。默认 `true`
`NODE_ENV`: 是否显示错误输出,默认 `production` (即关闭输出)
@@ -430,6 +463,8 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
`SENTRY`: [Sentry](https://sentry.io) dsn,用于错误追踪
`SENTRY_ROUTE_TIMEOUT`: 路由耗时超过此毫秒值上报 Sentry,默认 `3000`
`DISALLOW_ROBOT`: 阻止搜索引擎收录,默认开启,设置 false 或 0 关闭
`HOTLINK_TEMPLATE`: 用于处理描述中图片的链接,绕过防盗链等限制,留空不生效。用法参考 [#2769](https://github.com/DIYgod/RSSHub/issues/2769)。可以使用 [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL#Properties) 的所有属性,格式为 JS 变量模板。例子:`${protocol}//${host}${pathname}`, `https://i3.wp.com/${host}${pathname}`
@@ -464,11 +499,11 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- twitter 全部路由:[申请地址](https://apps.twitter.com)
- `TWITTER_CONSUMER_KEY`: Twitter Consumer Key,支持多个 key,用英文逗号 `,` 隔开
- `TWITTER_CONSUMER_KEY`: Twitter API key,支持多个 key,用英文逗号 `,` 隔开
- `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret,支持多个 key,用英文逗号 `,` 隔开,顺序与 key 对应
- `TWITTER_CONSUMER_SECRET`: Twitter API key secret,支持多个 key,用英文逗号 `,` 隔开,顺序与 key 对应
- `TWITTER_TOKEN_{id}`: 对应 id 的 Twitter token,`{id}` 替换为 id,值为 `consumer_key consumer_secret access_token access_token_secret` 用逗号隔开,即:`{consumer_key},{consumer_secret},{access_token},{access_token_secret}`
- `TWITTER_TOKEN_{handler}`: 对应 Twitter 用户名生成的 token,`{handler}` 替换为用于生成该 token 的 Twitter 用户名,值为 `Twitter API key, Twitter API key secret, Access token, Access token secret` 用逗号隔开,例如:`TWITTER_TOKEN_RSSHub=bX1zry5nG4d1RbESQbnADpVIo,2YrD8qo9sXbB8VlYfVmo1Qtw0xsexnOliU5oZofq7aPIGou0Xx,123456789-hlkUHFYmeXrRcf6SEQciP8rP4lzmRgMgwdqIN9aK,pHcPnfa28rCIKhSICUCiaw9ppuSSl7T2f3dnGYpSM0bod`
- youtube 全部路由:[申请地址](https://console.developers.google.com/)
@@ -484,7 +519,10 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- bilibili 用户关注视频动态路由
- `BILIBILI_COOKIE_{uid}`: 对应 uid 的 b 站用户登录后的 Cookie 值,`{uid}` 替换为 uid,如 `BILIBILI_COOKIE_2267573`,获取方式:1. 打开 <https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8> 2. 打开控制台 3. 切换到 Network 面板 4. 刷新 5. 点击 dynamic_new 请求 6. 找到 Cookie
- `BILIBILI_COOKIE_{uid}`: 对应 uid 的 b 站用户登录后的 Cookie 值,`{uid}` 替换为 uid,如 `BILIBILI_COOKIE_2267573`,获取方式:
1. 打开 <https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8>
2. 打开控制台,切换到 Network 面板,刷新
3. 点击 dynamic_new 请求,找到 Cookie。(Key:`SESSDATA`)
- 语雀 全部路由:[注册地址](https://www.yuque.com/register)
@@ -498,7 +536,11 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- 吹牛部落 栏目更新
- `CHUINIU_MEMBER`: 吹牛部落登录后的 x-member,获取方式:1. 登陆后点开文章正文 2. 打开控制台 3. 刷新 4. 找到 <http://api.duanshu.com/h5/content/detail/> 开头的请求 5. 找到请求头中的 x-member
- `CHUINIU_MEMBER`: 吹牛部落登录后的 x-member,获取方式
1. 登陆后点开文章正文
2. 打开控制台,刷新
3. 找到 <http://api.duanshu.com/h5/content/detail/> 开头的请求
4. 找到请求头中的 x-member
- 微博 个人时间线路由:[申请地址](https://open.weibo.com/connect)
@@ -512,6 +554,10 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- `MASTODON_API_ACCESS_TOKEN`: 用户 access token, 申请应用后,在应用配置页可以看到申请者的 access token
- `MASTODON_API_ACCT_DOMAIN`: 该实例本地用户 acct 标识的域名
- MiniFlux 全部路由:
- `MINIFLUX_INSTANCE`: 用户所用的实例,默认为 MiniFlux 官方提供的 [付费服务地址](https://reader.miniflux.app)
- `MINIFLUX_TOKEN`: 用户的 API 密钥,请登录所用实例后于 `设置` -> `API 密钥` -> `创建一个新的 API 密钥` 处获取
- 饭否 全部路由:[申请地址](https://github.com/FanfouAPI/FanFouAPIDoc/wiki/Oauth)
- `FANFOU_CONSUMER_KEY`: 饭否 Consumer Key
@@ -525,7 +571,11 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- 北大未名 BBS 全站十大
- `PKUBBS_COOKIE`: BBS 注册用户登录后的 Cookie 值,获取方式:1. 登录后打开论坛首页 2. 打开控制台 3. 刷新 4. 找到 <https://bbs.pku.edu.cn/v2/home.php> 请求 5. 找到请求头中的 Cookie
- `PKUBBS_COOKIE`: BBS 注册用户登录后的 Cookie 值,获取方式:
1. 登录后打开论坛首页
2. 打开控制台, 刷新
3. 找到 <https://bbs.pku.edu.cn/v2/home.php> 请求
4. 找到请求头中的 Cookie
- nhentai torrent: [注册地址](https://nhentai.net/register/)
@@ -534,11 +584,11 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- discuz cookies 设定
- `DISCUZ_COOKIE_{cid}`: 某 Discuz 驱动的论坛,用户注册后的 Cookie 值,cid 可自由设定,取值范围[00, 99], 使用 discuz 通用路由时,通过指定 cid 来调用该 cookie
- `DISCUZ_COOKIE_{cid}`: 某 Discuz 驱动的论坛,用户注册后的 Cookie 值,cid 可自由设定,取值范围 [00, 99], 使用 discuz 通用路由时,通过指定 cid 来调用该 cookie
- Sci-hub 设置,用于科学期刊路由。
- `SCIHUB_HOST`: 可访问的 sci-hub 镜像地址,默认为 `https://sci-hub.tw`。
- `SCIHUB_HOST`: 可访问的 sci-hub 镜像地址,默认为 `https://sci-hub.se`。
- 端传媒设置,用于获取付费内容全文:
@@ -548,13 +598,25 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
Web 版认证 token 和 iOS 内购回执认证 token 只需选择其一填入即可。如果你在进行上述操作时遇到困难,亦可选择在环境设置中填写明文的用户名和密码:
- `INITIUM_USERNAME`: 端传媒用户名 (邮箱)
- `INITIUM_USERNAME`: 端传媒用户名 (邮箱)
- `INITIUM_PASSWORD`: 端传媒密码
- Instagram:
- `IG_USERNAME`: Instagram 用户名。
- `IG_PASSWORD`: Instagram 密码。
- `IG_PROXY`: Instagram 代理 URL。
注意,暂不支持两步验证。
- BTBYR
- `BTBYR_HOST`: 支持 ipv4 访问的 BTBYR 镜像,默认为原站 `https://bt.byr.cn/`。
- `BTBYR_COOKIE`: 注册用户登录后的 Cookie 值,获取方式:1. 登录后打开网站首页 2. 打开控制台 3. 刷新 4. 找到 <https://bt.byr.cn/index.php> 请求 5. 找到请求头中的 Cookie
- `BTBYR_COOKIE`: 注册用户登录后的 Cookie 值,获取方式:
1. 登录后打开网站首页
2. 打开控制台,刷新
3. 找到 <https://bt.byr.cn/index.php> 请求
4. 找到请求头中的 Cookie
- 小宇宙:需要 App 登陆后抓包获取相应数据。
@@ -573,8 +635,36 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
- 喜马拉雅
- `XIMALAYA_TOKEN`: 对应 cookie 中的 `1&_token`,获取方式:1. 登陆喜马拉雅网页版 2. 查找名称为`1&_token`的`cookie`,其内容即为`XIMALAYA_TOKEN`的值(即在`cookie` 中查找 `1&_token=***;`,并设置 `XIMALAYA_TOKEN = ***`)
- `XIMALAYA_TOKEN`: 对应 cookie 中的 `1&_token`,获取方式:
1. 登陆喜马拉雅网页版
2. 打开控制台,刷新
3. 查找名称为`1&_token`的`cookie`,其内容即为`XIMALAYA_TOKEN`的值(即在`cookie` 中查找 `1&_token=***;`,并设置 `XIMALAYA_TOKEN = ***`)
- 4399 论坛
- `GAME_4399`: 对应登录后的 cookie 值,获取方式:1. 在 4399 首页登录. 2. 打开开发者工具,切换到 Network 面板. 3. 刷新 4. 查找`www.4399.com`的访问请求,点击请求,在右侧 Headers 中找到 Cookie.
- `GAME_4399`: 对应登录后的 cookie 值,获取方式:
1. 在 4399 首页登录。
2. 打开开发者工具,切换到 Network 面板,刷新
3. 查找`www.4399.com`的访问请求,点击请求,在右侧 Headers 中找到 Cookie.
- 滴答清单
- `DIDA365_USERNAME`: 滴答清单用户名
- `DIDA365_PASSWORD`: 滴答清单密码
- 知乎用户关注时间线
- `ZHIHU_COOKIES`: 知乎登录后的 cookie 值.
1. 可以在知乎网页版的一些请求的请求头中找到,如 `GET /moments` 请求头中的 `cookie` 值.
- Wordpress
- `WORDPRESS_CDN`: 用于中转 http 图片链接。可供考虑的服务见下表:
| url | backbone |
| ---------------------------------------- | ------------ |
| <https://imageproxy.pimg.tw/resize?url=> | akamai |
| <https://images.weserv.nl/?url=> | cloudflare |
| <https://pic1.xuehuaimg.com/proxy/> | cloudflare |
| <https://cors.netnr.workers.dev/> | cloudflare |
| <https://netnr-proxy.openode.io/> | digitalocean |
+10
View File
@@ -58,6 +58,16 @@ pageClass: routes
</Route>
## Deloitte
<Route author="laampui" example="/deloitte/industries/consumer" path="/deloitte/industries/:category?" :paramsDesc="['默认为 energy-resources-industrials']">
| 消费行业 | 能源、资源及工业行业 | 金融服务行业 | 政府及公共服务 | 生命科学与医疗行业 | 科技、传媒及电信行业 |
| -------- | ---------------------------- | ------------------ | -------------------------- | ------------------------ | ----------------------------------- |
| consumer | energy-resources-industrials | financial-services | government-public-services | life-sciences-healthcare | technology-media-telecommunications |
</Route>
## elife
### 最新成果
+2 -2
View File
@@ -22,7 +22,7 @@ pageClass: routes
### 直播分区
<Route author="Qixingchen" example="/bilibili/live/area/143/online" path="/bilibili/live/area/:areaID/:order" :paramsDesc="['分区 ID 分区增删较多, 可通过 [分区列表](https://api.live.bilibili.com/room/v1/Area/getList) 查询', '排序方式, live_time 开播时间, online 人气']">
<Route author="Qixingchen" example="/bilibili/live/area/207/online" path="/bilibili/live/area/:areaID/:order" :paramsDesc="['分区 ID 分区增删较多, 可通过 [分区列表](https://api.live.bilibili.com/room/v1/Area/getList) 查询', '排序方式, live_time 开播时间, online 人气']">
::: warning 注意
@@ -42,7 +42,7 @@ pageClass: routes
### 直播间开播
<Route author="SettingDust xyqfer" example="/huya/live/edmunddzhang" path="/huya/live/:id" :paramsDesc="['直播间id或主播名(有一些id是名字,如上)']"/>
<Route author="SettingDust xyqfer" example="/huya/live/edmunddzhang" path="/huya/live/:id" :paramsDesc="['直播间id或主播名(有一些id是名字,如上)']" radar="1" rssbud="1"/>
## 浪 Play (原 kingkong) 直播
+294 -22
View File
@@ -4,6 +4,102 @@ pageClass: routes
# 音视频
## 141JAV
::: tip 提示
官方提供的订阅源不支持 BT 下载订阅,地址为 <https://141jav.com/feeds/>
:::
### 141JAV BT
<Route author="cgkings" example="/141jav/popular/30" path="/141jav/:type/:key?" :paramsDesc="['类型', '关键词']" supportBT="1" radar="1">
**类型**
| 最新 | 热门 | 随机 | 指定演员 | 指定标签 | 指定日期 |
| ---- | ------- | ------ | -------- | -------- | -------- |
| new | popular | random | actress | tag | day |
**关键词**
| 空 | 日期范围 | 演员名 | 标签名 | 日期 |
| -- | ----------- | ------------ | -------------- | -------- |
| | 7 / 30 / 60 | Yua%20Mikami | Adult%20Awards | YYYYMMDD |
**示例说明**
- `/141jav/new`
仅当类型为 `new` `popular` 或 `random` 时关键词可为 **空**
- `/141jav/popular/30`
`popular` `random` 类型的关键词可填写 `7` `30` 或 `60` 三个 **日期范围** 之一
- `/141jav/actress/Yua%20Mikami`
`actress` 类型的关键词必须填写 **演员名** ,可在 [此处](https://141jav.com/actress/) 演员单页链接中获取
- `/141jav/tag/Adult%20Awards`
`tag` 类型的关键词必须填写 **标签名** 且标签中的 `/` 必须替换为 `%2F` ,可在 [此处](https://141jav.com/tag/) 标签单页链接中获取
- `/141jav/day/20200730`
`day` 类型的关键词必须填写 **日期** ,按照示例写成形如 `20200730` 的格式
</Route>
## 141PPV
::: tip 提示
官方提供的订阅源不支持 BT 下载订阅,地址为 <https://141ppv.com/feeds/>
:::
### 141PPV BT
<Route author="cgkings" example="/141ppv/popular/30" path="/141ppv/:type/:key?" :paramsDesc="['类型', '关键词']" supportBT="1" radar="1">
**类型**
| 最新 | 热门 | 随机 | 指定演员 | 指定标签 | 指定日期 |
| ---- | ------- | ------ | -------- | -------- | -------- |
| new | popular | random | actress | tag | day |
**关键词**
| 空 | 日期范围 | 演员名 | 标签名 | 日期 |
| -- | ----------- | ------------ | -------------- | -------- |
| | 7 / 30 / 60 | Yua%20Mikami | Adult%20Awards | YYYYMMDD |
**示例说明**
- `/141ppv/new`
仅当类型为 `new` `popular` 或 `random` 时关键词可为 **空**
- `/141ppv/popular/30`
`popular` `random` 类型的关键词可填写 `7` `30` 或 `60` 三个 **日期范围** 之一
- `/141ppv/actress/Yua%20Mikami`
`actress` 类型的关键词必须填写 **演员名** ,可在 [此处](https://141ppv.com/actress/) 演员单页链接中获取
- `/141ppv/tag/Adult%20Awards`
`tag` 类型的关键词必须填写 **标签名** 且标签中的 `/` 必须替换为 `%2F` ,可在 [此处](https://141ppv.com/tag/) 标签单页链接中获取
- `/141ppv/day/20200730`
`day` 类型的关键词必须填写 **日期** ,按照示例写成形如 `20200730` 的格式
</Route>
## 2048 核基地
### 论坛更新
@@ -12,9 +108,9 @@ pageClass: routes
## 60-Second Science - Scientific American
### Transcript
<Route author="emdoe" example="/60s-science" path="/60s-science"/>
<Route author="emdoe" example="/60s-science/transcript" path="/60s-science/transcript"/>
输出 Transcript 从而提供比官方(podcast)更好的使用体验。
## 99% Invisible
@@ -63,6 +159,25 @@ pageClass: routes
:::
## CNTV 栏目
::: tip 提示
栏目 ID 查找示例:
打开栏目具体某一期页面,F12 控制台输入`column_id`得到栏目 ID。
:::
<Route author="WhoIsSure" example="/cntv/TOPC1451528971114112" path="/cntv/:column" :paramsDesc="['栏目ID, 可在对应CNTV栏目页面找到']">
栏目
| 新闻联播 | 新闻周刊 | 天下足球 |
| -------------------- | -------------------- | -------------------- |
| TOPC1451528971114112 | TOPC1451559180488841 | TOPC1451551777876756 |
</Route>
## EZTV
::: tip 提示
@@ -139,9 +254,9 @@ pageClass: routes
分类
| 有碼 | 無碼 | 歐美 | FC2 |
| -------- | ---------- | ------- | --- |
| censored | uncensored | western | fc2 |
| 有碼 | 無碼 | 歐美 |
| -------- | ---------- | ------- |
| censored | uncensored | western |
排序
@@ -171,9 +286,9 @@ pageClass: routes
分类
| 有碼 | 無碼 | 歐美 | FC2 |
| -------- | ---------- | ------- | --- |
| censored | uncensored | western | fc2 |
| 有碼 | 無碼 | 歐美 |
| -------- | ---------- | ------- |
| censored | uncensored | western |
</Route>
@@ -183,9 +298,9 @@ pageClass: routes
分类
| 有碼 | 無碼 | 歐美 | FC2 |
| -------- | ---------- | ------- | --- |
| censored | uncensored | western | fc2 |
| 有碼 | 無碼 | 歐美 |
| -------- | ---------- | ------- |
| censored | uncensored | western |
时间
@@ -325,6 +440,18 @@ pageClass: routes
<Route author="hoilc" example="/mqube/tag/UTAU" path="/mqube/tag/:tag" :paramsDesc="['标签名称, 可参考`https://mqube.net/search/tag`']" radar="1" rssbud="1"/>
## NEW 字幕组
### 分类
<Route author="nczitzk" example="/newzmz" path="/newzmz/:category?" :paramsDesc="['分类,见下表,默认为最近更新']">
| 最近更新 | 剧集推荐 | 电影推荐 | 纪录片推荐 | 动画推荐 | 真人秀推荐 |
| -------- | -------- | -------- | ---------- | -------- | ---------- |
| 1 | 2 | 3 | 4 | 5 | 6 |
</Route>
## Nyaa
### 搜索结果
@@ -411,6 +538,16 @@ pageClass: routes
<Route author="I2IMk" example="/pornhub/category_url/video%3Fc%3D15%26o%3Dmv%26t%3Dw%26cc%3Djp" path="/pornhub/category_url/:url?" :paramsDesc="['相对路径, `pornhub.com/` 后的部分, 需手动 URL 编码']"/>
## Prestige 蚊香社
### 系列作品
<Route author="minimalistrojan" example="/prestige-av/series/847" path="/prestige-av/series/:mid/:sort?" :paramsDesc="['系列编号', '排序方式,缺省为 near(最新)']"/>
| 人气 | 最新 | 发售日期 | 标题顺序 | 价格升序 | 价格降序 |
| ------- | ---- | -------- | -------- | -------- | -------- |
| popular | near | date | title | low | high |
## rs05 人生 05 电影
### rs05 电影列表
@@ -443,13 +580,16 @@ pageClass: routes
<Route author="fallenhh" example="/soundcloud/tracks/angeart" path="/soundcloud/tracks/:user" :paramsDesc="['用户名']" />
## subHD.tv - 最新字幕
<Route author="laampui" example="/subhd/newest" path="/subhd/newest" />
## Yahoo! テレビ
### 番組検索
<Route author="sakamossan" example="/yahoo-jp-tv/%E8%8A%B1%E6%BE%A4%E9%A6%99%E8%8F%9C" path="/yahoo-jp-tv/:query" :paramsDesc="['搜索查询']"/>
## Youtube
## YouTube
见 [#youtube](/social-media.html#youtube)
@@ -463,6 +603,74 @@ pageClass: routes
<Route author="ranpox" example="/iqiyi/dongman/a_19rrh1sifx" path="/iqiyi/dongman/:id" :paramsDesc="['动漫 id, 可在该动漫主页 URL 中找到(不包括`.html`)']"/>
## 哔嘀影视
### 首页
<Route author="nczitzk" example="/bde4" path="/bde4/:type?/:caty?/:area?/:year?/:order?" :paramsDesc="['资源分类,见下表,默认为 `all` 即不限', '影视类型,见下表,默认为 `all` 即不限','制片地区,见下表,默认为 `all` 即不限','上映时间,此处填写年份不小于2000,默认为 `all` 即不限','影视排序,见下表,默认为更新时间']">
#### 资源分类
| 不限 | 电影 | 电视剧 |
| ---- | ---- | ------ |
| all | 0 | 1 |
#### 影视类型
| 不限 | 动作 | 爱情 | 喜剧 | 科幻 | 恐怖 |
| ---- | ------- | ------ | ---- | ------ | ------ |
| all | dongzuo | aiqing | xiju | kehuan | kongbu |
| 战争 | 武侠 | 魔幻 | 剧情 | 动画 | 惊悚 |
| --------- | ----- | ------ | ------ | ------- | -------- |
| zhanzheng | wuxia | mohuan | juqing | donghua | jingsong |
| 3D | 灾难 | 悬疑 | 警匪 | 文艺 | 青春 |
| -- | ------ | ------ | ------- | ----- | -------- |
| 3D | zainan | xuanyi | jingfei | wenyi | qingchun |
| 冒险 | 犯罪 | 纪录 | 古装 | 奇幻 | 国语 |
| ------- | ------ | ---- | -------- | ------ | ----- |
| maoxian | fanzui | jilu | guzhuang | qihuan | guoyu |
| 综艺 | 历史 | 运动 | 原创压制 |
| ------ | ----- | ------- | ---------- |
| zongyi | lishi | yundong | yuanchuang |
| 美剧 | 韩剧 | 国产电视剧 | 日剧 | 英剧 | 德剧 |
| ----- | ----- | ---------- | ---- | ------ | ---- |
| meiju | hanju | guoju | riju | yingju | deju |
| 俄剧 | 巴剧 | 加剧 | 西剧 | 意大利剧 | 泰剧 |
| ---- | ---- | ----- | ---- | -------- | ----- |
| eju | baju | jiaju | xiju | yidaliju | taiju |
| 港台剧 | 法剧 | 澳剧 |
| --------- | ---- | ---- |
| gangtaiju | faju | aoju |
#### 制片地区
| 大陆 | 中国香港 | 中国台湾 |
| ---- | -------- | -------- |
| 美国 | 英国 | 日本 | 韩国 | 法国 |
| ---- | ---- | ---- | ---- | ---- |
| 印度 | 德国 | 西班牙 | 意大利 | 澳大利亚 |
| ---- | ---- | ------ | ------ | -------- |
| 比利时 | 瑞典 | 荷兰 | 丹麦 | 加拿大 | 俄罗斯 |
| ------ | ---- | ---- | ---- | ------ | ------ |
#### 影视排序
| 更新时间 | 豆瓣评分 |
| -------- | -------- |
| 0 | 1 |
</Route>
## 播客 IBC 岩手放送| IBC ラジオ イヤーマイッタマイッタ
### IBC 岩手放送| IBC ラジオ イヤーマイッタマイッタ
@@ -571,6 +779,10 @@ pageClass: routes
<Route author="FlashWingShadow" example="/missevan/drama/28499" path="/missevan/drama/:id" :paramsDesc="['剧集 id,在剧集主页 URL 中可以找到']"/>
### 最新广播剧
<Route author="nczitzk" example="/missevan/drama/latest" path="/missevan/drama/latest"/>
## 猫眼电影
### 正在热映
@@ -647,6 +859,26 @@ pageClass: routes
</Route>
## 深影译站
### 首页
<Route author="nczitzk" example="/shinybbs" path="/shinybbs" />
### 剧集类型
<Route author="nczitzk" example="/shinybbs/62" path="/shinybbs/:id?" :paramsDesc="['类型 id,见下表']">
| 英美剧 | 日韩剧 | 小语种 |
| ------ | ------ | ------ |
| 62 | 140 | 2 |
</Route>
### 最新作品
<Route author="nczitzk" example="/shinybbs/latest" path="/shinybbs/latest" />
## 腾讯视频
### 播放列表
@@ -671,31 +903,45 @@ pageClass: routes
<Route author="magic-akari" example="/ncm/djradio/347317067" path="/ncm/djradio/:id" :paramsDesc="['节目 id, 可在电台节目页 URL 中找到']" supportPodcast="1" />
## 西瓜视频
::: tip Tiny Tiny RSS 用户请注意
Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性,导致无法加载西瓜视频内嵌视频,如果需要使用内嵌视频请为 Tiny Tiny RSS 安装 [remove_iframe_sandbox](https://github.com/DIYgod/ttrss-plugin-remove-iframe-sandbox) 插件
:::
### 用户视频投稿
<Route author="FlashWingShadow" example="/ixigua/user/video/4234740937" path="/ixigua/user/video/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在用户主页中找到', '默认为开启内嵌视频, 任意值为关闭']"/>
## 喜马拉雅
### 专辑
### 专辑(不输出 ShowNote)
<Route author="lengthmin jjeejj prnake" example="/ximalaya/album/299146" path="/ximalaya/album/:id/:all?" :paramsDesc="['专辑 id, 可在对应专辑页面的 URL 中找到','是否需要获取全部节目,默认不获取,填入该字段则视为获取']" supportPodcast="1" radar="1" rssbud="1">
<Route author="lengthmin jjeejj prnake" example="/ximalaya/album/299146" path="/ximalaya/album/:id/:all?" :paramsDesc="['专辑 id, 可在对应专辑页面的 URL 中找到','是否需要获取全部节目,填入 `1`、`true`、`all` 视为获取所有节目,填入其他则不获取。']" supportPodcast="1" radar="1" rssbud="1" selfhost="1">
目前喜马拉雅的 API 只能一集一集的获取各节目上的 ShowNote,会极大的占用系统资源,所以默认为不获取节目的 ShowNote。下方有一个新的路径可选获取 ShowNote。
::: warning 注意
专辑 id 是跟在**分类拼音**后的那个 id, 不要输成某集的 id 了
**付费内容需要登陆才能收听,详情见部署页面的配置模块**
目前支持泛用型播客订阅的[输出格式](https://docs.rsshub.app/#输出格式)中标明的格式只有 rss 支持,也就是说你**只能使用**以下类型的链接来订阅播客:
- `https://rsshub.app/ximalaya/album/*`
- `https://rsshub.app/ximalaya/album/*.rss`
**付费内容需要配置好已购买账户的 token 才能收听,详情见部署页面的配置模块**
:::
</Route>
### 专辑(输出 ShowNote)
<Route author="lengthmin jjeejj prnake" example="/ximalaya/album/39488639/0/shownote" path="/ximalaya/album/:id/:all/:shownote?" :paramsDesc="['专辑 id, 可在对应专辑页面的 URL 中找到','是否需要获取全部节目,填入 `1`、`true`、`all` 视为获取所有节目,填入其他则不获取。', '是否需要获取节目的 ShowNote,填入 `1`、`true`,`shownote` 视为获取,填入其他则不获取。']" supportPodcast="1" selfhost="1">
</Route>
## 小宇宙
### 发现
<Route author="prnake" example="/xiaoyuzhou" path="/xiaoyuzhou">
<Route author="prnake" example="/xiaoyuzhou" path="/xiaoyuzhou" selfhost="1">
::: warning 注意
@@ -766,3 +1012,29 @@ pageClass: routes
例如,路由 `/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>
+767 -25
View File
File diff suppressed because it is too large Load Diff
+87 -12
View File
@@ -4,6 +4,18 @@ pageClass: routes
# 其他
## 4399 论坛
### 4399 论坛
<Route author="DIYgod" example="/forum4399/mtag-83932" path="/forum4399/:mtag" :paramsDesc="['mtag,必选-论坛网址最后的mtag字段']" selfhost="1"/>
::: warning 注意
需要用户 cookie 值,详情见部署页面的配置模块。
:::
</Route>
## acwifi 路由器交流
### 新闻
@@ -97,6 +109,16 @@ pageClass: routes
<Route author="ntzyz" example="/dhl/12345678" path="/dhl/:shipment_id" :paramsDesc="['运单号']"/>
## Grand-Challenge
### Challenge 列表
<Route author="WhoIsSure" example="/grandchallenge/challenges" path="/grandchallenge/challenges"/>
### 用户参加的 Challenge
<Route author="WhoIsSure" example="/grandchallenge/user/Isensee" path="/grandchallenge/user/:id" :paramsDesc="['用户ID,必选-用户页面网址里面的用户ID']"/>
## HackerOne
### HackerOne Hacker Activity
@@ -121,6 +143,51 @@ pageClass: routes
<Route author="proletarius101" example="/iyouport/osint" path="/iyouport/:category?"/>
## MiniFlux
因需设置 API Key,故请自行架设 RSSHub。API 密钥则请于 MiniFlux 实例中的 `设置` -> `API密钥` -> `创建一个新的API密钥` 处获取。
### 订阅列表
<Route author="emdoe" example="/miniflux/subscription/categories=科技,影音" path="/miniflux/subscription/:parameters?" :paramsDesc="['分类名或分类 ID 或/且 订阅源名称或订阅源 ID']" selfhost="1">
1. 如无指定参数,默认输出全部订阅源
2. 分类 ID 或订阅源 ID 请于`分类`(快捷键 `g` `c`)或`源`(快捷键 `g` `f`)页面获取,每个分类(或订阅源)的网址即显示其 ID 信息。
3. 支持分类名称和分类 ID,如需输出多个分类,请重复输入 `category=` 并用 `&` 连接,或者不同的分类名之间直接用**英文**逗号连接。举例来说,可以通过 `/miniflux/subscription/category=科技&category=1` 或者 `/miniflux/subscription/categories=科技,1` 实现订阅。
4. 支持指定订阅源名称或订阅源 ID,方法与分类的设定类似。举例来说,可以通过 `/miniflux/subscription/feed=1&feed=Archdaily` 或者 `/miniflux/subscription/feeds=1,Archdaily` 实现订阅。
5. 支持同时指定订阅源信息和分类信息,将输出满足分类选项的订阅源信息。考虑一例:通过 `/miniflux/subscription/feeds=1,archdaily&category=art,7`,则如果订阅源 ID 为 1 或者订阅源名称为 ArchDaily 确实在分类 `art` 或者分类 ID 为 7 的分类下,则输出该订阅源信息。
</Route>
### 获取订阅源内容
<Route author="emdoe" example="/miniflux/feeds=1&2&3/mark=read&limit=7&status=unread" path="/miniflux/:feeds/:parameters?" :paramsDesc="['订阅源 ID 或获取全部', '过滤及设置参数,多个请用 `&` 连接']" selfhost="1">
1. 支持获取全部内容:即可通过 `/miniflux/all` 或 `/miniflux/default` 等关键字获取全部订阅源下的内容。
2. 支持通过订阅源的 ID 获取指定订阅源的订阅内容,订阅源 ID 请于`源`(快捷键 `g` `f`)所在的页面获取,每个分类(或订阅源)的网址即显示其 ID 信息。而格式上有如下选择:
1. 支持 `/miniflux/feed=[feed_id]`,请将 `[feed_id]` 替换为实际订阅的订阅源 ID(注意不包含括号,即单纯为一个数字)
2. 支持 `/miniflux/feed=[feed1_id]&feed=[feed2_id]` 或 `/miniflux/feeds=[feed1_id]&[feed2_id]` 订阅多个订阅源
3. 以上还支持简写,即直接使用订阅源 ID:`/miniflux/[feed1_id]&[feed2_id]`
3. 可进一步根据需要,指定参数:
1. 支持 MiniFlux 提供的所有参数[选项](https://miniflux.app/docs/api.html#endpoint-get-feed-entries)。同其文档所注相同,多个过滤选项之间请用 `&` 连接。除去 `status` 外,多个相同的过滤选项应只会读取第一个。
2. 特别的,本路由将默认指定排序方式为从新到旧排序(`direction=desc`)。
3. 此外,本路由另支持额外的选项,包括:
1. 利用 `feed_name` 参数控制标题格式,`feed_name=1` 即输出的每一篇标题会变为 `文章标题 | 订阅源名称`,默认为 `feed_name=0`,即只输出文章标题。
2. 利用 `mark` 参数控制在 RSSHub 获取订阅内容之后的动作,包括维持不变(`unchanged`,默认),标记为已读(`read`),移除(`removed`),以及标记为未读(`unread`)。**注意,请不要将标记为已读简单的理解为是用于实现某种同步服务的**,这个功能更像是在辅助 MiniFlux 的自动清理功能。
3. 未来可能会支持利用 `link` 参数控制输出内容的网址(支持这个功能需要 MiniFlux 未来提供相应的接口),设定为通过 MiniFlux 实体的分享功能生成的网址或原始内容的网址。请注意,如果利用 MiniFlux 的分享功能,这些文章内容均不会被自动清理。
4. 可以通过 `limit` 参数控制输出内容的数量,默认输出全部符合其它条件的所有内容,但**建议用户设置该参数**。不过众所周知,RSSHub 提供全局参数 `?limit` 控制输出内容的数量,但如果用户存在设置错误,则可能出现一些奇怪的问题:不妨考虑用户的参数设定为 `miniflux/all/limit=5&status=unread&mark=read?limit=3`,那么则有两篇用户未读的文章自动被标记为已读,用户却很可能从未发现。为避免出现这样的情形,本路由对该参数的设定作出如下调整:
1. 选择输出全部内容时,如果同时设定两个参数,则取设定数值较小的那个,否则按照用户设定控制输出内容的数量。
2. 选择输出指定订阅源时,`&limit=` 参数控制**每一个**订阅源的输出数量,`?limit=` 控制**最终**输出内容的数量。不妨假设用户指定聚合两个订阅源,那么 `/miniflux/1&2/mark=read&limit=3` 与 `/miniflux/1&2/mark=read?limit=6` 的效果相同,除非
3. 用户设定的 `&limit` 值小于 `?limit`,路由会以 `&limit` 设定为准:即最终输出内容数量 = `&limit` 参数值 \* 订阅源数量,或者如果
4. 用户设定的 `&limit` 值大于 `?limit` 参数,又或者 `?limit` 参数并非是订阅源数量的整数倍,则路由将用 `?limit` 参数除去订阅源数量,并向下取整,每个订阅源将输出所得数字篇内容(如果得数为 0,则修改为每个订阅源输出 1 篇文章)。
5. 考虑一例:`/miniflux/1&2&3/status=unread&limit=2?limit=5` 或 `/miniflux/1&2&3/status=unread&limit=2?limit=7`,最终的输出结果均为 `/miniflux/1&2&3/status=unread&limit=2`,等效于 `/miniflux/1&2&3/status=unread?limit=6`
6. 考虑另一例:`/miniflux/1&2&3/status=unread?limit=2`,因为 2 / 3 ≈ 0.667 -> 0 -> 1,所以等效于 `/miniflux/1&2&3/status=unread?limit=3`,亦等效于 `/miniflux/1&2&3/status=unread&limit=1`
5. 以上选项均与 MiniFlux 的 API 的行为保持一致,如果用户错误重复设定某参数,只读取第一个设定的值。
一例:如果用户希望输出全部订阅源中,最旧的两篇未读的文章,并希望在文章的标题栏显示订阅源的名字,同时希望输出内容在 MiniFlux 中被标为已读,那么路由设置应为:`/miniflux/all/direction=asc&status=unread&feed_name=1&mark=read&limit=2`
</Route>
## MITRE
### 全部出版物
@@ -296,6 +363,18 @@ type 为 all 时,category 参数不支持 cost 和 free
<Route author="LogicJake" example="/kpmg/insights" path="/kpmg/insights" />
## 滴答清单
### 习惯打卡
::: warning 注意
需要账号密码,详情见部署文档部分 RSS 模块配置
:::
<Route author="DIYgod" example="/dida365/habit/checkins" path="/dida365/habit/checkins" selfhost="1"/>
## 东莞教研网
### 信息公开
@@ -312,7 +391,7 @@ type 为 all 时,category 参数不支持 cost 和 free
### 福利资源 - met.red
<Route author="junfengP" example="/metred/fuli" path="/metred/fuli" />
<Route author="junfengP queensferryme" example="/metred/fuli" path="/metred/fuli" />
## 古诗文网
@@ -675,6 +754,12 @@ type 为 all 时,category 参数不支持 cost 和 free
<Route author="kt286" example="/tprtc/news" path="/tprtc/news"/>
## 天眼查
### 热门搜索
<Route author="nczitzk" example="/tianyancha/hot" path="/tianyancha/hot" anticrawler="1"/>
## 无讼案例
### 案例
@@ -757,7 +842,7 @@ type 为 all 时,category 参数不支持 cost 和 free
> 仅支持 IMAP 协议,邮件密码等设置见 [邮件设置](/install/#其他应用配置)
<Route author="kt286" example="/mail/imap/rss@rsshub.app" path="/mail/imap/:email" :paramsDesc="['邮箱账号']" />
<Route author="kt286" example="/mail/imap/rss@rsshub.app" path="/mail/imap/:email" :paramsDesc="['邮箱账号']" selfhost="1"/>
## 源仓库
@@ -864,13 +949,3 @@ type 为 all 时,category 参数不支持 cost 和 free
### はてな匿名ダイアリー - 人気記事アーカイブ
<Route author="masakichi" example="/hatena/anonymous_diary/archive" path="/hatena/anonymous_diary/archive"/>
### 4399 论坛
<Route author="DIYgod" example="/forum4399/mtag-83932" path="/forum4399/:mtag" :paramsDesc="['mtag,必选-论坛网址最后的mtag字段']"/>
::: warning 注意
需要用户 cookie 值,详情见部署页面的配置模块。
:::
</Route>
+114 -6
View File
@@ -36,6 +36,16 @@ pageClass: routes
</Route>
## 8KCosplay
### 最新
<Route author="KotoriK" example="/8kcos/" path="/8kcos/"/>
### 分类
<Route author="KotoriK" example="/8kcos/cat/8kasianidol" path="/8kcos/cat/:cat*" :paramsDesc="['默认值为8kasianidol,将目录页面url中 /category/ 后面的部分填入。如:https://www.8kcosplay.com/category/8kchineseidol/%e9%a3%8e%e4%b9%8b%e9%a2%86%e5%9f%9f/ 对应的RSS页面为/8kcos/cat/8kchineseidol/%e9%a3%8e%e4%b9%8b%e9%a2%86%e5%9f%9f/。']"/>
## Bing 壁纸
### 每日壁纸
@@ -56,6 +66,10 @@ pageClass: routes
| ---- | --------- | ------ |
| hot | recommend | recent |
## DailyArt 每日艺术
<Route author="zphw" example="/dailyart/zh" path="/dailyart/:language?" :paramsDesc="['语言,支持 en, zh, jp 等,默认为 en']" />
## Dilbert Comic Strip
<Route name="Daily Strip" author="Maecenas" example="/dilbert/strip" path="/dilbert/strip">
@@ -64,6 +78,68 @@ pageClass: routes
</Route>
## Fantia
### 搜索
<Route author="nczitzk" example="/fantia/search/posts/all/daily" path="/fantia/search/:type?/:caty?/:peroid?/:order?/:rating?/:keyword?" :paramsDesc="['类型,见下表,默认为 posts','分类,见下表,也可在搜索页的 URL 中找到,默认为 すべてのクリエイター', '排行时段,见下表,填写该字段即返回排行榜,默认为空,即不排名' ,'排序,见下表,默认为 更新の新しい順', 'R18显示,见下表,默认为 すべて', '关键字,默认为空']">
类型
| クリエイター | 投稿 | 商品 | コミッション |
| ------------ | ----- | -------- | ------------ |
| fanclubs | posts | products | commissions |
分类
| 分类 | 分类名 |
| ---------------------- | ---------- |
| イラスト | illust |
| 漫画 | comic |
| コスプレ | cosplay |
| YouTuber・配信者 | youtuber |
| Vtuber | vtuber |
| 音声作品・ASMR | voice |
| 声優・歌い手 | voiceactor |
| アイドル | idol |
| アニメ・映像・写真 | anime |
| 3D | 3d |
| ゲーム制作 | game |
| 音楽 | music |
| 小説 | novel |
| ドール | doll |
| アート・デザイン | art |
| プログラム | program |
| 創作・ハンドメイド | handmade |
| 歴史・評論・情報 | history |
| 鉄道・旅行・ミリタリー | railroad |
| ショップ | shop |
| その他 | other |
排行时段
| デイリー | ウィークリー | マンスリー | 全期間 |
| -------- | ------------ | ---------- | ------ |
| daily | weekly | monthly | all |
排序
| 更新の新しい順 | 更新の古い順 | 投稿の新しい順 | 投稿の古い順 | お気に入り数順 |
| -------------- | ------------ | -------------- | ------------ | -------------- |
| updater | update_old | newer | create_old | popular |
R18 显示
| すべて | 一般のみ | R18 のみ |
| ------ | -------- | -------- |
| all | general | adult |
</Route>
### 用户投稿
<Route author="nczitzk" example="/fantia/user/3498" path="/fantia/user/:id" :paramsDesc="['用户 id,可在用户页 URL 中找到']" />
## GirlImg
### album
@@ -260,13 +336,9 @@ pageClass: routes
| ------ | ---------- | ---------- |
| pic | top | top-4h |
### 妹子图
### 首页
<Route author="kobemtl xyqfer" example="/jandan/ooxx" path="/jandan/:sub_model" :paramsDesc="['煎蛋板块名称']"/>
| 妹子图 | 妹子图热榜 |
| ------ | ---------- |
| ooxx | top-ooxx |
<Route author="lonelykid" example="/jandan/article" path="/jandan/article"/>
## 绝对领域
@@ -278,6 +350,42 @@ pageClass: routes
| ---- | ---- |
| tuji | as |
## 酷 18
### 分站
<Route author="nczitzk" example="/cool18" path="/cool18/:id?" :paramsDesc="['分站,见下表,默认为禁忌书屋']">
| 性趣贴图 | 色色动漫 | 情色靓影 | 私房自拍 | 禁忌书屋 | 性趣论坛 | 情色无忌 | 成人影视 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| bbs | bbs7 | bbs2 | bbs6 | bbs4 | bj | bbs5 | bbs3 |
::: tip 提示
留园网文档参见 [此处](https://docs.rsshub.app/new-media.html#liu-yuan-wang)
禁忌书屋文档参见 [此处](https://docs.rsshub.app/reading.html#jin-ji-shu-wu)
:::
</Route>
### 精华区
<Route author="nczitzk" example="/cool18/bbs/gold" path="/cool18/:id/gold" :paramsDesc="['分站,见上表,默认为禁忌书屋']"/>
### 搜索关键字
<Route author="nczitzk" example="/cool18/bbs/keywords/都市" path="/cool18/:id/keywords/:keyword?" :paramsDesc="['分站,见上表,默认为禁忌书屋', '关键字']"/>
### 妹子图
<Route author="kobemtl xyqfer" example="/jandan/ooxx" path="/jandan/:sub_model" :paramsDesc="['煎蛋板块名称']"/>
| 妹子图 | 妹子图热榜 |
| ------ | ---------- |
| ooxx | top-ooxx |
## 妹子图
### 首页(最新)
+131 -3
View File
@@ -20,6 +20,12 @@ pageClass: routes
<Route author="nczitzk" example="/anki/changes" path="/anki/changes"/>
## AnyTXT
### Release Notes
<Route author="nczitzk" example="/anytxt/release-notes" path="/anytxt/release-notes"/>
## Apkpure
### Versions
@@ -54,6 +60,36 @@ pageClass: routes
<Route author="HenryQW" example="/aptonic/action" path="/aptonic/action/:untested?" :paramsDesc="['填写任意值,将会同时包括非官方的 Dropzone 动作']"/>
## Bandisoft
### 更新记录
<Route author="nczitzk" example="/bandisoft/bandizip" path="/bandisoft/:id?/:lang?" :paramsDesc="['软件 id,见下表,默认为 Bandizip', '语言,见下表,默认为英语']">
软件 id
| Bandizip (Win) | Bandizip (Mac) | Honeycam | Honeyview |
| -------------- | -------------- | -------- | --------- |
| bandizip | bandizip.mac | honeycam | honeyview |
语言
| English | 中文 (简体) | 中文 (繁體) | 日本語 | Русский | Español | Français | Deutsch | Italiano | Slovenčina | Українська | Беларуская | Dansk | Polski | Português Brasileiro | Čeština | Nederlands | Slovenščina | Türkçe | ภาษาไทย | 한국어 |
| ------- | ----------- | ----------- | ------ | ------- | ------- | -------- | ------- | -------- | ---------- | ---------- | ---------- | ----- | ------ | -------------------- | ------- | ---------- | ----------- | ------ | ------- | ------ |
| en | cn | tw | jp | ru | es | fr | de | it | sk | uk | be | da | pl | br | cs | nl | sl | tr | th | kr |
</Route>
## Bilibili
### 更新情报
<Route author="nczitzk" example="/bilibili/app/android" path="/bilibili/app/:id?" :paramsDesc="['客户端 id,见下表,默认为安卓版']">
| 安卓版 | iPhone 版 | iPad HD 版 | UWP 版 | TV 版 |
| ------- | --------- | ---------- | ------ | -------------- |
| android | iphone | ipad | win | android_tv_yst |
## Bugly SDK
### 更新日志
@@ -104,6 +140,12 @@ pageClass: routes
</Route>
## Ditto clipboard manager
### Changes
<Route author="nczitzk" example="/ditto/changes" path="/ditto/changes/:type?" :paramsDesc="['类型,可选 `beta`']"/>
## Docker Hub
### 镜像有新 Build
@@ -116,6 +158,12 @@ pageClass: routes
:::
## Everything
### Changes
<Route author="nczitzk" example="/everything/changes" path="/everything/changes"/>
## F-Droid
### App 更新
@@ -156,12 +204,26 @@ pageClass: routes
<Route author="Jeason0228" example="/ipsw/index/ipsws/iPhone11,8" path="/ipsw/index/:ptype/:pname/" :paramsDesc="['填写ipsws或otas,得到不同版本的固件','产品名, `http://rsshub.app/ipsw/index/ipsws/iPod`如填写iPad则关注iPad整个系列(ptype选填为ipsws).`http://rsshub.app/ipsw/index/ipsws/iPhone11,8`如果填写具体的iPhone11,8则关注这个机型的ipsws固件信息']"/>
## ManicTime
<Route author="nczitzk" example="/manictime/releases" path="/manictime/releases"/>
## Mathpix
<Route author="nczitzk" example="/mathpix/blog" path="/mathpix/blog"/>
## Microsoft Edge
### 外接程序更新
<Route author="hoilc" example="/edge/addon/gangkeiaobmjcjokiofpkfpcobpbmnln" path="/edge/addon/:crxid" :paramsDesc="['扩展 id, 可在扩展页 URL 中找到']" />
## Microsoft Store
### Updates
<Route author="hellodword" example="/microsoft-store/updates/9WZDNCRFHVN5/CN" path="/microsoft-store/updates/:productid/:market?" :paramsDesc="['在 Store 中点击 `分享` - `复制链接` 即可获得', '默认为 `CN`']" />
## Minecraft
见 [#minecraft](/game.html#minecraft)
@@ -196,6 +258,12 @@ pageClass: routes
<Route author="cielpy" example="/nvidia/webdriverupdate" path="/nvidia/webdriverupdate"/>
## OneNote Gem Add-Ins
### Release History
<Route author="nczitzk" example="/onenotegem/release" path="/onenotegem/release"/>
## PlayStation
### PlayStation 4 系统更新纪录
@@ -214,12 +282,30 @@ pageClass: routes
</Route>
## QTTabBar
### Change Log
<Route author="nczitzk" example="/qttabbar/change-log" path="/qttabbar/change-log"/>
## Quicker
### 版本更新
<Route author="Cesaryuan" example="/quicker/update" path="/quicker/update"/>
## RescueTime
### Release Notes
<Route author="nczitzk" example="/rescuetime/release-notes" path="/rescuetime/release-notes/:os?" :paramsDesc="['OS id,见下表']">
| Mac OS | Windows |
| ------ | ------- |
| mac | windows |
</Route>
## RSSHub
### 有新路由啦
@@ -236,6 +322,16 @@ pageClass: routes
<Route author="nczitzk" example="/sesame/release_notes" path="/sesame/release_notes"/>
## simpread
### 消息通知
<Route author="zytomorrow" example="/simpread/notice" path="/simpread/notice"/>
### 更新日志
<Route author="zytomorrow" example="/simpread/changelog" path="/simpread/changelog"/>
## sketch.com
### beta 更新
@@ -252,6 +348,12 @@ pageClass: routes
<Route author="garywill" example="/thunderbird/release" path="/thunderbird/release"/>
## Total Commander
### What's New
<Route author="nczitzk" example="/totalcommander/whatsnew" path="/totalcommander/whatsnew"/>
## Typora
### Changelog
@@ -280,6 +382,12 @@ pageClass: routes
<Route author="nczitzk" example="/xposed/module/com.ext.star.wars" path="/xposed/module/:mod" :paramsDesc="['模块包名, 模块页中的 Package 字段']"/>
## XYplorer
### What's New
<Route author="nczitzk" example="/xyplorer/whatsnew" path="/xyplorer/whatsnew"/>
## 怪物猎人世界
### 更新
@@ -304,11 +412,11 @@ pageClass: routes
<Route author="zytomorrow" example="/pgyer/:app" path="/pgyer/kz-test" :paramsDesc="['app为下载页最后的路径']" radar="1" rssbud="1"/>
## 腾讯柠檬 Lab
## 特斯拉系统更新
### 柠檬精选 Mac Apps
### 版本详细信息
<Route author="HenryQW" example="/tencent/lemon" path="/tencent/lemon"/>
<Route author="mrbruce516" example="/tesla" path="/tesla/update"/>
## 腾讯云移动直播 SDK
@@ -321,3 +429,23 @@ pageClass: routes
### 金米奖
<Route author="nczitzk" example="/mi/golden" path="/mi/golden"/>
## 猿料
### 标签
<Route author="nczitzk" example="/yuanliao" path="/yuanliao/:tag/:sort?" :paramsDesc="['标签,见下表,默认为 `utools`', '排序,见下表,默认为最新回复']">
标签
| uTools | 插件发布 |
| ------ | -------- |
| utools | plugins |
排序
| 最新回复 | 热门回复 | 新鲜出炉 | 陈年旧贴 |
| -------- | ------------- | ---------- | --------- |
| | -commentCount | -createdAt | createdAt |
</Route>
+37 -10
View File
@@ -4,6 +4,12 @@ pageClass: routes
# 编程
## ACM
### 图灵奖获得者
<Route author="nczitzk" example="/acm/amturingaward" path="/acm/amturingaward"/>
## AI 研习社
### 首页
@@ -28,7 +34,7 @@ pageClass: routes
### TheBatch 周报
<Route author="nczitzk" example="/deeplearning/thebatch" path="/deeplearning/thebatch"/>
<Route author="nczitzk" example="/deeplearningai/thebatch" path="/deeplearningai/thebatch"/>
## Dockone
@@ -87,6 +93,20 @@ GitHub 官方也提供了一些 RSS:
<Route author="DIYgod" example="/github/trending/daily/javascript" path="/github/trending/:since/:language?" :paramsDesc="['时间跨度, 可在 [Trending 页](https://github.com/trending/javascript?since=monthly) URL 中找到, 可选 daily weekly monthly', '语言, 可在 [Trending 页](https://github.com/trending/javascript?since=monthly) URL 中找到']" radar="1" rssbud="1"/>
### Topics
<Route author="queensferryme" example="/github/topics/framework" path="/github/topics/:name/:qs?" :paramsDesc="['名称,可以在相关 [Topics 页](https://github.com/topics/framework) URL 中找到', '过滤规则,形如 `l=php&o=desc&s=stars`,详见下表']" radar="1" rssbud="1">
| 参数名 | 描述 | 可选值 |
| ------ | -------- | ----------------------------------------------------------------------------------------- |
| `l` | 编程语言 | 例如 `php`,可以在相关 [Topics 页](https://github.com/topics/framework?l=php) URL 中找到 |
| `o` | 排序方法 | `asc`(升序)<br>`desc`(降序) |
| `s` | 排序标准 | `stars`(按 star 数量排序)<br>`forks`(按 fork 数量排序)<br>`updated`(按更新日期排序) |
例如 `/github/topics/framework/l=php&o=desc&s=stars` 会生成对应[此页面](https://github.com/topics/framework?l=php&o=desc&s=stars)的 RSS。
</Route>
### 仓库 Issues
<Route author="HenryQW AndreyMZ" example="/github/issue/DIYgod/RSSHub/open/RSS%20wanted" path="/github/issue/:user/:repo/:state?/:labels?" :paramsDesc="['用户名', '仓库名', 'issue 状态,可选`open`,`closed`或`all`,默认为`open`', '标签列表,以逗号分隔']" radar="1" rssbud="1"/>
@@ -472,19 +492,25 @@ GitHub 官方也提供了一些 RSS:
### 沸点
<Route author="xyqfer" example="/juejin/pins" path="/juejin/pins"/>
<Route author="xyqfer laampui" example="/juejin/pins/6824710202487472141" :paramsDesc="['默认为 recommend,见下表']" path="/juejin/pins/:type?">
| 推荐 | 热门 | 上班摸鱼 | 内推招聘 | 一图胜千言 | 今天学到了 | 每天一道算法题 | 开发工具推荐 | 树洞一下 |
| --------- | ---- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
| recommend | hot | 6824710203301167112 | 6819970850532360206 | 6824710202487472141 | 6824710202562969614 | 6824710202378436621 | 6824710202000932877 | 6824710203112423437 |
</Route>
### 专栏
<Route author="Maecenas" example="/juejin/posts/56852b2460b2a099cdc1d133" path="/juejin/posts/:id" :paramsDesc="['用户 id, 可在用户页 URL 中找到']" radar="1" rssbud="1"/>
<Route author="Maecenas" example="/juejin/posts/3051900006845944" path="/juejin/posts/:id" :paramsDesc="['用户 id, 可在用户页 URL 中找到']" radar="1" rssbud="1"/>
### 收藏集
<Route author="isQ" example="/juejin/collections/5791879979bc440066171bdb" path="/juejin/collections/:userId" :paramsDesc="['用户唯一标志符, 在浏览器地址栏URL中能够找到']"/>
<Route author="isQ" example="/juejin/collections/1697301682482439" path="/juejin/collections/:userId" :paramsDesc="['用户唯一标志符, 在浏览器地址栏URL中能够找到']"/>
### 单个收藏夹
<Route author="isQ" example="/juejin/collection/5cbf079df265da03462270f9" path="/juejin/collection/:collectionId" :paramsDesc="['收藏夹唯一标志符, 在浏览器地址栏URL中能够找到']"/>
<Route author="isQ" example="/juejin/collection/6845243180586123271" path="/juejin/collection/:collectionId" :paramsDesc="['收藏夹唯一标志符, 在浏览器地址栏URL中能够找到']"/>
### 分享
@@ -653,6 +679,12 @@ GitHub 官方也提供了一些 RSS:
<Route author="tonghs" example="/manong-weekly" path="/manong-weekly" />
## 美团开放平台
### 美团开放平台公告
<Route author="youzipi" example="/meituan/open/announce" path="/meituan/open/announce"/>
## 平安银河实验室
### posts
@@ -660,11 +692,6 @@ GitHub 官方也提供了一些 RSS:
<Route author="hellodword" example="/galaxylab" path="/galaxylab">
</Route>
## 前端技术文章
<Route author="laampui" example="/front-end-rss" path="/front-end-rss" :paramsDesc="['分类']">
</Route>
## 前端艺术家 && 飞冰早报
### 列表
+73 -1
View File
@@ -10,12 +10,59 @@ pageClass: routes
<Route author="HenryQW" example="/allpoetry/newest" path="/allpoetry/:order?" :paramsDesc="['排序方式, `best` 或 `newest`, 缺省 `best`']"/>
## Kindle Unlimited
### 会员限时免费读书单
<Route author="nczitzk" example="/amazon/ku/this" path="/amazon/ku/:type?" :paramsDesc="['书单类型,见下表']">
| 本月书单 | 好评返场 | 次月预告 |
| -------- | -------- | -------- |
| this | back | next |
</Route>
## Mobilism
### eBook Releases
<Route author="nczitzk" example="/mobilism/release" path="/mobilism/release" />
## SoBooks
### 首页
<Route author="nczitzk" example="/sobooks" path="/sobooks/:category?" :paramsDesc="['分类, 见下表']">
| 分类 | 分类名 |
| -------- | ---------------- |
| 小说文学 | xiaoshuowenxue |
| 历史传记 | lishizhuanji |
| 人文社科 | renwensheke |
| 励志成功 | lizhichenggong |
| 经济管理 | jingjiguanli |
| 学习教育 | xuexijiaoyu |
| 生活时尚 | shenghuoshishang |
| 英文原版 | yingwenyuanban |
</Route>
### 标签
<Route author="nczitzk" example="/sobooks/tag/小说" path="/sobooks/tag/:id?" :paramsDesc="['标签, 见下表,默认为小说']">
热门标签
| 小说 | 文学 | 历史 | 日本 | 科普 | 管理 | 推理 | 社会 | 经济 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------ |
| 传记 | 美国 | 悬疑 | 哲学 | 心理 | 商业 | 金融 | 思维 | 经典 |
| 随笔 | 投资 | 文化 | 励志 | 科幻 | 成长 | 中国 | 英国 | 政治 |
| 漫画 | 纪实 | 艺术 | 科学 | 生活 | 职场 | 散文 | 法国 | 互联网 |
| 营销 | 奇幻 | 二战 | 股票 | 女性 | 德国 | 学习 | 战争 | 创业 |
| 绘本 | 名著 | 爱情 | 军事 | 理财 | 教育 | 世界 | 人物 | 沟通 |
</Route>
## UU 看书
### 小说更新
@@ -143,7 +190,32 @@ count 的取值范围为 1-12,为防止请求次数过多,推荐设置为 5
<Route author="junbaor" example="/enclavebooks/collection/103702" path="/enclavebooks/collection/:uid" :paramsDesc="['用户ID, 自行抓包寻找']"/>
## 观止(每日一文)
## 归档
<Route author="nczitzk" example="/sobooks/date/2020-11" path="/sobooks/date/:date?" :paramsDesc="['日期,见例子,默认为当前年月']"/>
## 禁忌书屋
### 首页
<Route author="nczitzk" example="/cool18/bbs4" path="/cool18/bbs4"/>
### 精华区
<Route author="nczitzk" example="/cool18/bbs4/gold" path="/cool18/bbs4/gold"/>
### 栏目分类
<Route author="nczitzk" example="/cool18/bbs4/type/都市" path="/cool18/bbs4/type/:keyword?" :paramsDesc="['分类,见下表,默认为首页']">
| 都市 | 校园 | 乡野 | 古风 | 异国 | 玄幻 | 红杏 | 伦理 | 浪漫 | 暴虐 | 摄心 | 其他 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
</Route>
### 搜索关键字
<Route author="nczitzk" example="/cool18/bbs4/keywords/都市" path="/cool18/bbs4/keywords/:keyword?" :paramsDesc="['关键字']"/>
## 孔夫子旧书网
+38 -1
View File
@@ -36,6 +36,25 @@ pageClass: routes
</Route>
## booth.pm
### 店铺
<Route author="KTachibanaM" example="/booth.pm/shop/annn-boc0123" path="/booth.pm/shop/:subdomain" :paramsDesc="['店铺子域名']" />
## Craigslist
### 商品搜索
<Route author="lxiange" example="/craigslist/sfbay/sso?query=folding+bike&sort=rel" path="/craigslist/:location/:type?" :paramsDesc="['位置,即Craigslist的子域,如sfbay', '搜索类型,如sso']"/>
> 由于 Craigslist 取消了 RSS 订阅搜索功能,因此用 RSSHub 来实现了类似效果。
> 一个完整原始搜索会像这样:
> <https://sfbay.craigslist.org/search/sso?query=folding+bike&sort=rel>
>
> /search/xxx 后跟的 "xxx" 为搜索类型,直接参考原始请求即可。
> query string 是实际的搜索内容。
## Furstar
### 最新售卖角色列表
@@ -153,6 +172,18 @@ For instance, in <https://www.leboncoin.fr/recherche/?**category=10&locations=Pa
<Route author="sanmmm" example="/liwushuo/index" path="/liwushuo/index"/>
## 麦当劳
### 麦当劳活动资讯
<Route author="huyyi" example="/mcdonalds/sales+event" path="/mcdonalds/:category" :paramsDesc="['分类名(可用+连接多个分类)']">
| 全部分类 | 社会责任 | 人员品牌 | 产品故事 | 优惠 | 品牌文化 | 活动速报 |
| --------- | -------------- | -------- | -------- | ----- | -------- | -------- |
| news_list | responsibility | brand | product | sales | culture | event |
</Route>
## 缺书网
### 促销
@@ -301,7 +332,13 @@ For instance, in <https://www.leboncoin.fr/recherche/?**category=10&locations=Pa
### 小米有品每日上新
<Route author="xyqfer DIYgod" example="/mi/youpin/new" path="/mi/youpin/new"/>
<Route author="xyqfer DIYgod" example="/mi/youpin/new" path="/mi/youpin/new/:sort?" :paramsDesc="['排序,见下表']">
| 个性化排序 | 按销量从高到低 | 按好评从高到低 | 按上新时间从近到远 |
| ---------- | -------------- | -------------- | ------------------ |
| 0 | 1 | 2 | 3 |
</Route>
## 宜家 IKEA
+203 -27
View File
@@ -24,15 +24,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户追番列表
<Route author="wdssmq" example="/bilibili/user/bangumi/208259" path="/bilibili/user/bangumi/:uid/:type?" :paramsDesc="['用户 id','1为番,2为剧,留空为1']"/>
<Route author="wdssmq" example="/bilibili/user/bangumi/208259" path="/bilibili/user/bangumi/:uid/:type?" :paramsDesc="['用户 id','1为番,2为剧,留空为1']" anticrawler="1" radar="1" rssbud="1"/>
### UP 主投稿
<Route author="DIYgod" example="/bilibili/user/video/2267573" path="/bilibili/user/video/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" radar="1" rssbud="1"/>
<Route author="DIYgod" example="/bilibili/user/video/2267573" path="/bilibili/user/video/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" anticrawler="1" radar="1" rssbud="1"/>
### UP 主专栏
<Route author="lengthmin" example="/bilibili/user/article/334958638" path="/bilibili/user/article/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']"/>
<Route author="lengthmin" example="/bilibili/user/article/334958638" path="/bilibili/user/article/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']" anticrawler="1" radar="1" rssbud="1"/>
### UP 主动态
@@ -40,11 +40,11 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### UP 主频道
<Route author="HenryQW" example="/bilibili/user/channel/142821407/49017" path="/bilibili/user/channel/:uid/:cid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '频道 id, 可在频道的 URL 中找到', '默认为开启内嵌视频, 任意值为关闭']"/>
<Route author="HenryQW" example="/bilibili/user/channel/142821407/49017" path="/bilibili/user/channel/:uid/:cid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '频道 id, 可在频道的 URL 中找到', '默认为开启内嵌视频, 任意值为关闭']" anticrawler="1" radar="1" rssbud="1"/>
### UP 主默认收藏夹
<Route author="DIYgod" example="/bilibili/user/fav/2267573" path="/bilibili/user/fav/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']"/>
<Route author="DIYgod" example="/bilibili/user/fav/2267573" path="/bilibili/user/fav/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" radar="1" rssbud="1"/>
### UP 主非默认收藏夹
@@ -52,15 +52,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### UP 主投币视频
<Route author="DIYgod" example="/bilibili/user/coin/208259" path="/bilibili/user/coin/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']"/>
<Route author="DIYgod" example="/bilibili/user/coin/208259" path="/bilibili/user/coin/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" anticrawler="1" radar="1" rssbud="1"/>
### UP 主粉丝
<Route author="Qixingchen" example="/bilibili/user/followers/2267573" path="/bilibili/user/followers/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']"/>
<Route author="Qixingchen" example="/bilibili/user/followers/2267573" path="/bilibili/user/followers/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']" radar="1" rssbud="1"/>
### UP 主关注用户
<Route author="Qixingchen" example="/bilibili/user/followings/2267573" path="/bilibili/user/followings/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']"/>
<Route author="Qixingchen" example="/bilibili/user/followings/2267573" path="/bilibili/user/followings/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']" radar="1" rssbud="1"/>
### 分区视频
@@ -208,7 +208,8 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注动态
<Route author="TigerWolfDen" example="/bilibili/followings/dynamic/109937383" path="/bilibili/followings/dynamic/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']">
<Route author="TigerWolfDen" example="/bilibili/followings/dynamic/109937383" path="/bilibili/followings/dynamic/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']" selfhost="1">
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -218,7 +219,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注视频动态
<Route author="LogicJake" example="/bilibili/followings/video/2267573" path="/bilibili/followings/video/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']">
<Route author="LogicJake" example="/bilibili/followings/video/2267573" path="/bilibili/followings/video/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']" selfhost="1">
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -228,7 +229,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注专栏
<Route author="woshiluo" example="/bilibili/followings/article/99800931" path="/bilibili/followings/article/:uid" :paramsdesc="['用户 id']">
<Route author="woshiluo" example="/bilibili/followings/article/99800931" path="/bilibili/followings/article/:uid" :paramsdesc="['用户 id']" selfhost="1">
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -320,12 +321,36 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
<Route author="maple3142" example="/facebook/page/SonetPCR" path="/facebook/page/:id" :paramsDesc="['專頁 id']" anticrawler="1"/>
## Gab
### 用戶時間線
<Route author="zphw" example="/gab/user/realdonaldtrump" path="/gab/user/:username" :paramsDesc="['用戶名']" />
### 熱門
<Route author="zphw" example="/gab/popular/hot" path="/gab/popular/:sort?" :paramsDesc="['排序方式, `hot` 為 Hot Posts, `top` 為 Top Posts。默認為 hot']" />
## iCity
### 用户动态
<Route author="nczitzk" example="/icity/sai" path="/icity/:id" :paramsDesc="['用户 id']"/>
## Instagram
::: warning 注意
由于 Instagram API 限制,必须在服务器上设置你的用户名和密码。暂不支持两步验证。步骤见部署指南。
如需无登录的 feed,请用 Picuki。
:::
### 用户
<Route author="oppilate DIYgod" example="/instagram/user/stefaniejoosten" path="/instagram/:category/:key" :paramsDesc="['时间线类别,目前仅支持用户时间线','针对该类别的索引,例如用户时间线里是用户名或用户 ID']" radar="1" anticrawler="1"/>
## Keep
### 运动日记
@@ -423,7 +448,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 关注的新作品
<Route author="ClarkeCheng" example="/pixiv/user/illustfollows" path="/pixiv/user/illustfollows" radar="1" rssbud="1"/>
<Route author="ClarkeCheng" example="/pixiv/user/illustfollows" path="/pixiv/user/illustfollows" radar="1" rssbud="1" selfhost="1"/>
::: warning 注意
因为每个人关注的画师不同,所以只能自建。请不要将画师设为 “悄悄关注”,这样子画师的作品就不会出现在订阅里了。
@@ -451,6 +476,12 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
<Route author="BugWriter2" example="/soul/posts/hot" path="/soul/posts/hot" radar="1" rssbud="1"></Route>
## Tape 小纸条
### 提问箱新回答
<Route author="AgFlore" example="/tapechat/questionbox/TOAH7BBH" path="/tapechat/questionbox/:sharecode/:pagesize?" :paramsDesc="['提问箱 ID', '查看条数(默认为 20)']" />
## Telegram
### 频道
@@ -481,13 +512,44 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
:::
对于推文内容,在 `routeParams` 参数中以 query string 格式指定选项,可以控制额外的功能
| 键 | 含义 | 接受的值 | 默认值 |
| ---------------------------- | ---------------------------------------------------------------------------- | -------------- | ---------------------------------------- |
| readable | 是否开启细节排版可读性优化 | 0/1/true/false | false |
| authorNameBold | 是否加粗作者名字 | 0/1/true/false | false |
| showAuthorInTitle | 是否在标题处显示作者 | 0/1/true/false | false(`/twitter/followings` 中为 true) |
| showAuthorInDesc | 是否在正文处显示作者 | 0/1/true/false | false(`/twitter/followings` 中为 true) |
| showQuotedAuthorAvatarInDesc | 是否在正文处显示被转推的推文的作者头像(若阅读器会提取正文图片,不建议开启) | 0/1/true/false | false |
| showAuthorAvatarInDesc | 是否在正文处显示作者头像(若阅读器会提取正文图片,不建议开启) | 0/1/true/false | false |
| showEmojiForRetweetAndReply | 显示 “🔁” 取代 “Rt”、“↩️” 取代 “Re” | 0/1/true/false | false |
| showRetweetTextInTitle | 在标题出显示转推评论(置为 false 则在标题只显示被转推推文) | 0/1/true/false | true |
| addLinkForPics | 为图片添加可点击的链接 | 0/1/true/false | false |
| showTimestampInDescription | 在正文处显示推特的时间戳 | 0/1/true/false | false |
| showQuotedInTitle | 在标题处显示被引用的推文 | 0/1/true/false | false |
| widthOfPics | 推文配图宽(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| heightOfPics | 推文配图高(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| sizeOfAuthorAvatar | 作者头像大小 | 数字 | 48 |
| sizeOfQuotedAuthorAvatar | 被转推推文作者头像大小 | 数字 | 24 |
| excludeReplies | 排除回复,只在用户时间线有效 | 0/1/true/false | false |
| includeRts | 包括转推,只在用户时间线有效 | 0/1/true/false | true |
| count | 传递给 Twitter API 的 `count` 参数,只在用户时间线有效 | 不指定 / 数字 | 不指定 |
指定更多与默认值不同的参数选项可以改善 RSS 的可读性,如
https://rsshub.app/twitter/user/durov/readable=1&authorNameBold=1&showAuthorInTitle=1&showAuthorInDesc=1&showQuotedAuthorAvatarInDesc=1&showAuthorAvatarInDesc=1&showEmojiForRetweetAndReply=1&showRetweetTextInTitle=0&addLinkForPics=1&showTimestampInDescription=1&showQuotedInTitle=1&heightOfPics=150
的效果为
<img src="/readable-twitter.png" alt="Durov 的可读推特 RSS">
### 用户时间线
<Route author="DIYgod" example="/twitter/user/DIYgod" path="/twitter/user/:id/:type?" :paramsDesc="['用户名', '额外选项 `exclude_replies`去除回复,`exclude_rts`去除转推,`exclude_rts_replies`去除回复和转推,默认包含全部回复和转推。']" radar="1" rssbud="1"/>
<Route author="DIYgod" example="/twitter/user/DIYgod" path="/twitter/user/:id/:routeParams?" :paramsDesc="['用户名', '额外参数;请参阅上面的说明和表格;特别地,当 `routeParams=exclude_replies`时去除回复,`routeParams=exclude_rts`去除转推,`routeParams=exclude_rts_replies`去除回复和转推,默认包含全部回复和转推。']" radar="1" rssbud="1"/>
### 用户关注时间线
<Route author="DIYgod" example="/twitter/followings/DIYgod" path="/twitter/followings/:id" :paramsDesc="['用户名']" radar="1" rssbud="1">
<Route author="DIYgod" example="/twitter/followings/DIYgod" path="/twitter/followings/:id/:routeParams?" :paramsDesc="['用户名', '额外参数;请参阅上面的说明和表格']" radar="1" rssbud="1" selfhost="1">
::: warning 注意
@@ -499,15 +561,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 列表时间线
<Route author="xyqfer" example="/twitter/list/ladyleet/javascript" path="/twitter/list/:id/:name" :paramsDesc="['用户名', 'list 名称']" radar="1" rssbud="1"/>
<Route author="xyqfer" example="/twitter/list/ladyleet/javascript" path="/twitter/list/:id/:name/:routeParams?" :paramsDesc="['用户名', 'list 名称', '额外参数;请参阅上面的说明和表格']" radar="1" rssbud="1"/>
### 用户喜欢列表
<Route author="xyqfer" example="/twitter/likes/DIYgod" path="/twitter/likes/:id" :paramsDesc="['用户名']" radar="1" rssbud="1"/>
<Route author="xyqfer" example="/twitter/likes/DIYgod" path="/twitter/likes/:id/:routeParams?" :paramsDesc="['用户名', '额外参数;请参阅上面的说明和表格']" radar="1" rssbud="1"/>
### 关键词
<Route author="DIYgod" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword" :paramsDesc="['关键词']" radar="1" rssbud="1"/>
<Route author="DIYgod" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword/:routeParams?" :paramsDesc="['关键词', '额外参数;请参阅上面的说明和表格']" radar="1" rssbud="1"/>
### Trends
@@ -519,11 +581,11 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
<Route author="kt286" example="/vuevideo/971924215514" path="/vuevideo/:userid" :paramsDesc="['用户ID, 可在对应页面的 URL 中找到']"/>
## Youtube
## YouTube
::: tip Tiny Tiny RSS 用户请注意
Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性,导致无法加载 Youtube 内嵌视频,如果需要使用内嵌视频请为 Tiny Tiny RSS 安装 [remove_iframe_sandbox](https://github.com/DIYgod/ttrss-plugin-remove-iframe-sandbox) 插件
Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性,导致无法加载 YouTube 内嵌视频,如果需要使用内嵌视频请为 Tiny Tiny RSS 安装 [remove_iframe_sandbox](https://github.com/DIYgod/ttrss-plugin-remove-iframe-sandbox) 插件
:::
@@ -533,6 +595,12 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 频道
::: tip 提示
YouTube 官方亦有提供频道 RSS,形如 <https://www.youtube.com/feeds/videos.xml?channel_id=UCDwDMPOZfxVV0x_dz0eQ8KQ>。
:::
<Route author="DIYgod" example="/youtube/channel/UCDwDMPOZfxVV0x_dz0eQ8KQ" path="/youtube/channel/:id/:disableEmbed?" :paramsDesc="['频道 id', '默认为开启内嵌视频, 任意值为关闭']" radar="1" rssbud="1"/>
### 播放列表
@@ -603,7 +671,13 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 一周口碑榜
<Route author="umm233" example="/douban/movie/weekly" path="/douban/movie/weekly"/>
<Route author="umm233 nczitzk" example="/douban/movie/weekly" path="/douban/movie/weekly/:type?" :paramsDesc="['分类,可在榜单页 URL 中找到,默认为一周口碑电影榜']">
| 一周口碑电影榜 | 一周口碑剧集榜 | 华语口碑剧集榜 |
| ----------------- | -------------- | ---------------------- |
| movie_weekly_best | tv_weekly_best | tv_chinese_best_weekly |
</Route>
### 豆瓣电影分类
@@ -673,7 +747,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户广播
<Route author="alfredcai" example="/douban/people/62759792/status" path="douban/people/:userid/status" :paramsDesc="['整数型用户 id']" radar="1">
<Route author="alfredcai" example="/douban/people/62759792/status" path="douban/people/:userid/status/:routeParams" :paramsDesc="['整数型用户 id', '额外参数;见下']" radar="1">
::: tip 提示
@@ -683,12 +757,42 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
:::
对于豆瓣用户广播内容,在 `routeParams` 参数中以 query string 格式设置如下选项可以控制输出的样式
| 键 | 含义 | 接受的值 | 默认值 |
| -------------------------- | -------------------------------------------------------------- | -------------- | ------ |
| readable | 是否开启细节排版可读性优化 | 0/1/true/false | false |
| authorNameBold | 是否加粗作者名字 | 0/1/true/false | false |
| showAuthorInTitle | 是否在标题处显示作者 | 0/1/true/false | true |
| showAuthorInDesc | 是否在正文处显示作者 | 0/1/true/false | false |
| showAuthorAvatarInDesc | 是否在正文处显示作者头像(若阅读器会提取正文图片,不建议开启) | 0/1/true/false | false |
| showEmojiForRetweet | 显示 “🔁” 取代 “Fw”(转发) | 0/1/true/false | false |
| showRetweetTextInTitle | 在标题出显示转发评论(置为 false 则在标题只显示被转发的广播) | 0/1/true/false | false |
| addLinkForPics | 为图片添加可点击的链接 | 0/1/true/false | false |
| showTimestampInDescription | 在正文处显示广播的时间戳 | 0/1/true/false | false |
| showComments | 在正文处显示评论 | 0/1/true/false | false |
| widthOfPics | 广播配图宽(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| heightOfPics | 广播配图高(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| sizeOfAuthorAvatar | 作者头像大小 | 数字 | 48 |
指定更多与默认值不同的参数选项可以改善 RSS 的可读性,如
https://rsshub.app/douban/people/113894409/status/readable=1&authorNameBold=1&showAuthorInTitle=1&showAuthorInDesc=1&showAuthorAvatarInDesc=1&showEmojiForRetweet=1&showRetweetTextInTitle=1&addLinkForPics=1&showTimestampInDescription=1&showComments=1&widthOfPics=100
的效果为
<img src="/readable-douban.png" alt="豆瓣读书的可读豆瓣广播 RSS">
</Route>
### 日记最新回应
<Route author="nczitzk" example="/douban/replies/xiaoyaxiaoya" path="/douban/replies/:uid" :paramsDesc="['用户id,可在用户日记页 URL 中找到']"/>
### 最新回应过的日记
<Route author="nczitzk" example="/douban/replied/xiaoyaxiaoya" path="/douban/replied/:uid" :paramsDesc="['用户id,可在用户日记页 URL 中找到']"/>
### 话题
<Route author="LogicJake" example="/douban/topic/48823" path="/douban/topic/:id/:sort?" :paramsDesc="['话题id','排序方式,hot或new,默认为new']"/>
@@ -713,6 +817,23 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
</Route>
### 用户想看
<Route author="exherb" example="/douban/people/exherb/wish/torrentProvider=1337x" path="/douban/people/:userid/wish/:routeParams?" :paramsDesc="['用户id','额外参数;见下']">
对于豆瓣用户想看的内容,在 `routeParams` 参数中以 query string 格式设置如下选项可以控制输出的样式
| 键 | 含义 | 接受的值 | 默认值 |
| ---------------- | ---------------------------------------------------------- | ------------------------------- | ------ |
| pagesCount | 查询页面数 | | 1 |
| torrentProvider | 启用 torrent 搜索 | all/1337x/Eztv/Rarbg/Yts/HDHome | |
| passkey | HDHome 密钥,当 torrentProvider 为 `all` 或 `HDHome` 必填 | | |
| torrentQuery | 额外关键词,如 `1080p`, 逗号分割 | | |
| torrentMinSeeds | 最小 seeds 数 | | 1 |
| torrentMinRating | 种子和电影标题最小匹配度 | | 0.5 |
</Route>
## 饭否
::: warning 注意
@@ -851,9 +972,35 @@ rule
## 微博
对于微博内容,在 `routeParams` 参数中以 query string 格式指定选项,可以控制输出的样式
| 键 | 含义 | 接受的值 | 默认值 |
| -------------------------- | -------------------------------------------------------------- | -------------- | ----------------------------------- |
| readable | 是否开启细节排版可读性优化 | 0/1/true/false | false |
| authorNameBold | 是否加粗作者名字 | 0/1/true/false | false |
| showAuthorInTitle | 是否在标题处显示作者 | 0/1/true/false | false(`/weibo/keyword/`中为 true) |
| showAuthorInDesc | 是否在正文处显示作者 | 0/1/true/false | false(`/weibo/keyword/`中为 true) |
| showAuthorAvatarInDesc | 是否在正文处显示作者头像(若阅读器会提取正文图片,不建议开启) | 0/1/true/false | false |
| showEmojiForRetweet | 显示 “🔁” 取代 “转发” 两个字 | 0/1/true/false | false |
| showRetweetTextInTitle | 在标题出显示转发评论(置为 false 则在标题只显示被转发微博) | 0/1/true/false | true |
| addLinkForPics | 为图片添加可点击的链接 | 0/1/true/false | false |
| showTimestampInDescription | 在正文处显示被转发微博的时间戳 | 0/1/true/false | false |
| widthOfPics | 微博配图宽(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| heightOfPics | 微博配图高(生效取决于阅读器) | 不指定 / 数字 | 不指定 |
| sizeOfAuthorAvatar | 作者头像大小 | 数字 | 48 |
| displayVideo | 是否直接显示微博视频,只在博主 RSS 中有效 | 0/1/true/false | true |
指定更多与默认值不同的参数选项可以改善 RSS 的可读性,如
https://rsshub.app/weibo/user/1642909335/readable=1&authorNameBold=1&showAuthorInTitle=1&showAuthorInDesc=1&showAuthorAvatarInDesc=1&showEmojiForRetweet=1&showRetweetTextInTitle=0&addLinkForPics=1&showTimestampInDescription=1&showTimestampInDescription=1&heightOfPics=150
的效果为
<img src="/readable-weibo.png" alt="微博小秘书的可读微博 RSS">
### 博主
<Route author="DIYgod iplusx" example="/weibo/user/1195230310" path="/weibo/user/:uid/:displayVideo?" :paramsDesc="['用户 id, 博主主页打开控制台执行 `$CONFIG.oid` 获取', '是否直接显示微博视频, 缺省 `1` 显示, 若不需要显示则填 `0` ']" anticrawler="1" radar="1">
<Route author="DIYgod iplusx" example="/weibo/user/1195230310" path="/weibo/user/:uid/:routeParams?" :paramsDesc="['用户 id, 博主主页打开控制台执行 `$CONFIG.oid` 获取', '额外参数;请参阅上面的说明和表格;特别地,当 `routeParams=1` 时开启微博视频显示']" anticrawler="1" radar="1" rssbud="1">
部分博主仅登录可见,不支持订阅,可以通过打开 `https://m.weibo.cn/u/:uid` 验证
@@ -861,7 +1008,7 @@ rule
### 关键词
<Route author="DIYgod" example="/weibo/keyword/DIYgod" path="/weibo/keyword/:keyword" :paramsDesc="['你想订阅的微博关键词']" anticrawler="1" radar="1" rssbud="1"/>
<Route author="DIYgod" example="/weibo/keyword/DIYgod" path="/weibo/keyword/:keyword/:routeParams?" :paramsDesc="['你想订阅的微博关键词', '额外参数;请参阅上面的说明和表格']" anticrawler="1" radar="1" rssbud="1"/>
### 热搜榜
@@ -869,11 +1016,17 @@ rule
### 超话
<Route author="zengxs" example="/weibo/super_index/1008084989d223732bf6f02f75ea30efad58a9" path="/weibo/super_index/:id" :paramsDesc="['超话ID']" anticrawler="1" radar="1" rssbud="1"/>
<Route author="zengxs" example="/weibo/super_index/1008084989d223732bf6f02f75ea30efad58a9" path="/weibo/super_index/:id/:routeParams?" :paramsDesc="['超话ID', '额外参数;请参阅上面的说明和表格']" anticrawler="1" radar="1" rssbud="1"/>
### 个人时间线
<Route author="zytomorrow DIYgod" example="/weibo/timeline/3306934123" path="/weibo/timeline/:uid/:feature?" :paramsDesc="['用户的uid', ' 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0。']" anticrawler="1">
::: warning 注意
个人时间线暂不支持改善可读性。
:::
<Route author="zytomorrow DIYgod" example="/weibo/timeline/3306934123" path="/weibo/timeline/:uid/:feature?" :paramsDesc="['用户的uid', ' 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0。']" anticrawler="1" selfhost="1">
::: warning 注意
@@ -948,7 +1101,7 @@ rule
### 收藏夹
<Route author="huruji" example="/zhihu/collection/26444956" path="/zhihu/collection/:id" :paramsDesc="['收藏夹 id, 可在收藏夹页面 URL 中找到']" anticrawler="1" radar="1" rssbud="1"/>
<Route author="huruji Colin-XKL" example="/zhihu/collection/26444956" path="/zhihu/collection/:id" :paramsDesc="['收藏夹 id, 可在收藏夹页面 URL 中找到']" anticrawler="1" radar="1" rssbud="1"/>
### 用户动态
@@ -960,7 +1113,11 @@ rule
### 用户文章
<Route author="whtsky" example="/zhihu/people/posts/dcjanus" path="/zhihu/people/posts/:id" :paramsDesc="['作者 id, 可在用户主页 URL 中找到']" anticrawler="1" radar="1" rssbud="1"/>
<Route author="whtsky Colin-XKL" example="/zhihu/posts/people/frederchen" path="/zhihu/posts/:usertype/:id" :paramsDesc="['作者 id, 可在用户主页 URL 中找到', '用户类型usertype,参考用户主页的URL。目前有两种,见下表']" anticrawler="1" radar="1" rssbud="1"/>
| 普通用户 | 机构用户 |
| -------- | -------- |
| people | org |
### 专栏
@@ -978,6 +1135,16 @@ rule
<Route author="DIYgod" example="/zhihu/hotlist" path="/zhihu/hotlist" anticrawler="1" radar="1" rssbud="1"/>
### 知乎分类热榜
<Route author="nczitzk" example="/zhihu/hot" path="/zhihu/hot/:category?" :paramsDesc="['分类,见下表,默认为全站']" anticrawler="1" radar="1" rssbud="1">
| 全站 | 国际 | 科学 | 汽车 | 视频 | 时尚 | 时事 | 数码 | 体育 | 校园 | 影视 |
| ----- | ----- | ------- | ---- | ------ | ------- | ----- | ------- | ----- | ------ | ---- |
| total | focus | science | car | zvideo | fashion | depth | digital | sport | school | film |
</Route>
### 知乎想法热榜
<Route author="xyqfer" example="/zhihu/pin/hotlist" path="/zhihu/pin/hotlist" anticrawler="1" radar="1" rssbud="1"/>
@@ -1005,3 +1172,12 @@ rule
### 知乎书店 - 知乎周刊
<Route author="LogicJake" example="/zhihu/weekly" path="/zhihu/weekly" anticrawler="1" radar="1" rssbud="1"/>
### 用户关注时间线
<Route author="SeanChao" example="/zhihu/timeline" path="/zhihu/timeline" anticrawler="1" selfhost="1"/>
::: warning 注意
用户关注动态需要登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
:::
+143 -3
View File
@@ -41,9 +41,9 @@ pageClass: routes
### 查询国内外 CTF 赛事信息
<Route author="frankli0324" example="/ctfhub/calendar"
path="/ctfhub/calendar/:limit?/:form?/:class?/:title?"
:paramsDesc="['通过CTF赛事名称过滤', '一个整数,筛选最近的limit场比赛', '比赛形式', '比赛类型']">
<Route author="frankli0324" example="/ctfhub/search"
path="/ctfhub/search/:limit?/:form?/:class?/:title?"
:paramsDesc="['一个整数,筛选最新的limit场比赛,默认为10', '比赛形式', '比赛类型', '通过CTF赛事名称过滤']">
| `:class` | 类型 |
| :------: | -------------------------------- |
@@ -63,6 +63,14 @@ pageClass: routes
</Route>
### 查询近期赛事
<Route author="frankli0324" example="/ctfhub/upcoming"
path="/ctfhub/upcoming/:limit?"
:paramsDesc="['一个整数,筛选最近的limit场比赛,默认为5']">
</Route>
## gradCafe
### gradCafe result
@@ -73,6 +81,42 @@ pageClass: routes
<Route author="liecn" example="/gradcafe/result/computer" path="/gradcafe/result/:type" :paramsDesc="['按关键词进行搜索,如 computer']"/>
## MarginNote
### 标签
<Route author="nczitzk" example="/marginnote/tag/经验分享" path="/marginnote/tag/:id?" :paramsDesc="['标签名,见下表,默认为 经验分享']">
| 经验分享 | 论坛精华 | 待跟进反馈 | 优秀建议 | 精选回答 | 官方签名 | 自动更新 | 3674 以上版本支持 | 368 以上版本支持 | 未经验证的安全风险 | 笔记本分享 | 关键反馈 | 精选话题讨论 | 灵感盒 | 引用 |
| -------- | -------- | ---------- | -------- | -------- | -------- | -------- | ----------------- | ---------------- | ------------------ | ---------- | -------- | ------------ | ------ | ---- |
</Route>
## Mind42
### 分类
<Route author="nczitzk" example="/mind42" path="/mind42/:caty?" :paramsDesc="['分类,见下表,默认为 Overview']">
| Overview | Popular | All |
| -------- | ------- | ------ |
| mindmaps | popular | public |
</Route>
### 标签
<Route author="nczitzk" example="/mind42/tag/online" path="/mind42/tag/:id" :paramsDesc="['标签,见下表']">
| in | online | cleaning | buy | best | services | for | carpet | service | india | company | and | de | mapa | control | malware | online-dating-website-reviews | virus | international-online-dating-sites-review | repair |
| -- | ------ | -------- | --- | ---- | -------- | --- | ------ | ------- | ----- | ------- | --- | -- | ---- | ------- | ------- | ----------------------------- | ----- | ---------------------------------------- | ------ |
</Route>
### 搜索
<Route author="nczitzk" example="/mind42/search/online" path="/mind42/search/:keyword" :paramsDesc="['关键字']"/>
## NEEA 中国教育考试网
### 国家教育考试
@@ -102,6 +146,26 @@ pageClass: routes
| wsk | 全国外语水平考试 (WSK) |
| mets | 医护英语水平考试 (METS) |
## ProcessOn
### 推荐
<Route author="nczitzk" example="/processon/popular" path="/processon/popular/:cate?/:sort?" :paramsDesc="['分类,见下表,默认为所有类型', '排序,见下表,默认为人气']">
分类
| 所有类型 | 流程图 | BPMN | 思维导图 | UI 原型图 | UML | Org 组织结构图 | 网络拓扑图 | 韦恩图 | |
| -------- | ------ | ---- | -------- | --------- | --- | -------------- | ---------- | ------- | ---- |
| | es | flow | bpmn | mind_free | ui | uml | org | network | venn |
排序
| 人气 | 最多人赞 | 最多收藏 | 最多浏览 | 最新发布 |
| ---- | --------- | -------------- | --------- | ----------- |
| | likeCount | favouriteCount | viewCount | publishTime |
</Route>
## X-MOL 平台
### 新闻
@@ -120,6 +184,22 @@ pageClass: routes
</Route>
## zhimap 思维导图社区
<Route author="laampui" example="/zhimap/820156a42e9a490796c7fd56916aa95b/1" path="/zhimap/:categoryUuid?/:recommend?" :paramsDesc="['分类 uuid,见下表,默认为33b67d1bad1d4e37812f71d42764af34', '1 为按推荐排序,0 为按最新排序,默认为 0']">
| 热门 | 学科 | 学习 | 语言 | 工作 | 提升 | 生活 | 互联网 | 教育 | 其他 | 行业 | 服务发布 | 医疗 |
| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
| 33b67d1bad1d4e37812f71d42764af34 | 9434268e893a46aa9a1a231059849984 | 820156a42e9a490796c7fd56916aa95b | 959c81f606ca495c882c7e461429eb2a | 5af4bca5496e4733a2d582690627e25f | 5300988dff564756b5d462cea8a865b7 | 02fdcc2ab6374bc6b9b9717e70c87723 | 437d434fe9eb410a94dcefb889994e2b | 9747cbf78f96492c973aa6ab23925eee | d4c3a92a9cf64da7b187763211dc6ff6 | 58231ab9cef34af7819c3f6e2160c007 | 73d89972bee0457997c983d7fca19f9f | 853ce8b3a4c24b87a03f66af95c5e06c |
</Route>
## 杭州市国家普通话测试网报信息
### 考试信息
<Route author="ChaosTong" example="/putonghua" path="/putonghua" />
## 唧唧堂
### 论文
@@ -164,6 +244,10 @@ pageClass: routes
<Route author="tonghs" example="/manong-weekly" path="/manong-weekly" />
## 幕布精选
<Route author="laampui" example="/mubu/explore/16/读书笔记" path="/mubu/explore/:tagId/:title?" :paramsDesc="['标签 id', '显示标题']" />
## 扇贝
### 用户打卡
@@ -304,12 +388,68 @@ pageClass: routes
</Route>
## 阳光高考
### 教育部阳光高考信息公开平台招生政策规定
<Route author="nczitzk" example="/chsi/zszcgd" path="/chsi/zszcgd/:category?" :paramsDesc="['分类,默认为招生政策']">
| 招生政策 | 深化考试招生制度改革 | 教育法律法规 |
| -------- | -------------------- | ------------ |
| dnzszc | zdgg | jyflfg |
</Route>
## 印象识堂
### 印象剪藏
<Route author="nczitzk" example="/yinxiang/note" path="/yinxiang/note" />
### 卡片清单
<Route author="nczitzk" example="/yinxiang/card/32" path="/yinxiang/card/:id?" :paramsDesc="['卡片 id,见下表,默认为每周收藏排行榜・TOP5']">
::: tip 提示
卡片对应的话题、专题等内容过期后,该卡片 id 也会失效,此时填入该卡片 id 将会报错。
:::
| 每周收藏排行榜・TOP5 | 每周热门「读书笔记」榜 TOP5 | 【印象话题】选择的悖论 | 【印象专题】如何一秒洞察问题本质? | 「识堂开讲」5 位嘉宾精华笔记大放送 | 【印象话题】培养专注力的 5 个步骤 | 🎁购物清单主题活动获奖结果 |
| -------------------- | --------------------------- | ---------------------- | ---------------------------------- | ---------------------------------- | --------------------------------- | -------------------------- |
| 32 | 33 | 101 | 103 | 104 | 105 | 106 |
</Route>
### 用户公开笔记
<Route author="nczitzk" example="/yinxiang/personal/ZUhuRTmW5SKE7vvHPqI7cg" path="/yinxiang/personal/:id" :paramsDesc="['用户 id,可在用户页 URL 中找到']" />
### 笔记分类
<Route author="nczitzk" example="/yinxiang/category/28" path="/yinxiang/category/:id" :paramsDesc="['分类 id,可在分类页 URL 中找到']" />
### 笔记标签
<Route author="nczitzk" example="/yinxiang/tag/人生算法" path="/yinxiang/tag/:id" :paramsDesc="['标签名,可在标签页中找到']" />
## 英中协会
### 奖学金
<Route author="HenryQW" example="/gbcc/trust" path="/gbcc/trust" />
## 有道云笔记
### 学霸感悟
<Route author="nczitzk" example="/youdao/xueba" path="/youdao/xueba" />
### 笔记最新动态
<Route author="nczitzk" example="/youdao/latest" path="/youdao/latest" />
## 语雀
### 知识库
+2 -2
View File
@@ -20,6 +20,6 @@ RSSHub 是采用 MIT 许可的开源项目,使用完全免费。但是随着
我们通过以下方式接受赞助:
- [微信支付](https://i.loli.net/2019/03/23/5c950ebbc373e.png)
- [支付宝](https://i.loli.net/2019/03/23/5c950ebbc980e.png)
- [微信支付](https://diygod.me/images/wx.jpg)
- [支付宝](https://diygod.me/images/zfb.jpg)
- [Paypal](https://www.paypal.me/DIYgod)
+212 -62
View File
@@ -8,7 +8,7 @@ pageClass: routes
### 频道
<Route author="brilon" example="/21caijing/channel/readnumber" path="/21caijing/channel/:name" :paramsDesc="['频道名称,可在[https://m.21jingji.com/](https://m.21jingji.com/)页面URL中找到']"/>
<Route author="brilon" example="/21caijing/channel/readnumber" path="/21caijing/channel/:name" :paramsDesc="['频道名称,可在 [https://m.21jingji.com/](https://m.21jingji.com/) 页面 URL 中找到']"/>
## ABC News
@@ -34,11 +34,11 @@ pageClass: routes
### BBC 英文
<Route author="HenryQW" example="/bbc/world-asia" path="/bbc/:channel" :paramsDesc="['频道, 缺省为热门']">
<Route author="HenryQW DIYgod" example="/bbc/world-asia" path="/bbc/:channel" :paramsDesc="['频道,缺省为热门']">
通过提取文章全文,以提供比官方源更佳的阅读体验.
通过提取文章全文,以提供比官方源更佳的阅读体验。
支持大部分频道,频道名称见[BBC 官方 RSS](https://www.bbc.co.uk/news/10628494)。
支持大部分频道,频道名称见 [BBC 官方 RSS](https://www.bbc.co.uk/news/10628494)。
- 频道为单一路径,如 `https://feeds.bbci.co.uk/news/business/rss.xml` 则为 `/bbc/business`.
- 频道包含多重路径,如 `https://feeds.bbci.co.uk/news/world/asia/rss.xml` 则替换 `/` 为 `-` `/bbc/world-asia`.
@@ -47,11 +47,11 @@ pageClass: routes
### BBC 中文网
<Route author="HenryQW" example="/bbc/chinese/business" path="/bbc/:lang/:channel?" :paramsDesc="['简体或繁体','频道, 缺省为热门']">
<Route author="HenryQW" example="/bbc/chinese/business" path="/bbc/:lang/:channel?" :paramsDesc="['简体或繁体','频道,缺省为热门']">
通过提取文章全文,以提供比官方源更佳的阅读体验.
通过提取文章全文,以提供比官方源更佳的阅读体验。
支持大部分频道,频道名称见[BBC 中文网官方 RSS](https://www.bbc.com/zhongwen/simp/services/2009/09/000000_rss)。
支持大部分频道,频道名称见 [BBC 中文网官方 RSS](https://www.bbc.com/zhongwen/simp/services/2009/09/000000_rss)。
简体版:
@@ -87,7 +87,19 @@ pageClass: routes
<Route author="oppilate" example="/chicagotribune/nation-world" path="/chicagotribune/:category/:subcategory?" :paramsDesc="['目录分类', '子分类']">
相比官方 RSS,多提供全文。
目录分类[见其网站](https://www.chicagotribune.com/about/ct-chicago-tribune-rss-feeds-htmlstory.html)。例如,`https://www.chicagotribune.com/arcio/rss/category/nation-world/` 对应的 RSSHub 路由是 `/chicagotribune/nation-world`。由于官方源的部分路由有两级,因此这里也相应需要填写子分类。
目录分类 [见其网站](https://www.chicagotribune.com/about/ct-chicago-tribune-rss-feeds-htmlstory.html)。例如,`https://www.chicagotribune.com/arcio/rss/category/nation-world/` 对应的 RSSHub 路由是 `/chicagotribune/nation-world`。由于官方源的部分路由有两级,因此这里也相应需要填写子分类。
</Route>
## ChinaFile
<Route author="oppilate" example="/chinafile/all" path="/chinafile/:category?" :paramsDesc="['分类,默认 `all`']">
通过提取文章全文,以提供比官方源更佳的阅读体验。
| 全部 | The China NGO Project |
| ---- | --------------------- |
| all | ngo |
</Route>
@@ -97,39 +109,100 @@ pageClass: routes
<Route author="hillerliao" example="/egsea/flash" path="/egsea/flash" />
## FT 中文网
## Financial Times
### FT 中文网
<Route author="HenryQW xyqfer" example="/ft/chinese/hotstoryby7day" path="/ft/:language/:channel?" :paramsDesc="['语言,简体`chinese`,繁体`traditional`', '频道, 缺省为每日更新']">
<Route author="HenryQW xyqfer" example="/ft/chinese/hotstoryby7day" path="/ft/:language/:channel?" :paramsDesc="['语言,简体`chinese`,繁体`traditional`', '频道,缺省为每日更新']">
::: tip 提示
- 不支持付费文章.
- 由于未知原因 FT 中文网的 SSL 证书不被信任 (参见[SSL Labs 报告](https://www.ssllabs.com/ssltest/analyze.html?d=www.ftchinese.com&latest)), 所有文章通过 http 协议获取.
- 不支持付费文章。
- 由于未知原因 FT 中文网的 SSL 证书不被信任 (参见 [SSL Labs 报告](https://www.ssllabs.com/ssltest/analyze.html?d=www.ftchinese.com&latest)), 所有文章通过 http 协议获取。
:::
通过提取文章全文,以提供比官方源更佳的阅读体验.
通过提取文章全文,以提供比官方源更佳的阅读体验。
支持所有频道,频道名称见[官方频道 RSS](http://www.ftchinese.com/channel/rss.html).
支持所有频道,频道名称见 [官方频道 RSS](http://www.ftchinese.com/channel/rss.html).
- 频道为单一路径,如 `http://www.ftchinese.com/rss/news` 则为 `/ft/chinese/news`.
- 频道包含多重路径,如 `http://www.ftchinese.com/rss/column/007000002` 则替换 `/` 为 `-` `/ft/chinese/column-007000002`.
</Route>
### myFT 个人 RSS
<Route author="HenryQW" example="/ft/myft/rss-key" path="/ft/myft/:key" :paramsDesc="['myFT 个人 RSS 地址末尾的字符串']">
::: tip 提示
- 在 ft.com -> myFT -> Contact Preferences 中开启个人 RSS feed,见 [官方说明](https://help.ft.com/faq/email-alerts-and-contact-preferences/what-is-myft-rss-feed/)
- 从 RSS 地址结尾的字符串中获取 key,格式为 `12345678-abcd-4036-82db-vdv20db024b8`
:::
</Route>
## i-CABLE 有線新聞
<Route author="tpnonthealps" example="/icable/all" path="/icable/:category/:option?" :paramsDesc="['栏目', '选项(不指定时预设为「全文输出 (含题图)」的 `withphoto` )']">
细则:
- `:category` 栏目参数:
- `all`: 全站
- `local`: 本地(港聞)
- `international`: 國際(兩岸國際)
- `finance`: 財經
- `china`: 兩岸(有線中國組)
- `sports`: 體育
- `:option?` 可开启的选项:
- `plain`: 全文输出(纯文字)
- `withphoto`: 全文输出 (含题图) **(不指定 `:option?` 时将预设为此项)**
- 全文输出转换为简体字:`?opencc=t2s`
(`opencc` 是 RSSHub 的通用参数,详情请参阅 [「中文简繁体转换」](https://docs.rsshub.app/parameter.html#zhong-wen-jian-fan-ti-zhuan-huan))
</Route>
## NHK
### News Web Easy
<Route author="Andiedie" example="/nhk/news_web_easy" path="/nhk/news_web_easy"/>
## Phoronix
### 新闻与评测
<Route author="oppliate" example="/phoronix/news_topic/Intel" path="/phoronix/:page/:queryOrItem?" :paramsDesc="['页面', '对 `category` 页面是分类项目 `item`,对其它页面是主题 `q`,可以在网站顶部导航栏各项目链接里找出。如 `https://www.phoronix.com/scan.php?page=category&item=Computers` 对应 `/phoronix/category/Computers`']" />
## RTHK 傳媒透視
<Route author="tpnonthealps" example="/mediadigest/latest" path="/mediadigest/:range" :paramsDesc="['时间范围']">
细则:
- `:range` 时间范围参数
(可为 `latest` 或 `四位数字的年份`)
- `latest`: 最新的 50 篇文章
- `2020`: 2020 年的所有文章
- 全文输出转换为简体字: `?opencc=t2s`
(`opencc` 是 RSSHub 的通用参数,详情请参阅 [「中文简繁体转换」](https://docs.rsshub.app/parameter.html#zhong-wen-jian-fan-ti-zhuan-huan))
</Route>
## Solidot
### 最新消息
<Route author="sgqy" example="/solidot/linux" path="/solidot/:type?" :paramsDesc="['消息类型. 默认为 www. 在网站上方选择后复制子域名即可']">
<Route author="sgqy" example="/solidot/linux" path="/solidot/:type?" :paramsDesc="['消息类型。默认为 www. 在网站上方选择后复制子域名即可']">
::: tip 提示
@@ -149,7 +222,7 @@ Solidot 提供的 feed:
### News
<Route author="nczitzk" example="/telecompaper/news/mobile/2020/China/News" path="/telecompaper/news/:caty/:year?/:country?/:type?/:keyword?" :paramsDesc="['分类,见下表', '年份,可在所选分类页中 Filter 的 `Years` 选择器中选择相应年份,不限年份则填入 `all`,默认为不限', '国家或大洲,可在所选分类页中 Filter 的 `Countries` 选择器中选择相应国家或大洲,不限国家或大洲则填入 `all`,默认为不限', '类型,可在所选分类页中 Filter 的 `Types` 选择器中选择相应类型,不限类型则填入 `all`,默认为不限', '搜索关键字']">
<Route author="nczitzk" example="/telecompaper/news/mobile/2020/China/News" path="/telecompaper/news/:caty/:year?/:country?/:type?" :paramsDesc="['分类,见下表', '年份,可在所选分类页中 Filter 的 `Years` 选择器中选择相应年份,不限年份则填入 `all`,默认为不限', '国家或大洲,可在所选分类页中 Filter 的 `Countries` 选择器中选择相应国家或大洲,不限国家或大洲则填入 `all`,默认为不限', '类型,可在所选分类页中 Filter 的 `Types` 选择器中选择相应类型,不限类型则填入 `all`,默认为不限']">
可选分类如下
@@ -167,6 +240,24 @@ Solidot 提供的 feed:
</Route>
### Search
<Route author="nczitzk" example="/telecompaper/search/Nokia" path="/telecompaper/search/:keyword?/:company?/:sort?/:period?" :paramsDesc="['关键词', '公司名,默认为不限', '排序,见下表,默认为 Date Descending', '发表在时间段内,默认为 12 months']">
排序
| Date Ascending | Date Descending |
| -------------- | --------------- |
| 1 | 2 |
发表在时间段内
| 1 month | 3 months | 6 months | 12 months | 24 months |
| ------- | -------- | -------- | --------- | --------- |
| 1 | 3 | 6 | 12 | 24 |
</Route>
## The Economist
### 分类
@@ -185,6 +276,32 @@ Solidot 提供的 feed:
</Route>
## UDN
### 轉角國際
<Route author="emdoe" example="/udn/global/鏡頭背後" path="/udn/global/:tid" :paramsDesc="['標籤名稱,請在轉角國際首頁獲取;如果選擇輸入 `newest` 則輸出最新文章']">
## Voice of America (VOA)
透過提取全文,以獲得更好的閱讀體驗
<Route author="zphw" example="/voa/cantonese/zprtie-ttp" path="/voa/:language/:channel?" :paramsDesc="['語言','頻道,可於官網獲取']">
`语言`
| 粵語 | 中文 | 藏語 |
| --------- | ------- | ------- |
| cantonese | chinese | tibetan |
`频道`
可於各語言官網聚合新聞處 (如 <https://www.voacantonese.com/rssfeeds>) 獲取
例如 `https://www.voacantonese.com/api/zyrtyequty` 將對應 `/voa/cantonese/zyrtyequty`
</Route>
## Yahoo
### 新聞
@@ -201,7 +318,17 @@ Solidot 提供的 feed:
| 新聞總集 | 兩岸國際 | 財經 | 娛樂 | 體育 | 健康 |
| -------- | -------- | -------- | ------------- | ------ | ------ |
| (空) | world | business | entertainment | sports | health |
| (空) | world | business | entertainment | sports | health |
</Route>
## Yahoo! by Author
### 新聞
<Route author="loganrockmore" example="/yahoo-author/hannah-keyser" path="/yahoo-news/:author" :paramsDesc="['Author']">
Provides all of the articles by the specified Yahoo! author.
</Route>
@@ -219,25 +346,25 @@ Solidot 提供的 feed:
## 财新网
> 网站部分内容需要付费订阅,RSS 仅做更新提醒,不含付费内容.
> 网站部分内容需要付费订阅,RSS 仅做更新提醒,不含付费内容。
### 新闻分类
<Route author="idealclover" example="/caixin/finance/regulation" path="/caixin/:column/:category" :paramsDesc="['栏目名', '栏目下的子分类名']">
Column 列表:
Column 列表:
| 经济 | 金融 | 政经 | 环科 | 世界 | 观点网 | 文化 | 周刊 |
| ------- | ------- | ----- | ------- | ------------- | ------- | ------- | ------ |
| economy | finance | china | science | international | opinion | culture | weekly |
以金融板块为例的 category 列表: (其余 column 以类似方式寻找)
以金融板块为例的 category 列表:(其余 column 以类似方式寻找)
| 监管 | 银行 | 证券基金 | 信托保险 | 投资 | 创新 | 市场 |
| ---------- | ---- | -------- | --------------- | ---------- | ---------- | ------ |
| regulation | bank | stock | insurance_trust | investment | innovation | market |
Category 列表:
Category 列表:
| 封面报道 | 开卷 | 社论 | 时事 | 编辑寄语 | 经济 | 金融 | 商业 | 环境与科技 | 民生 | 副刊 |
| ---------- | ----- | --------- | --------------- | ----------- | ------- | ------- | -------- | ---------------------- | ------- | ------ |
@@ -249,6 +376,14 @@ Category 列表:
<Route author="EsuRt" example="/caixin/article" path="/caixin/article"/>
### 最新文章
<Route author="tpnonthealps" example="/caixin/latest" path="/caixin/latest">
说明:此 RSS feed 会自动抓取财新网的最新文章,但不包含 FM 及视频内容。
</Route>
## 第一财经
### 直播区
@@ -289,7 +424,7 @@ Category 列表:
<Route author="prnake" example="/initium/latest/zh-hans" path="/initium/:type?/:language?" :paramsDesc="['栏目,缺省为最新', '语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']"/>
Type 栏目:
Type 栏目:
| 最新 | 深度 | What’s New | 广场 | 科技 | 风物 | 特约 | ... |
| ------ | ------- | ---------- | ----------------- | ---------- | ------- | ------- | --- |
@@ -301,11 +436,11 @@ Type 栏目:
### 话题・标签
<Route author="AgFlore" example="/theinitium/tags/2019_10/zh-hans" path="/theinitium/tags/:type/:language?" :paramsDesc="['话题ID,可从话题页URL中获取,如<https://theinitium.com/tags/2019_10/>', '语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']"/>
<Route author="AgFlore" example="/theinitium/tags/2019_10/zh-hans" path="/theinitium/tags/:type/:language?" :paramsDesc="['话题 ID,可从话题页 URL 中获取,如<https://theinitium.com/tags/2019_10/>', '语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']"/>
### 作者
<Route author="AgFlore" example="/theinitium/author/ninghuilulu/zh-hans" path="theinitium/author/:type/:language?" :paramsDesc="['作者ID,可从作者主页URL中获取,如<https://theinitium.com/author/ninghuilulu/>','语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']"/>
<Route author="AgFlore" example="/theinitium/author/ninghuilulu/zh-hans" path="theinitium/author/:type/:language?" :paramsDesc="['作者 ID,可从作者主页 URL 中获取,如<https://theinitium.com/author/ninghuilulu/>','语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']"/>
### 个人订阅追踪动态
@@ -350,6 +485,16 @@ Type 栏目:
</Route>
## 华尔街日报 The Wall Street Journal (WSJ)
### 新闻
<Route author="oppilate" example="/wsj/en-us/opinion" path="/wsj/:lang/:category?" :paramsDesc="['语言,支持 `en-us`、`zh-cn`、`zh-tw`', '分类,仅 `en-us` 支持分类订阅。支持 `opinion`, `world_news`, `us_bussiness`, `market_news`, `technology`, `lifestyle`。']">
通过提取文章全文,以提供比官方源更佳的阅读体验。
</Route>
## 极客公园
### 全球快讯
@@ -386,7 +531,7 @@ category 对应的关键词有
### 即时新闻
<Route author="lengthmin" example="/zaobao/realtime/china" path="/zaobao/realtime/:type?" :paramsDesc="['分类, 缺省为 china']">
<Route author="lengthmin" example="/zaobao/realtime/china" path="/zaobao/realtime/:type?" :paramsDesc="['分类,缺省为 china']">
| 中国 | 新加坡 | 国际 | 财经 |
| ----- | --------- | ----- | -------- |
@@ -396,7 +541,7 @@ category 对应的关键词有
### 新闻
<Route author="lengthmin" example="/zaobao/znews/china" path="/zaobao/znews/:type?" :paramsDesc="['分类, 缺省为 china']">
<Route author="lengthmin" example="/zaobao/znews/china" path="/zaobao/znews/:type?" :paramsDesc="['分类,缺省为 china']">
| 中国 | 新加坡 | 东南亚 | 国际 | 体育 | 早报现在 |
| ----- | --------- | ------ | ----- | ------ | -------- |
@@ -432,19 +577,19 @@ category 对应的关键词有
- 中国分站 `cn`:
- 主频道:
- 主频道:
| 深度分析 | 时事要闻 | 生活 | 投资 |
| -------- | ----------- | ---- | --------- |
| analyses | generalnews | life | investing |
- 资讯子频道:
- 资讯子频道:
| 中国财经 | 国际财经 | 新闻人物 | 财经视点 |
| -------- | --------------------- | --------- | -------- |
| china | internationalbusiness | newsmaker | opinions |
- 专栏子频道:
- 专栏子频道:
| 中国财经专栏 | 国际财经专栏 | 大宗商品专栏 |
| ------------ | ------------ | ------------ |
@@ -452,7 +597,7 @@ category 对应的关键词有
- 美国分站 `us`:
- 主频道:
- 主频道:
| Business | Markets | World | Politics | Tech | Breakingviews | Wealth | Life |
| -------- | ------- | ----- | -------- | ---------- | ------------- | ------ | --------- |
@@ -460,7 +605,7 @@ category 对应的关键词有
- 英国分站 `uk`:
- 主频道:
- 主频道:
| Business | Markets | World | UK | Tech | Money | Breakingviews | Sport | Life |
| -------- | ------- | ----- | -- | ---------- | --------------- | ------------- | ------ | --------- |
@@ -478,9 +623,9 @@ category 对应的关键词有
### 新闻分类
<Route author="ranpox xyqfer" example="/infzm/2" path="/infzm/:id" :paramsDesc="['南方周末内容分区 id, 可在该内容分区的 URL 中找到(即 https://www.infzm.com/contents?term_id=:id)']">
<Route author="ranpox xyqfer" example="/infzm/2" path="/infzm/:id" :paramsDesc="['南方周末内容分区 id, 可在该内容分区的 URL 中找到(即 https://www.infzm.com/contents?term_id=:id)']">
下面给出部分参考:
下面给出部分参考:
| 推荐 | 新闻 | 观点 | 文化 | 人物 | 影像 | 专题 | 生活 | 视频 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
@@ -494,7 +639,7 @@ category 对应的关键词有
<Route author="proletarius101" example="/scmp/3" path="/scmp/:category_id" :paramsDesc="['栏目分类']">
栏目分类对应的数字编号见[官方 RSS](https://www.scmp.com/rss)。相比官方提供的 RSS,多提供了全文输出。
栏目分类对应的数字编号见 [官方 RSS](https://www.scmp.com/rss)。相比官方提供的 RSS,多提供了全文输出。
</Route>
@@ -502,13 +647,13 @@ category 对应的关键词有
### 新闻
<Route author="HenryQW" example="/nytimes/dual" path="/nytimes/:lang?" :paramsDesc="['语言, 缺省中文']">
<Route author="HenryQW" example="/nytimes/dual" path="/nytimes/:lang?" :paramsDesc="['语言,缺省中文']">
通过提取文章全文,以提供比官方源更佳的阅读体验。
| 默认中文 | 中英对照 | 英文 | 中英对照 (繁体中文) | 繁体中文 |
| 默认中文 | 中英对照 | 英文 | 中英对照 (繁体中文) | 繁体中文 |
| -------- | -------- | ---- | ----------------------- | ------------------ |
| (空) | dual | en | dual-traditionalchinese | traditionalchinese |
| (空) | dual | en | dual-traditionalchinese | traditionalchinese |
</Route>
@@ -545,6 +690,7 @@ category 对应的关键词有
| 2 | 4 | 3 | 453 |
</Route>
## 齐鲁晚报
### 新闻
@@ -565,21 +711,21 @@ category 对应的关键词有
### 观点
<Route author="LogicJake" example="/people/opinion/223228" path="/people/opinion/:id" :paramsDesc="['板块id,可在 URL 中找到']"/>
<Route author="LogicJake" example="/people/opinion/223228" path="/people/opinion/:id" :paramsDesc="['板块 id,可在 URL 中找到']"/>
### 环保频道
<Route author="zsimple" example="/people/env/74877" path="/people/env/:id" :paramsDesc="['板块id,可在 URL 中找到']"/>
<Route author="zsimple" example="/people/env/74877" path="/people/env/:id" :paramsDesc="['板块 id,可在 URL 中找到']"/>
### 习近平系列重要讲话
<Route author="LogicJake" example="/people/xjpjh" path="/people/xjpjh/:keyword?/:year?" :paramsDesc="['关键词,默认不填','年份,默认all']"/>
<Route author="LogicJake" example="/people/xjpjh" path="/people/xjpjh/:keyword?/:year?" :paramsDesc="['关键词,默认不填','年份,默认 all']"/>
## 人民日报社 国际金融报
### 栏目
<Route author="Origami404" example="/ifnews/48" path="/ifnews/:cid" :paramsDesc="['栏目ID']">
<Route author="Origami404" example="/ifnews/48" path="/ifnews/:cid" :paramsDesc="['栏目 ID']">
`cid`可在对应栏目的 url 后的参数中获取,如`热点快报`的栏目 url 为`http://www.ifnews.com/column.html?cid=48`, `cid`即为`48`.
@@ -597,7 +743,7 @@ category 对应的关键词有
### 新聞
<Route author="Arracc" example="/nikkei/news" path="/nikkei/:category/:article_type?" :paramsDesc="['版块','文章类型,free仅无料全文,缺省为无料全文、有料非全文']">
<Route author="Arracc" example="/nikkei/news" path="/nikkei/:category/:article_type?" :paramsDesc="['版块','文章类型,free 仅无料全文,缺省为无料全文、有料非全文']">
综合页文章标题添加板块标签
@@ -619,18 +765,6 @@ category 对应的关键词有
</Route>
## 网易新闻专栏
### 栏目
<Route author="Solist-X" example="/netease/news/special/1" path="/netease/news/special/:type?" :paramsDesc="['栏目']">
| 轻松一刻 | 槽值 | 人间 | 大国小民 | 三三有梗 | 数读 | 看客 | 下划线 | 谈心社 | 哒哒 | 胖编怪聊 | 曲一刀 | 今日之声 | 浪潮 | 沸点 |
| -------- | ---- | ---- | -------- | -------- | ---- | ---- | ------ | ------ | ---- | -------- | ------ | -------- | ---- | ---- |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
</Route>
## 卫报 The Guardian
通过提取文章全文,以提供比官方源更佳的阅读体验。
@@ -647,7 +781,7 @@ category 对应的关键词有
### 分类
<Route author="hoilc" example="/whb/bihui" path="/whb/:category" :paramsDesc="['文汇报分类名, 可在该分类的 URL 中找到(即 http://www.whb.cn/zhuzhan/:category/index.html)']" />
<Route author="hoilc" example="/whb/bihui" path="/whb/:category" :paramsDesc="['文汇报分类名,可在该分类的 URL 中找到(即 http://www.whb.cn/zhuzhan/:category/index.html)']" />
## 香港 01
@@ -657,19 +791,19 @@ category 对应的关键词有
### 栏目
<Route author="hoilc" example="/hk01/zone/11" path="/hk01/zone/:id" :paramsDesc="['栏目id, 可在URL中找到']" radar="1" rssbud="1"/>
<Route author="hoilc" example="/hk01/zone/11" path="/hk01/zone/:id" :paramsDesc="['栏目 id, 可在 URL 中找到']" radar="1" rssbud="1"/>
### 子栏目
<Route author="hoilc" example="/hk01/channel/391" path="/hk01/channel/:id" :paramsDesc="['子栏目id, 可在URL中找到']" radar="1" rssbud="1"/>
<Route author="hoilc" example="/hk01/channel/391" path="/hk01/channel/:id" :paramsDesc="['子栏目 id, 可在 URL 中找到']" radar="1" rssbud="1"/>
### 专题
<Route author="hoilc" example="/hk01/issue/649" path="/hk01/issue/:id" :paramsDesc="['专题id, 可在URL中找到']" radar="1" rssbud="1"/>
<Route author="hoilc" example="/hk01/issue/649" path="/hk01/issue/:id" :paramsDesc="['专题 id, 可在 URL 中找到']" radar="1" rssbud="1"/>
### 标签
<Route author="hoilc" example="/hk01/tag/2787" path="/hk01/tag/:id" :paramsDesc="['标签id, 可在URL中找到']" radar="1" rssbud="1"/>
<Route author="hoilc" example="/hk01/tag/2787" path="/hk01/tag/:id" :paramsDesc="['标签 id, 可在 URL 中找到']" radar="1" rssbud="1"/>
## 香港電台
@@ -691,11 +825,11 @@ category 对应的关键词有
### 栏目
<Route author="DIYgod" example="/bjnews/realtime" path="/bjnews/:category" :paramsDesc="['新京报的栏目名, 点击对应栏目后在地址栏找到']"/>
<Route author="DIYgod" example="/bjnews/realtime" path="/bjnews/:category" :paramsDesc="['新京报的栏目名,点击对应栏目后在地址栏找到']"/>
### 电子报
<Route author="MisteryMonster" example="/bjnews/epaper/A" path="/bjnews/epaper/:cat" :paramsDesc="['新京报叠名:`A`,`B`,`C`,`D`,特刊为`special`']"/>
<Route author="MisteryMonster" example="/bjnews/epaper/A" path="/bjnews/epaper/:cat" :paramsDesc="['新京报叠名:`A`,`B`,`C`,`D`, 特刊为`special`']"/>
## 新浪科技
@@ -739,7 +873,7 @@ category 对应的关键词有
### 新闻专题
<Route author="nczitzk" example="/cctv-special/315" path="/cctv-special/:id?" :paramsDesc="['专题 id,可在对应专题页 URL 中找到,默认为 `315` 即 3·15晚会']">
<Route author="nczitzk" example="/cctv-special/315" path="/cctv-special/:id?" :paramsDesc="['专题 id,可在对应专题页 URL 中找到,默认为 `315` 即 3·15 晚会']">
::: tip 提示
@@ -769,6 +903,10 @@ category 对应的关键词有
<Route author="xfangbao" example="/xwlb" path="/xwlb/index" />
### 央视网图片《镜象》
<Route author="nczitzk" example="/cctv/photo/jx" path="/cctv/photo/jx" />
## 朝日新聞中文網(繁體中文版)
### 新聞分類
@@ -896,3 +1034,15 @@ category 对应的关键词有
### 九江新闻
<Route author="jjlzg" example="/fjnews/jjnews" path="/fjnews/jjnews"/>
## 自由亚洲电台
<Route author="zphw" example="/rfa/mandarin" path="/rfa/:language?/:channel?/:subChannel?" :paramsDesc="['语言,默认 English', '频道', '子频道(如存在)']" />
通过指定频道参数,提供比官方源更佳的阅读体验。
参数均可在官网获取,如:
`https://www.rfa.org/cantonese/news` 对应 `/rfa/cantonese/news`
`https://www.rfa.org/cantonese/news/htm` 对应 `/rfa/cantonese/news/htm`
+135 -2
View File
@@ -28,6 +28,12 @@ pageClass: routes
<Route author="exuanbo" example="/polimi/news" path="/polimi/news/:language?" :paramsDesc="['English language code en']" />
## UTDallas
### International Student Services
<Route author="Chang4Tech" example="/utdallas/isso" path="/utdallas/isso" />
## 安徽工业大学
### 教务处
@@ -226,7 +232,7 @@ pageClass: routes
### BTBYR 趣味盒
<Route author="prnake" example="/bupt/funbox" path="/bupt/funbox" />
<Route author="prnake" example="/bupt/funbox" path="/bupt/funbox" selfhost="1"/>
::: warning 注意
由于需要登陆 BTBYR 后的 Cookie 值,所以只能自建,并且部署和订阅端均需支持 IPV6 网络或使用镜像站点。
@@ -386,6 +392,14 @@ xskb1 对应 <http://www.auto.uestc.edu.cn/index/xskb1.htm>
</Route>
### 研究生院
<Route author="huyyi" example="/uestc/gr" path="/uestc/gr" />
### 信息与通信工程学院
<Route author="huyyi" example="/uestc/sice" path="/uestc/sice" />
## 东北大学
### 东北大学新闻网
@@ -440,6 +454,22 @@ xskb1 对应 <http://www.auto.uestc.edu.cn/index/xskb1.htm>
</Route>
## 复旦大学继续教育学院
### 成人夜大通知公告
<Route author="mrbruce516" example="/fudan/cce" path="/fudan/cce" />
## 福州大学
### 教务处教学通知
<Route author="Lao-Liu233" example="/fzu/jxtz" path="/fzu/jxtz"/>
### 教务处专家讲座
<Route author="Lao-Liu233" example="/fzu/zjjz" path="/fzu/zjjz"/>
## 广东工业大学
### 校内新闻网
@@ -615,6 +645,18 @@ category 列表:
部分文章需要经过统一身份认证后才能阅读全文。
:::
## 哈尔滨工业大学(深圳)
### 哈尔滨工业大学(深圳) - 新闻中心
<Route author="yx1302317313" example="/hitsz/article/id-74" path="/hitsz/article/:category?" :paramsDesc="['分类名,默认为通知公告']" >
| 校区要闻 | 媒体报道 | 通知公告 | 综合新闻 | 校园动态 | 讲座论坛 | 热点专题 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| id-116 | id-80 | id-74 | id-75 | id-77 | id-78 | id-79 |
</Route>
## 哈尔滨工业大学(威海)
### 今日工大 - 通知公告
@@ -833,6 +875,8 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
| -------- | -------- |
| tt | yw |
</Route>
### 暨南大学校园时讯
<Route author="hang333" example="/jnu/xysx/yxsd" path="/jnu/xysx/:type" :paramDesc="['校园时讯类型']">
@@ -841,6 +885,8 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
| -------- | -------- |
| yxsd | bmkx |
</Route>
## 江南大学
### 教务处通知
@@ -934,10 +980,18 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
## 马萨诸塞大学 阿默斯特分校 (UMASS Amherst)
### 电子与计算机工程系新闻
### 电子与计算机工程系
#### 新闻
<Route author="gammapi" example="/umass/amherst/ecenews" path="/umass/amherst/ecenews" radar="1" rssbud="1"/>
#### 研讨会
<Route author="gammapi" example="/umass/amherst/eceseminar" path="/umass/amherst/eceseminar" radar="1" rssbud="1"/>
注:[源站](https://ece.umass.edu/seminar)在未公布研讨会计划时会清空页面导致 Rsshub 抓取不到内容,此属正常现象。
### 信息与计算机科学系新闻
<Route author="gammapi" example="/umass/amherst/csnews" path="/umass/amherst/csnews" radar="1" rssbud="1"/>
@@ -1598,6 +1652,19 @@ type 列表:
</Route>
## 武汉纺织大学
### 信息门户公告
<Route author="Loyio" example="/wtu/2" path="/wtu/:type"
:paramsDesc="['公告类型, 详见表格']">
| 公告类型 | 通知公告 | 教务信息 | 科研动态 |
| -------- | -------- | -------- | -------- |
| 参数 | 1 | 2 | 3 |
</Route>
## 西安电子科技大学
### 教务处
@@ -1641,6 +1708,20 @@ type 列表:
<Route author="nczitzk" example="/xjtu/gs/tzgg" path="/xjtu/gs/tzgg" />
## 西北工业大学
### 翱翔门户
<Route author="WhoIsSure" example="/nwpu/10000" path="/nwpu/:column" :paramsDesc="['栏目ID']">
栏目 ID
| 咨询中心 | 通知公告 | 校内新闻 | 校务公开 | 历史文件查询 | 教育教学 | 学术交流 | 学院动态 | 部门动态 |
| -------- | -------- | -------- | -------- | ------------ | -------- | -------- | -------- | -------- |
| 10000 | 10001 | 10002 | 10003 | 10004 | 10005 | 10006 | 10007 | 10008 |
</Route>
## 西南财经大学
### 经济信息工程学院
@@ -1685,6 +1766,20 @@ type 列表:
</Route>
## 信阳师范学院
### 高等教育自学考试办公室
<Route author="VxRain" example="/xynu/zkb/zkzx" path="/xynu/zkb/:category" :paramsDesc="['分类ID']">
分类 ID(如果请求的分类 ID 在不存在下表中,默认请求`zkzx`)
| 主考专业 | 规章制度 | 实践课程 | 毕业论文 | 学士学位 | 自考毕业 | 自考教材 | 自考指南 | 联系我们 | 自考资讯 | 报名指南 | 日程安排 | 新生入门 | 转考免考 | 复习资料 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| zkzy | gzzd | sjkc | bylw | xsxw | zkby | zkjc | zkzn | lxwm | zkzx | bmzn | rcap | xsrm | zkmk | fxzl |
</Route>
## 扬州大学
### 官网消息
@@ -1906,6 +2001,10 @@ type 列表:
## 中国地质大学 (武汉)
### 今日文章 - 包含全校网站最新通知
<Route author="Dorad" example="/cug/news" path="/cug/news" />
### 研究生院综合通知公告
<Route author="sanmmm" example="/cug/graduate" path="/cug/graduate" />
@@ -1918,6 +2017,14 @@ type 列表:
<Route author="chunibyo-wly" example="/cug/xgxy" path="/cug/xgxy" />
### 工程学院
<Route author="Dorad" example="/cug/gcxy/1" path="/cug/gcxy/:type" />
| 所有 | 学院新闻 | 通知公告 | 党建工作 | 学术动态 | 本科生教育 | 研究生教育 | 教工之家 |
| ---- | -------- | -------- | -------- | -------- | ---------- | ---------- | -------- |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
## 中国海洋大学
### 信息科学与工程学院
@@ -1948,6 +2055,8 @@ type 列表:
| ------ | ------ | ------ | ------ |
| jx | ky | gl | fw |
</Route>
### 教务处通知新闻
<Route author="hang333" example="/ustc/jwc/info" path="/ustc/jwc/:type?" :paramsDesc="['可选,默认显示所有种类']">
@@ -1956,6 +2065,8 @@ type 列表:
| ---- | -------- | ---- | -------- |
| info | teaching | exam | exchange |
</Route>
## 中国科学院
### 成果转化
@@ -2116,6 +2227,28 @@ type 列表:
</Route>
## 重庆理工大学
### 学校通知
<Route author="Colin-XKL" example="/cqut/news" path="/cqut/news" radar="1"/>
### 图书馆通知
<Route author="Colin-XKL" example="/cqut/libnews" path="/cqut/libnews" radar="1"/>
## 重庆文理学院
### 通知公告
<Route author="Fatpandac" example="/cqwu/news/academiceve" path="/cqwu/news/:type?" :paramsDesc="['可选,默认为 academiceve ']" radar="1">
| 通知公告 | 学术活动公告 |
| -------- | ------------ |
| notify | academiceve |
</Route>
## 中山大学
### 数据科学与计算机学院动态
-1
View File
@@ -48,7 +48,6 @@ app.context.debug = {
etag: 0,
paths: [],
routes: [],
ips: [],
errorPaths: [],
errorRoutes: [],
};
+26 -8
View File
@@ -39,16 +39,13 @@ const calculateValue = () => {
ua: envs.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
listenInaddrAny: envs.LISTEN_INADDR_ANY || 1, // 是否允许公网连接,取值 0 1
requestRetry: parseInt(envs.REQUEST_RETRY) || 2, // 请求失败重试次数
// 是否显示 Debug 信息,取值 boolean 'false' 'key' ,取值为 'false' false 时永远不显示,取值为 'key' 时带上 ?debug=key 显示
debugInfo: envs.DEBUG_INFO || true,
requestTimeout: parseInt(envs.REQUEST_TIMEOUT) || 30000, // Milliseconds to wait for the server to end the response before aborting the request
// 是否显示 Debug 信息,取值 'true' 'false' 'some_string' ,取值为 'true' 时永久显示,取值为 'false' 时永远隐藏,取值为 'some_string' 时请求带上 '?debug=some_string' 显示
debugInfo: envs.DEBUG_INFO || 'true',
disallowRobot: envs.DISALLOW_ROBOT !== '0' && envs.DISALLOW_ROBOT !== 'false',
titleLengthLimit: parseInt(envs.TITLE_LENGTH_LIMIT) || 150,
redis: {
url: envs.REDIS_URL || 'redis://localhost:6379/',
options: {
// 支持这些参数 https://github.com/NodeRedis/node_redis#options-object-properties
password: envs.REDIS_PASSWORD || null,
},
},
nodeName: envs.NODE_NAME,
suffix: envs.SUFFIX,
@@ -89,6 +86,9 @@ const calculateValue = () => {
yuque: {
token: envs.YUQUE_TOKEN,
},
zhihu: {
cookies: envs.ZHIHU_COOKIES,
},
puppeteerWSEndpoint: envs.PUPPETEER_WS_ENDPOINT,
loggerLevel: envs.LOGGER_LEVEL || 'info',
proxyUri: envs.PROXY_URI,
@@ -99,6 +99,7 @@ const calculateValue = () => {
auth: envs.PROXY_AUTH,
url_regex: envs.PROXY_URL_REGEX || '.*',
},
allowOrigin: envs.ALLOW_ORIGIN,
blacklist: envs.BLACKLIST && envs.BLACKLIST.split(','),
whitelist: envs.WHITELIST && envs.WHITELIST.split(','),
allowLocalhost: envs.ALLOW_LOCALHOST,
@@ -107,7 +108,10 @@ const calculateValue = () => {
email: {
config: email_config,
},
sentry: envs.SENTRY,
sentry: {
dsn: envs.SENTRY,
routeTimeout: parseInt(envs.SENTRY_ROUTE_TIMEOUT) || 30000,
},
chuiniu: {
member: envs.CHUINIU_MEMBER,
},
@@ -136,7 +140,7 @@ const calculateValue = () => {
cookies: discuz_cookies,
},
scihub: {
host: envs.SCIHUB_HOST || 'https://sci-hub.tw/',
host: envs.SCIHUB_HOST || 'https://sci-hub.se/',
},
hotlink: {
template: envs.HOTLINK_TEMPLATE,
@@ -160,6 +164,10 @@ const calculateValue = () => {
device_id: envs.XIAOYUZHOU_ID,
refresh_token: envs.XIAOYUZHOU_TOKEN,
},
miniflux: {
instance: envs.MINIFLUX_INSTANCE || 'https://reader.miniflux.app',
token: envs.MINIFLUX_TOKEN || '',
},
nga: {
uid: envs.NGA_PASSPORT_UID,
cid: envs.NGA_PASSPORT_CID,
@@ -173,6 +181,16 @@ const calculateValue = () => {
game4399: {
cookie: envs.GAME_4399,
},
dida365: {
username: envs.DIDA365_USERNAME,
password: envs.DIDA365_PASSWORD,
},
scboy: {
token: envs.SCBOY_BBS_TOKEN,
},
wordpress: {
cdnUrl: envs.WORDPRESS_CDN,
},
};
};
calculateValue();
+33 -65
View File
@@ -1,25 +1,19 @@
const wrapper = require('co-redis');
const Redis = require('redis');
const Redis = require('ioredis');
const Lru = require('lru-cache');
const md5 = require('@/utils/md5');
const config = require('@/config').value;
const logger = require('@/utils/logger');
module.exports = function (app, options = {}) {
module.exports = function (app) {
let available = false;
const { prefix = 'koa-redis-cache:', expire = config.cache.routeExpire, passParam = '', maxLength = Infinity, ignoreQuery = true } = options;
const globalCache = {
get: null,
set: null,
};
if (config.cache.type === 'redis') {
const { host: redisHost = 'localhost', port: redisPort = 6379, url: redisUrl = `redis://${redisHost}:${redisPort}/`, options: redisOptions = {} } = config.redis || {};
if (!redisOptions.password) {
delete redisOptions.password;
}
const redisClient = wrapper(Redis.createClient(redisUrl, redisOptions));
const redisClient = new Redis(config.redis.url);
redisClient.on('error', (error) => {
available = false;
logger.error('Redis error: ', error);
@@ -54,7 +48,7 @@ module.exports = function (app, options = {}) {
value = JSON.stringify(value);
}
if (key) {
redisClient.setex(key, maxAge, value);
redisClient.set(key, value, 'NX', 'EX', maxAge);
}
},
client: redisClient,
@@ -69,13 +63,13 @@ module.exports = function (app, options = {}) {
globalCache.set = app.context.cache.set;
} else if (config.cache.type === 'memory') {
const pageCache = new Lru({
maxAge: expire * 1000,
max: maxLength,
maxAge: config.cache.routeExpire * 1000,
max: Infinity,
});
const routeCache = new Lru({
maxAge: expire * 1000,
max: maxLength,
maxAge: config.cache.routeExpire * 1000,
max: Infinity,
updateAgeOnGet: true,
});
@@ -147,66 +141,40 @@ module.exports = function (app, options = {}) {
return v;
};
async function getCache(ctx, key) {
const value = await globalCache.get(key);
let ok = false;
if (value) {
ctx.response.status = 200;
if (config.cache.type === 'redis') {
ctx.response.set({
'X-Koa-Redis-Cache': 'true',
});
} else if (config.cache.type === 'memory') {
ctx.response.set({
'X-Koa-Memory-Cache': 'true',
});
}
try {
ctx.state.data = JSON.parse(value);
} catch (e) {
ctx.state.data = {};
}
ok = true;
}
return ok;
}
async function setCache(ctx, key, expire) {
if (ctx.response.get('Cache-Control') !== 'no-cache' && ctx.state && ctx.state.data) {
ctx.state.data.lastBuildDate = new Date().toUTCString();
const body = JSON.stringify(ctx.state.data);
await globalCache.set(key, body, expire);
}
}
return async function cache(ctx, next) {
const { url, path } = ctx.request;
const resolvedPrefix = typeof prefix === 'function' ? prefix.call(ctx, ctx) : prefix;
const key = resolvedPrefix + md5(ignoreQuery ? path : url);
const key = 'koa-redis-cache:' + md5(ctx.request.path);
if (!available || (passParam && ctx.request.query[passParam])) {
if (!available) {
return await next();
}
let ok = false;
try {
ok = await getCache(ctx, key);
const value = await globalCache.get(key);
if (value) {
ctx.response.status = 200;
if (config.cache.type === 'redis') {
ctx.response.set({
'X-Koa-Redis-Cache': 'true',
});
} else if (config.cache.type === 'memory') {
ctx.response.set({
'X-Koa-Memory-Cache': 'true',
});
}
ctx.state.data = JSON.parse(value);
return;
}
} catch (e) {
ok = false;
}
if (ok) {
return;
//
}
await next();
try {
const trueExpire = expire;
setCache(ctx, key, trueExpire);
} catch (e) {
//
if (ctx.response.get('Cache-Control') !== 'no-cache' && ctx.state && ctx.state.data) {
ctx.state.data.lastBuildDate = new Date().toUTCString();
const body = JSON.stringify(ctx.state.data);
await globalCache.set(key, body, config.cache.routeExpire);
}
};
};
-5
View File
@@ -4,11 +4,6 @@ module.exports = async (ctx, next) => {
}
ctx.debug.paths[ctx.request.path]++;
const ip = ctx.ips[0] || ctx.ip;
if (!ctx.debug.ips[ip]) {
ctx.debug.ips[ip] = 0;
}
ctx.debug.ips[ip]++;
ctx.debug.request++;
await next();
+2 -1
View File
@@ -5,6 +5,7 @@ const headers = {
'Access-Control-Allow-Methods': 'GET',
'Content-Type': 'application/xml; charset=utf-8',
'Cache-Control': `public, max-age=${config.cache.routeExpire}`,
'X-Content-Type-Options': 'nosniff',
};
if (config.nodeName) {
headers['RSSHub-Node'] = config.nodeName;
@@ -14,7 +15,7 @@ module.exports = async (ctx, next) => {
logger.info(`${ctx.url}, user IP: ${ctx.ips[0] || ctx.ip}`);
ctx.set(headers);
ctx.set({
'Access-Control-Allow-Origin': `${ctx.host}`,
'Access-Control-Allow-Origin': `${config.allowOrigin || ctx.host}`,
});
await next();
+12 -3
View File
@@ -4,9 +4,9 @@ const Sentry = require('@sentry/node');
const art = require('art-template');
const path = require('path');
if (config.sentry) {
if (config.sentry.dsn) {
Sentry.init({
dsn: config.sentry,
dsn: config.sentry.dsn,
});
Sentry.configureScope((scope) => {
scope.setTag('node_name', config.nodeName);
@@ -17,7 +17,16 @@ if (config.sentry) {
module.exports = async (ctx, next) => {
try {
const time = +new Date();
await next();
if (config.sentry.dsn && +new Date() - time >= config.sentry.routeTimeout) {
Sentry.withScope((scope) => {
scope.setTag('route', ctx._matchedRoute);
scope.setTag('name', ctx.request.path.split('/')[1]);
scope.addEventProcessor((event) => Sentry.Handlers.parseRequest(event, ctx.request));
Sentry.captureException(new Error('Route Timeout'));
});
}
} catch (err) {
let message = err;
if (err.name && (err.name === 'HTTPError' || err.name === 'RequestError')) {
@@ -140,7 +149,7 @@ Please ensure you have deployed the [master branch](https://github.com/DIYgod/RS
}
}
if (config.sentry) {
if (config.sentry.dsn) {
Sentry.withScope((scope) => {
scope.setTag('route', ctx._matchedRoute);
scope.setTag('name', ctx.request.path.split('/')[1]);
+13 -10
View File
@@ -1,4 +1,4 @@
const he = require('he');
const entities = require('entities');
const mercury_parser = require('@postlight/mercury-parser');
const cheerio = require('cheerio');
const OpenCC = require('opencc');
@@ -24,14 +24,14 @@ module.exports = async (ctx, next) => {
ctx.state.data.item = ctx.state.data.item || [];
// decode HTML entities
ctx.state.data.title && (ctx.state.data.title = he.decode(ctx.state.data.title + ''));
ctx.state.data.description && (ctx.state.data.description = he.decode(ctx.state.data.description + ''));
ctx.state.data.title && (ctx.state.data.title = entities.decodeXML(ctx.state.data.title + ''));
ctx.state.data.description && (ctx.state.data.description = entities.decodeXML(ctx.state.data.description + ''));
// sort items
ctx.state.data.item = ctx.state.data.item.sort((a, b) => +new Date(b.pubDate || 0) - +new Date(a.pubDate || 0));
ctx.state.data.item.forEach((item) => {
item.title && (item.title = he.decode(item.title + ''));
const handleItem = async (item) => {
item.title && (item.title = entities.decodeXML(item.title + ''));
// handle pubDate
if (item.pubDate) {
@@ -111,9 +111,12 @@ module.exports = async (ctx, next) => {
$ele.removeAttr(e);
});
});
item.description = he.decode($('body').html() + '') + (config.suffix || '');
item.description = entities.decodeXML($('body').html() + '') + (config.suffix || '');
}
});
return item;
};
ctx.state.data.item = await Promise.all(ctx.state.data.item.map(handleItem));
if (ctx.query) {
// limit
@@ -148,7 +151,7 @@ module.exports = async (ctx, next) => {
const description = item.description || title;
const author = item.author || '';
let isFilter = true;
ctx.query.filter_title && (isFilter = isFilter && title.match(makeRegex(ctx.query.filter_title)));
ctx.query.filter_title && (isFilter = title.match(makeRegex(ctx.query.filter_title)));
ctx.query.filter_description && (isFilter = isFilter && description.match(makeRegex(ctx.query.filter_description)));
ctx.query.filter_author && (isFilter = isFilter && author.match(makeRegex(ctx.query.filter_author)));
return isFilter;
@@ -165,7 +168,7 @@ module.exports = async (ctx, next) => {
const description = item.description || title;
const author = item.author || '';
let isFilter = true;
ctx.query.filterout_title && (isFilter = isFilter && !title.match(makeRegex(ctx.query.filterout_title)));
ctx.query.filterout_title && (isFilter = !title.match(makeRegex(ctx.query.filterout_title)));
ctx.query.filterout_description && (isFilter = isFilter && !description.match(makeRegex(ctx.query.filterout_description)));
ctx.query.filterout_author && (isFilter = isFilter && !author.match(makeRegex(ctx.query.filterout_author)));
return isFilter;
@@ -221,7 +224,7 @@ module.exports = async (ctx, next) => {
// scihub
if (ctx.query.scihub) {
ctx.state.data.item.map((item) => {
item.link = item.doi ? `https://sci-hub.tw/${item.doi}` : `https://sci-hub.tw/${item.link}`;
item.link = item.doi ? `${config.scihub.host}${item.doi}` : `${config.scihub.host}${item.link}`;
return item;
});
}
+9 -5
View File
@@ -1,16 +1,20 @@
const art = require('art-template');
const path = require('path');
const config = require('@/config').value;
const typeRegrx = /\.(atom|rss)$/;
const unsupportedRegrx = /\.json$/;
const typeRegex = /\.(atom|rss)$/;
const unsupportedRegex = /\.json$/;
module.exports = async (ctx, next) => {
if (ctx.request.path.match(unsupportedRegrx)) {
if (ctx.request.path.match(unsupportedRegex)) {
throw Error('<b>JSON output had been removed, see: <a href="https://github.com/DIYgod/RSSHub/issues/1114">https://github.com/DIYgod/RSSHub/issues/1114</a></b>');
}
ctx.state.type = ctx.request.path.match(typeRegrx) || ['', ''];
ctx.request.path = ctx.request.path.replace(typeRegrx, '');
if (ctx.headers['user-agent'] && ctx.headers['user-agent'].includes('Reeder')) {
ctx.request.path = ctx.request.path.replace(/.com$/, '');
}
ctx.state.type = ctx.request.path.match(typeRegex) || ['', ''];
ctx.request.path = ctx.request.path.replace(typeRegex, '');
await next();
+589 -62
View File
File diff suppressed because it is too large Load Diff
+37
View File
@@ -0,0 +1,37 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const type = ctx.params.type || 'new';
const key = type === 'day' ? ctx.params.key.slice(0, 4) + '/' + ctx.params.key.slice(4, 6) + '/' + ctx.params.key.slice(6, 8) : ctx.params.key || '';
const link = 'https://www.141jav.com' + `/${type === 'day' ? '' : type}${type === 'new' ? '' : '/' + key}`.replace('//', '/');
const response = await got({
method: 'get',
url: link,
});
const $ = cheerio.load(response.data);
const list = $('div.columns');
let itemPicUrl;
ctx.state.data = {
title: `141jav - ${type} ${key}`,
link: link,
item:
list &&
list
.map((index, item) => {
item = $(item);
itemPicUrl = item.find('img').attr('src');
return {
title: '【' + item.find('div.card-content.is-flex > h5 > a').text() + '】' + item.find('div.card-content.is-flex > h5 > span').text(),
description: `<img src="${itemPicUrl}"/><br/>Time: ${item.find('p.subtitle.is-6 > a').text()}<br/>Desc: ${item.find('p.level.has-text-grey-dark').text()}`,
link: item.find('div.card-content.is-flex > h5 > a').attr('href'),
enclosure_url: item.find('div.card-content.is-flex > a').attr('href'),
enclosure_type: 'application/x-bittorrent',
};
})
.get(),
};
};
+37
View File
@@ -0,0 +1,37 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const type = ctx.params.type || 'new';
const key = type === 'day' ? ctx.params.key.slice(0, 4) + '/' + ctx.params.key.slice(4, 6) + '/' + ctx.params.key.slice(6, 8) : ctx.params.key || '';
const link = 'https://www.141ppv.com' + `/${type === 'day' ? '' : type}${type === 'new' ? '' : '/' + key}`.replace('//', '/');
const response = await got({
method: 'get',
url: link,
});
const $ = cheerio.load(response.data);
const list = $('div.columns');
let itemPicUrl;
ctx.state.data = {
title: `141ppv - ${type} ${key}`,
link: link,
item:
list &&
list
.map((index, item) => {
item = $(item);
itemPicUrl = item.find('img').attr('src');
return {
title: '【' + item.find('div.card-content.is-flex > h5 > a').text() + '】' + item.find('div.card-content.is-flex > h5 > span').text(),
description: `<img src="${itemPicUrl}"/><br/>Time: ${item.find('p.subtitle.is-6 > a').text()}<br/>Desc: ${item.find('p.level.has-text-grey-dark').text()}`,
link: item.find('div.card-content.is-flex > h5 > a').attr('href'),
enclosure_url: item.find('div.card-content.is-flex > a').attr('href'),
enclosure_type: 'application/x-bittorrent',
};
})
.get(),
};
};
+53
View File
@@ -0,0 +1,53 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const category = ctx.params.category || '';
const rootUrl = 'https://www.1point3acres.com';
const currentUrl = `${rootUrl}/${category === '' ? 'BlogPosts' : `category/${category.replace(/-/g, '/')}`}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const list = $('.mybloglist h2 a')
.slice(0, 10)
.map((_, item) => {
item = $(item);
return {
title: item.text(),
link: item.attr('href'),
};
})
.get();
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
content('h2, .meta_tags, .pagination, .subinfopost, #comments').remove();
item.description = content('.post').html();
item.pubDate = new Date(detailResponse.data.match(/"datePublished":"(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+00:00)","dateModified":/)[1]).toUTCString();
return item;
})
)
);
const title = $('title').text().split(' | ')[0];
ctx.state.data = {
title: `${title === 'BlogPosts' ? '全部' : title} - 一亩三分地论坛博客`,
link: currentUrl,
item: items,
};
};
+35 -23
View File
@@ -1,38 +1,50 @@
const got = require('@/utils/got');
const bbcode = require('bbcodejs');
module.exports = async (ctx) => {
const category = ctx.params.category;
let url;
let method;
let description;
let { title } = 'null';
// eslint-disable-next-line eqeqeq
if (title == 'null') {
method = 'get';
let title;
if (category === 'new') {
url = 'https://api.1point3acres.com/api/threads?type=new&pg=1&ps=20&includes=summary';
title = '最新帖子';
} else {
url = 'https://api.1point3acres.com/api/threads?type=hot&pg=1&ps=20&includes=summary';
title = '热门帖子';
}
// eslint-disable-next-line eqeqeq
category == 'new'
? ((url = 'https://api.1point3acres.com/api/threads?type=new&pg=1&ps=20&includes=last_reply'), (title = '最新帖子'))
: ((url = 'https://api.1point3acres.com/api/threads?type=hot&pg=1&ps=20&includes=last_reply'), (title = '最热帖子'));
const responseBasic = await got({
method: method,
method: 'get',
url: url,
});
const data = responseBasic.data.threads;
ctx.state.data = {
title: `${title} - 一亩三分地`,
link: `https://www.1point3acres.com/bbs/`,
description: `${title} - 一亩三分地`,
item: data.map((item) => {
// eslint-disable-next-line eqeqeq
item.last_reply.quote == '' ? (description = item.last_reply.message_bbcode) : (description = item.last_reply.quote);
return {
const bbcodeParser = new bbcode.Parser();
const items = await Promise.all(
data.map(async (item) => {
const result = {
title: `${item.subject}`,
// description: item.last_reply.message_bbcode,// + `<b>楼主:</b>` + item.author,
description: description,
// pubDate: new Date(item.submittime + ' GMT+8').toUTCString(),
description: `${item.summary}...<br><br><small>作者 ${item.author} · 回复 ${item.replies} · 查看 ${item.views}</small>`,
link: `https://instant.1point3acres.com/thread/${item.tid}`,
};
}),
try {
await ctx.cache.tryGet(item.link, async () => {
const detail = await got({
method: 'get',
url: `https://api.1point3acres.com/instant/threads/${item.tid}`,
referer: 'https://instant.1point3acres.com/',
});
result.description = `${bbcodeParser.toHTML(detail.data.thread.message_bbcode)}<br><br><small>作者 ${item.author} · 回复 ${item.replies} · 查看 ${item.views}</small>`;
});
} catch (error) {
// nothing
}
return result;
})
);
ctx.state.data = {
title: `一亩三分地 - ${title}`,
link: `https://www.1point3acres.com/bbs/`,
item: items,
};
};
+13 -2
View File
@@ -3,6 +3,7 @@ const got = require('@/utils/got');
module.exports = async (ctx) => {
const url = `https://www.scientificamerican.com/podcast/60-second-science/`;
const cover = `https://static.scientificamerican.com/sciam/cache/file/484FA146-8892-477F-B38D18775563CC9E_small.jpg`;
const res = await got.get(url);
const $ = cheerio.load(res.data);
@@ -28,10 +29,17 @@ module.exports = async (ctx) => {
capture('.transcript__close').remove();
const intro = capture('.article-media__object').html() + '<br><br>';
const contents = intro + capture('.transcript__inner').html();
const contents =
intro +
capture('.transcript__inner')
.html()
.replace(/<p>\[?<em>\(?The above text.*this podcast.*?em.*?p>/g, '');
const track = capture('.podcasts__media > div > a').attr('href');
const single = {
title,
description: contents,
enclosure_url: track,
enclosure_type: 'audio/mpeg',
link: address,
guid: address,
author: author,
@@ -42,7 +50,10 @@ module.exports = async (ctx) => {
})
);
ctx.state.data = {
title: 'Transcripts of SA 60-Second Science',
itunes_author: 'Scientific American',
itunes_category: 'Science',
image: cover,
title: '60-Second Science',
link: url,
item: out,
};
+58
View File
@@ -0,0 +1,58 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const id = ctx.params.id || 'chan1';
const type = ctx.params.type || '';
const keyword = ctx.params.keyword || '';
const rootUrl = 'https://club.6parkbbs.com';
const indexUrl = `${rootUrl}/${id}/index.php`;
const currentUrl = `${indexUrl}${type === '' || keyword === '' ? '' : type === 'gold' ? '?app=forum&act=gold' : `?action=search&act=threadsearch&app=forum&${type}=${keyword}&submit=${type === 'type' ? '查询' : '栏目搜索'}`}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const list = $('#d_list ul li, #thread_list li, .t_l .t_subject')
.slice(0, 10)
.map((_, item) => {
item = $(item);
const a = item.find('a').eq(0);
return {
link: `${rootUrl}/${id}/${a.attr('href')}`,
};
})
.get();
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
item.title = content('title').text().replace(' -6park.com', '');
item.author = detailResponse.data.match(/送交者: .*>(.*)<.*\[/)[1];
item.pubDate = new Date(detailResponse.data.match(/于 (.*) 已读/)[1]).toUTCString();
item.description = content('pre')
.html()
.replace(/<font color="#E6E6DD">6park.com<\/font>/g, '');
return item;
})
)
);
ctx.state.data = {
title: $('title').text(),
link: currentUrl,
item: items,
};
};
+17
View File
@@ -0,0 +1,17 @@
const Cheerio = require('cheerio');
const got = require('got');
async function loadArticle(link) {
const resp = await got(link);
const article = Cheerio.load(resp.body);
const title = article('.entry-title').text();
const entry_children = article('div.entry-content').children().toArray();
const imgs = Cheerio.load(entry_children.shift()).text(); // 去除懒加载代码减少返回体积
const txt = Cheerio.load(entry_children).html();
return {
title,
description: imgs.concat(txt),
pubDate: article('time')[0].attribs.datetime.replace('>', ''),
link,
};
}
module.exports = loadArticle;
+28
View File
@@ -0,0 +1,28 @@
const got = require('got');
const Cheerio = require('cheerio');
const { SUB_NAME_PREFIX, SUB_URL } = require('./const');
const loadArticle = require('./article');
module.exports = async (ctx) => {
const { cat = '8kasianidol' } = ctx.params;
const url = `${SUB_URL}category/${cat}/`;
const resp = await got(url);
const $ = Cheerio.load(resp.body);
ctx.state.data = resp.body
? {
title: `${SUB_NAME_PREFIX}-${$('#wrap > div > div > div > div.sec-panel-head > h1 > span').text()}`,
link: url,
item: await Promise.all(
Cheerio.load(resp.body)('#wrap > div > div > div > ul > li.item')
.map((_, e) => {
const { href } = Cheerio.load(e)('h2 > a')[0].attribs;
return ctx.cache.tryGet(href, async () => loadArticle(href));
})
.toArray()
),
}
: {
title: `${SUB_NAME_PREFIX}-${cat}`,
link: url,
item: [{ title: '获取失败' }],
};
};
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
SUB_NAME_PREFIX: '8KCosplay',
SUB_URL: 'https://www.8kcosplay.com/',
};
+27
View File
@@ -0,0 +1,27 @@
const got = require('got');
const Cheerio = require('cheerio');
const { SUB_NAME_PREFIX, SUB_URL } = require('./const');
const loadArticle = require('./article');
const url = SUB_URL;
module.exports = async (ctx) => {
const response = await got(url);
ctx.state.data = {
title: `${SUB_NAME_PREFIX}-最新`,
link: url,
item: response.body
? await Promise.all(
Cheerio.load(response.body)('#wrap > div > div > div > ul > li.item')
.map((_, e) => {
const { href } = Cheerio.load(e)('div > h2 > a')[0].attribs;
return ctx.cache.tryGet(href, async () => loadArticle(href));
})
.toArray()
)
: [
{
title: '获取失败!',
},
],
};
};
+51
View File
@@ -0,0 +1,51 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const category = ctx.params.category || 'lxzn-yzjy';
const rootUrl = 'http://www.93.gov.cn';
const currentUrl = `${rootUrl}/${category}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const list = $('li.clearfix a')
.slice(0, 15)
.map((_, item) => {
item = $(item);
return {
title: item.text(),
link: `${rootUrl}${item.attr('href')}`,
pubDate: new Date(item.next().text()).toUTCString(),
};
})
.get();
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
item.description = content('.pageContent').html();
item.author = content('.pageTitle ul li').eq(1).text().replace('来源:', '');
return item;
})
)
);
ctx.state.data = {
title: $('title').text(),
link: currentUrl,
item: items,
};
};
+68
View File
@@ -0,0 +1,68 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const rootUrl = 'https://amturing.acm.org';
const currentUrl = `${rootUrl}/byyear.cfm`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const items = await Promise.all(
$('.award-winners-list li')
.slice(0, 5)
.map(async (_, item) => {
item = $(item);
const year = item.find('span').text().replace(/\(|\)/g, '');
const pubDate = new Date(`${year}-12-31`).toUTCString();
const winnersUrls = [];
let winnerResponses = [];
item.find('a').each(function () {
winnersUrls.push(`${rootUrl}${$(this).attr('href')}`);
});
winnerResponses = winnersUrls.map((url) =>
got({
method: 'get',
url,
})
);
const description = await Promise.all(winnerResponses).then((winners) => {
let winnerDescription = '';
for (const winner of winners) {
const content = cheerio.load(winner.data);
const image = content('.featured-photo').html();
const column = content('#tertiary-navigation').parent();
content('#tertiary-navigation').remove();
winnerDescription += image + column.html();
}
return Promise.resolve(winnerDescription);
});
return {
pubDate,
description,
title: year,
link: currentUrl,
};
})
.get()
);
ctx.state.data = {
title: 'A.M. Turing Award Winners',
link: currentUrl,
item: items,
};
};
+1 -1
View File
@@ -33,7 +33,7 @@ module.exports = async (ctx) => {
let bio;
const authorInfo = '.article__body__author-details > p:nth-child(2)';
if (capture(authorInfo).html() !== null) {
bio = `<br><br><br><br><hr><br><b>` + author.trim() + '</b> ' + capture(authorInfo).html().trim() + `<p><hr>`;
bio = `<br><br><hr><br><b>` + author.trim() + '</b> ' + capture(authorInfo).html().trim() + `<p></p><hr>`;
capture('.article__inline-sidebar').remove();
} else {
bio = '';
+3 -3
View File
@@ -2,7 +2,7 @@ const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const rootUrl = 'https://m.allnow.com';
const rootUrl = 'https://www.allnow.com';
const currentUrl = `${rootUrl}/column/${ctx.params.id}`;
const response = await got({
method: 'get',
@@ -10,7 +10,7 @@ module.exports = async (ctx) => {
});
const $ = cheerio.load(response.data);
const list = $('a.normal')
const list = $('.post-list .post')
.slice(0, 10)
.map((_, item) => {
item = $(item);
@@ -33,7 +33,7 @@ module.exports = async (ctx) => {
item.title = content('p.title').text();
item.author = content('a.single-name').eq(0).text();
item.description = content('#article-content').html();
item.pubDate = new Date(detailResponse.data.match(/time:"(.*)",abstract:"/)[1] + ' GMT+8').toUTCString();
item.pubDate = new Date(detailResponse.data.match(/time:"(.*?)"\}/)[1] + ' GMT+8').toUTCString();
return item;
})
+58
View File
@@ -0,0 +1,58 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const config = {
this: '2037295071',
back: '2330861071',
next: '2037296071',
};
module.exports = async (ctx) => {
const type = ctx.params.type || 'this';
const node = config[type];
if (!node) {
throw Error('Bad type. See <a href="https://docs.rsshub.app/reading.html#kindle-unlimited-hui-yuan-xian-shi-mian-fei-du-shu-dan">docs</a>');
}
const rootUrl = `https://www.amazon.cn/b?node=${node}`;
const response = await got({
method: 'get',
url: rootUrl,
});
const $ = cheerio.load(response.data);
const list = $('.apb-browse-searchresults-product .a-spacing-top-small a')
.map((_, item) => {
item = $(item);
return {
link: 'https://www.amazon.cn' + item.attr('href'),
title: item.text().trim(),
};
})
.get();
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
item.author = content('span.author').text();
item.description = content('#ebooks-img-canvas').html() + content('#detailBullets_feature_div').html();
return item;
})
)
);
ctx.state.data = {
title: `KU会员限时免费读 - ${$('title').text().split('-')[1]}`,
link: rootUrl,
item: items,
};
};
+33
View File
@@ -0,0 +1,33 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const rootUrl = 'https://anytxt.net';
const currentUrl = `${rootUrl}/download`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const items = $('.has-medium-font-size')
.map((_, item) => {
item = $(item);
const date = item.text().replace(':', '');
return {
title: date,
link: currentUrl,
pubDate: new Date(date).toUTCString(),
description: `<ol>${item.next().html()}</ol>`,
};
})
.get();
ctx.state.data = {
title: 'Release Notes - AnyTXT',
link: currentUrl,
item: items,
};
};
+2 -2
View File
@@ -5,7 +5,7 @@
const got = require('@/utils/got'); // get web content
const cheerio = require('cheerio'); // html parser
const he = require('he');
const entities = require('entities');
const base_url = 'https://www.aozora.gr.jp/index_pages/';
module.exports = async (ctx) => {
@@ -50,7 +50,7 @@ module.exports = async (ctx) => {
let title = '';
let title_sub = '';
for (let j = 0; j < title_info.length; ++j) {
const tmp = he.decode($(title_info[j]).html()); // should convert from escaped to unicode
const tmp = entities.decodeXML($(title_info[j]).html()); // should convert from escaped to unicode
if (tmp.includes('作品名:')) {
title = $(title_info[j]).find('td:nth-child(2)').text();
}
+2 -5
View File
@@ -15,13 +15,10 @@ module.exports = async (ctx) => {
const apiResponse = (
await got({
method: 'get',
url: `https://amp-api.apps.apple.com/v1/catalog/${country}/apps/${id.replace(
'id',
''
)}?platform=web&additionalPlatforms=appletv%2Cipad%2Ciphone%2Cmac&extend=description%2CdeveloperInfo%2CeditorialVideo%2Ceula%2CfileSizeByDevice%2CmessagesScreenshots%2CprivacyPolicyUrl%2CprivacyPolicyText%2CpromotionalText%2CscreenshotsByType%2CsupportURLForLanguage%2CversionHistory%2CvideoPreviewsByType%2CwebsiteUrl&include=genres%2Cdeveloper%2Creviews%2Cmerchandised-in-apps%2Ccustomers-also-bought-apps%2Cdeveloper-other-apps%2Capp-bundles%2Ctop-in-apps%2Ceula&l=${lang}`,
url: `https://amp-api.apps.apple.com/v1/catalog/${country}/apps/${id.replace('id', '')}?platform=web&include=Cmerchandised-in-apps%2Ctop-in-apps%2Ceula&l=${lang}`,
headers: {
authorization:
'Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IldlYlBsYXlLaWQifQ.eyJpc3MiOiJBTVBXZWJQbGF5IiwiaWF0IjoxNTc0MTk3NDA3LCJleHAiOjE1ODk3NDk0MDd9.ael_GP97O4fyXJuQAQlmC7ieY-t-OOGFwtXShhVA6m_p9Sq03D-_FiUKSfZ2iXGob3vPFnDe0s_OKI3Tg7KVaA',
'Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkNSRjVITkJHUFEifQ.eyJpc3MiOiI4Q1UyNk1LTFM0IiwiaWF0IjoxNjA3MDMxMTcwLCJleHAiOjE2MTAwNTUxNzB9.qzq2PKkPBNDwHbShoBY3T7J2IjgWsR_MyAvTnZtQB5FZjsH_ZY5esBa0qXbA9kUiq_90GkRoNVMR03meOQQ7SQ',
authority: 'amp-api.apps.apple.com',
referer: target,
},
+40
View File
@@ -0,0 +1,40 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const rootUrl = 'https://www.asml.com';
const currentUrl = `${rootUrl}/en/news/press-releases`;
const response = await got({
method: 'get',
url: currentUrl,
});
const list = response.data.match(/<a class="results-list__listitem" href="(.*)">/g).map((item) => ({
link: `${rootUrl}${item.split('href="')[1].replace('">', '')}`,
}));
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
item.title = content('title').text().replace('| ASML', '');
item.description = content('.longcopy').html();
item.pubDate = new Date(detailResponse.data.match(/"datePublished": "(.*)",/)[1]).toUTCString();
return item;
})
)
);
ctx.state.data = {
title: 'Press releases | ASML',
link: currentUrl,
item: items,
};
};
+36
View File
@@ -0,0 +1,36 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const name = ctx.params.name;
const url = ctx.params.type ? `https://www.av01.tv/actor/${name}&o=${ctx.params.type}` : `https://www.av01.tv/actor/${name}`;
const response = await got({
method: 'get',
url: url,
});
const data = response.data;
const $ = cheerio.load(data);
const list = $('div.col-sm-6.col-md-4.col-lg-4');
ctx.state.data = {
title: `${name}的影片`,
description: `${name}的影片`,
link: `https://www.av01.tv/actor/${name}`,
item:
list &&
list
.map((index, item) => {
item = $(item);
const itemPicUrl = `${item.find('img').attr('data-src')}`;
return {
title: item.find('span.video-title.title-truncate.m-t-5').text(),
description: `翻译${item.find('div.video-added.title-truncate').text()}<br><img src="${itemPicUrl}">`,
link: `https://www.av01.tv/${item.find('a').attr('href')}`,
};
})
.get(),
};
};
+36
View File
@@ -0,0 +1,36 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const name = ctx.params.name;
const url = ctx.params.type ? `https://www.av01.tv/tag/${name}&o=${ctx.params.type}` : `https://www.av01.tv/tag/${name}`;
const response = await got({
method: 'get',
url: url,
});
const data = response.data;
const $ = cheerio.load(data);
const list = $('div.col-sm-6.col-md-4.col-lg-4');
ctx.state.data = {
title: `${name}类型的影片`,
description: `${name}类型的影片`,
link: `https://www.av01.tv/tag/${name}`,
item:
list &&
list
.map((index, item) => {
item = $(item);
const itemPicUrl = `${item.find('img').attr('data-src')}`;
return {
title: item.find('span.video-title.title-truncate.m-t-5').text(),
description: `翻译${item.find('div.video-added.title-truncate').text()}<br><img src="${itemPicUrl}">`,
link: `https://www.av01.tv/${item.find('a').attr('href')}`,
};
})
.get(),
};
};
+24 -33
View File
@@ -1,43 +1,34 @@
const got = require('@/utils/got');
const date = require('@/utils/date');
module.exports = async (ctx) => {
const response = await got({
method: 'post',
method: 'get',
url: 'http://www.baijingapp.com/api/get_more_articles/',
responseType: 'json',
form: {
deviceid: 'ios',
page: 1,
},
});
const resList = response.data;
const data = JSON.parse(response.data.substr(1, response.data.length - 1));
// json字符串转json对象
const resListObj = new Function('return ' + resList)();
if (resListObj.state === 1) {
const output = resListObj.data.list.map((item) => {
const title = item.title;
const link = 'https://www.baijingapp.com/article/' + item.id;
const time = item.time;
const author = item.user_name;
const image = item.image;
const single = {
title,
link,
time,
author,
image,
};
return single;
});
ctx.state.data = {
title: `白鲸出海`,
desription: '白鲸出海 - 泛互联网出海服务平台',
item: output,
const output = data.data.list.map((item) => {
const title = item.title;
const link = 'https://www.baijingapp.com/article/' + item.id;
const pubDate = date(item.time.replace(' ', ''));
const author = item.user_name;
const description = `<img src="${item.image}">`;
const single = {
title,
link,
pubDate,
author,
description,
};
}
return single;
});
ctx.state.data = {
title: `白鲸出海`,
desription: '白鲸出海 - 泛互联网出海服务平台',
item: output,
};
};
+38
View File
@@ -0,0 +1,38 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const lang = ctx.params.lang || 'en';
const id = ctx.params.id || 'bandizip';
const rootUrl = `https://${lang}.bandisoft.com`;
const currentUrl = `${rootUrl}/${id}/history/`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const items = $('h2')
.map((_, item) => {
item = $(item);
const title = item.text();
item.children('font').remove();
return {
title,
link: currentUrl,
description: item.next().html(),
pubDate: new Date(item.text()).toUTCString(),
};
})
.get();
ctx.state.data = {
title: $('title').text(),
link: currentUrl,
item: items,
};
};
+51
View File
@@ -0,0 +1,51 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const time = ctx.params.time || 'shishidashiku';
const rootUrl = 'http://www.banyuetan.org';
const currentUrl = `${rootUrl}/byt/${time}/index.html`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
const list = $('.byt_mian_image_list_con ul li a')
.slice(0, 10)
.map((_, item) => {
item = $(item);
return {
link: item.attr('href'),
title: item.attr('title'),
};
})
.get();
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
item.description = content('#detail_content').html();
item.author = content('.detail_tit_source').text().replace('来源:', '');
item.pubDate = new Date(content('meta[property="og:release_date"]').attr('content')).toUTCString();
return item;
})
)
);
ctx.state.data = {
title: $('title').text(),
link: currentUrl,
item: items,
};
};
+30 -20
View File
@@ -47,30 +47,40 @@ module.exports = async (ctx) => {
}
const items = await Promise.all(
feed.items.splice(0, 10).map(async (item) => {
const response = await got({
method: 'get',
url: item.link,
});
feed.items.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const response = await got({
method: 'get',
url: item.link,
});
const $ = cheerio.load(response.data);
const $ = cheerio.load(response.data);
let description;
let description;
if (response.request.options.url.pathname.startsWith('/news/av')) {
description = utils.ProcessAVFeed($, item.link);
} else {
description = utils.ProcessFeed($, item.link);
}
if (response.request.options.url.pathname.startsWith('/news/av')) {
description = item.content;
} else {
description = utils.ProcessFeed($);
}
const single = {
title: item.title,
description,
pubDate: item.pubDate,
link: item.link,
};
return Promise.resolve(single);
})
let section = 'sport';
const urlSplit = item.link.split('/');
const sectionSplit = urlSplit[urlSplit.length - 1].split('-');
if (sectionSplit.length > 1) {
section = sectionSplit[0];
}
section = section[0].toUpperCase() + section.slice(1);
return {
title: `[${section}] ${item.title}`,
description,
pubDate: item.pubDate,
link: item.link,
};
})
)
);
ctx.state.data = {
+13 -110
View File
@@ -1,83 +1,6 @@
const cheerio = require('cheerio');
const ProcessImage = ($, e, c, noscript = false) => {
const img = $(e).find(c);
if (img.length > 0) {
let message;
// special handling for img wrapped in <noscript>
if (noscript) {
// eslint-disable-next-line no-unused-vars
const i = cheerio.load(img[0].children[0].data)('img')[0];
message = `<figure><img alt='${i.attribs.alt}' src='${i.attribs.src}'><br><figcaption>`;
} else {
if (img[0].attribs.src) {
// handle cover image and lazy-loading images
message = `<figure><img alt='${img[0].attribs.alt ? img[0].attribs.alt : ''}' src='${img[0].attribs.src.replace(/(?<=\/news\/).*?(?=\/cpsprodpb)/, '600')}'><br><figcaption>`;
} else {
message = `<figure><img alt='${img[0].attribs['data-alt'] ? img[0].attribs['data-alt'] : ''}' src='${img[0].attribs['data-src'].replace(/(?<=\/news\/).*?(?=\/cpsprodpb)/, '600')}'><br><figcaption>`;
}
// add image caption
const figcaption = $(e).find('.media-caption__text');
if (figcaption.length > 0) {
message += `${$(figcaption[0]).text().trim()}`;
}
// add image copyright
const copyright = $(e).find('.story-image-copyright');
if (copyright.length > 0) {
message += ` ©${$(copyright[0]).text().trim()}`;
}
}
message += '</figcaption></figure>';
$(message).insertAfter(e);
}
};
const ProcessVideo = ($, e, c) => {
const video = $(e).find(c);
video.each((i, f) => {
const cover = $(f).children('img.player-with-placeholder__image');
if (cover.length > 0) {
$(cover[0]).insertBefore(e);
}
const link = $(f).find('figure.js-media-player-unprocessed');
if (link.length > 0) {
const url = JSON.parse(link[0].attribs['data-playable']).settings.externalEmbedUrl;
const message = `<br><a href='${url}'>使用浏览器播视频/view video in browser</a>`;
$(message).insertAfter(e);
}
});
};
const ProcessAVFeed = ($) => {
const content = $('div.vxp-media__summary');
const video = $('div.vxp-media__player');
video.each((i, e) => {
const cover = $(e).children('img.vxp-media__placeholder-image');
if (cover.length > 0) {
$(cover[0]).insertBefore(content[0].firstChild);
}
const link = $(e).find('figure.js-media-player-unprocessed');
if (link.length > 0) {
const url = JSON.parse(link[0].attribs['data-playable']).settings.externalEmbedUrl;
const message = `<br><a href='${url}'>使用浏览器播视频/view video in browser</a>`;
$(message).insertAfter(content[0].firstChild);
}
});
return content.html();
};
const ProcessFeed = ($, link) => {
const ProcessFeed = ($) => {
// by default treat it as a hybrid news with video and story-body__inner
let content = $('div.story-body__inner');
let content = $('#main-content article');
if (content.length === 0) {
// it's a video news with video and story-body
@@ -90,45 +13,25 @@ const ProcessFeed = ($, link) => {
}
// remove useless DOMs
content.find('div.bbccom_slot, .off-screen, .embed-report-link').each((i, e) => {
$(e).remove();
content.find('header, section, [data-testid="bbc-logo-wrapper"]').remove();
content.find('noscript').each((i, e) => {
$(e).parent().html($(e).html());
});
if ($('#comp-media-player').length > 0) {
// there is a cover video
let message = `<br><a href='${link}'>使用浏览器播视频/view video in browser</a>`;
const cover = $('#comp-media-player').find('img.player-with-placeholder__image');
if (cover.length > 0) {
// there is a cover image
message = `<br><img src='${cover[0].attribs.src}'>` + message;
content.find('img').each((i, e) => {
if (!$(e).attr('src') && $(e).attr('srcSet')) {
const srcs = $(e).attr('srcSet').split(', ');
const lastSrc = srcs[srcs.length - 1];
$(e).attr('src', lastSrc.split(' ')[0]);
}
$(message).insertAfter(content[0].lastChild);
}
// resize all images and videos
content.find('figure').each((i, e) => {
ProcessImage($, e, '.image-and-copyright-container > img');
// handle lazy-loading images
ProcessImage($, e, '.js-delayed-image-load');
ProcessImage($, e, 'div > div > div > img');
ProcessImage($, e, 'div > div > div > noscript', true);
ProcessVideo($, e, 'figure.media-with-caption > div.player-with-placeholder');
$(e).remove();
});
content.find('[data-component="media-block"] figcaption').prepend('<span>View video in browser: </span>');
return content.html();
};
module.exports = {
ProcessFeed,
ProcessAVFeed,
};
+77
View File
@@ -0,0 +1,77 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const type = ctx.params.type || 'all';
const caty = ctx.params.caty || 'all';
const area = ctx.params.area || 'all';
const year = ctx.params.year || 'all';
const order = ctx.params.order || '0';
const rootUrl = 'https://bde4.cc';
const currentUrl = `${rootUrl}/s/${caty}?${type === 'all' ? '' : '&type=' + type}${area === 'all' ? '' : '&area=' + area}${year === 'all' ? '' : '&year=' + year}&order=${order}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
let jsessionid = '';
const list = $('.card a')
.slice(0, 15)
.map((_, item) => {
item = $(item);
const link = item.attr('href').split(';jsessionid=');
jsessionid = link[1];
return {
title: item.attr('title'),
link: `${rootUrl}${link[0]}`,
pubDate: new Date(item.parent().find('.meta span').text()).toUTCString(),
};
})
.get();
const headers = {
cookie: `JSESSIONID=${jsessionid}`,
};
const items = await Promise.all(
list.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
headers,
});
const downloadResponse = await got({
method: 'get',
url: `${rootUrl}/downloadInfo/list?mid=${item.link.split('/')[4].split('.')[0]}`,
headers,
});
const content = cheerio.load(detailResponse.data);
let downloadLinks = '';
for (const downloadLink of downloadResponse.data) {
downloadLinks += `<div class="item"><div class="content">${downloadLink.downloadCategory.name}: <a href="${downloadLink.url}">${downloadLink.url}</a></div></div>`;
}
const torrents = content('#torrent-list .list');
item.description = content('.info0').html() + `<div><b>下载地址:</b>${downloadLinks}</div>` + `${torrents.html() ? `<div><b>种子列表:</b>${torrents.html()}</div>` : ''}`;
item.enclosure_url = torrents.html() ? torrents.find('a.header').last().attr('href') : downloadResponse.data.pop().url;
item.enclosure_type = 'application/x-bittorrent';
return item;
})
)
);
ctx.state.data = {
title: '哔嘀影视',
link: currentUrl,
item: items,
};
};
+71
View File
@@ -0,0 +1,71 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const config = {
events: '.tout-text a',
'industry-recognition': '.n-block-section .n-block .rich-text p b',
'press-releases': 'h5 a',
};
module.exports = async (ctx) => {
const category = ctx.params.category || 'press-releases';
const rootUrl = 'http://www.bell-labs.com';
const currentUrl = `${rootUrl}/events-news/${category}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
let items = (category === 'industry-recognition' ? $(config[category]).closest('.rich-text') : $(config[category]))
.slice(0, 15)
.map((_, i) => {
let item = $(i);
if (category === 'industry-recognition') {
item = item.children('.n-link-list').length > 0 ? item.children('.n-link-list') : item.children('p').eq(1);
}
if (item.children('a').attr('href')) {
item = item.children('a');
}
return {
title: item.text(),
link: item.attr('href') || currentUrl,
pubDate: new Date(category === 'events' ? item.text().split(':')[0].split(' - ')[0] : category === 'industry-recognition' ? $(i).children('p').eq(0).text() : '').toUTCString(),
description: category === 'events' ? item.closest('.n-block').next().find('.rich-text').html() : category === 'industry-recognition' ? `<p>${$(i).find('p').last().text()}</p>` : '',
};
})
.get();
if (category === 'press-releases') {
items = await Promise.all(
items.map(
async (item) =>
await ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
content('.social-media-sharing').remove();
item.description = content('.layout-content').html();
item.pubDate = new Date(content('meta[name="search-updated"]').attr('content')).toUTCString();
return item;
})
)
);
}
ctx.state.data = {
title: $('title').eq(0).text(),
link: currentUrl,
item: items,
};
};

Some files were not shown because too many files have changed in this diff Show More