-
+
作者: @{{ uid }}
- 举例: https://rsshub.app{{example}}
+ 举例: {{demoUrl}}
路由: {{ path }}
@@ -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
+ }
}
}
-
diff --git a/docs/.vuepress/components/RouteEn.vue b/docs/.vuepress/components/RouteEn.vue
index 301dac6fc7..11443c33eb 100644
--- a/docs/.vuepress/components/RouteEn.vue
+++ b/docs/.vuepress/components/RouteEn.vue
@@ -1,13 +1,13 @@
-
+
Author: @{{ uid }}
- Example: https://rsshub.app{{example}}
+ Example: {{demoUrl}}
Route: {{ path }}
@@ -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
+ }
}
}
-
diff --git a/docs/.vuepress/public/readable-douban.png b/docs/.vuepress/public/readable-douban.png
new file mode 100644
index 0000000000..727e3b2871
Binary files /dev/null and b/docs/.vuepress/public/readable-douban.png differ
diff --git a/docs/.vuepress/public/readable-twitter.png b/docs/.vuepress/public/readable-twitter.png
new file mode 100644
index 0000000000..2fa4c2af35
Binary files /dev/null and b/docs/.vuepress/public/readable-twitter.png differ
diff --git a/docs/.vuepress/public/readable-weibo.png b/docs/.vuepress/public/readable-weibo.png
new file mode 100644
index 0000000000..56dc9104c3
Binary files /dev/null and b/docs/.vuepress/public/readable-weibo.png differ
diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl
index 73a6a17482..1640a6aaad 100644
--- a/docs/.vuepress/styles/index.styl
+++ b/docs/.vuepress/styles/index.styl
@@ -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;
+}
diff --git a/docs/README.md b/docs/README.md
index a92991cda5..6899dc6760 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -25,7 +25,7 @@ RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以
### Special Sponsors
-
+
### Sponsors
diff --git a/docs/anime.md b/docs/anime.md
index cc18fb87fd..cf25578ecb 100644
--- a/docs/anime.md
+++ b/docs/anime.md
@@ -288,7 +288,7 @@ pageClass: routes
### 风之动漫
-
+
## 海猫吧
@@ -332,6 +332,10 @@ pageClass: routes
+### 分类更新
+
+
+
## 鼠绘漫画
### 鼠绘漫画
diff --git a/docs/bbs.md b/docs/bbs.md
index d8aa8b50e3..ae580e0c24 100644
--- a/docs/bbs.md
+++ b/docs/bbs.md
@@ -108,6 +108,12 @@ pageClass: routes
| ---- | ------------ | ---- | ----- |
| jobs | translations | qa | links |
+## LowEndTalk
+
+### Discussion
+
+
+
## MCBBS
### 版块
@@ -168,12 +174,24 @@ pageClass: routes
### 帖子
-
+
帖子网址如果为 那么帖子 id 就是 `1789863`。
+## SCBOY 论坛
+
+### 帖子
+
+
+
+帖子网址如果为 那么帖子 tid 就是 `1789863`。
+
+访问水区需要添加环境变量 `SCBOY_BBS_TOKEN`, 详情见部署页面的配置模块。 `SCBOY_BBS_TOKEN`在 cookies 的`bbs_token`中。
+
+
+
## V2EX
### 最热 / 最新主题
@@ -204,6 +222,22 @@ pageClass: routes
+## 超理论坛
+
+### 板块
+
+
+
+| 数学 | 物理 | 化学 | 生物 | 天文 | 技术 | 管理 | 公告 |
+| ---- | ------- | ---- | ------- | ----- | ---- | ----- | ------ |
+| math | physics | chem | biology | astro | tech | admin | announ |
+
+| 其他 | 语言 | 社科 | 科幻 | 辑录 |
+| ------ | ---- | ------ | ------ | ----------- |
+| others | lang | socsci | sci-fi | collections |
+
+
+
## 电鸭社区
### 工作机会
@@ -226,7 +260,11 @@ pageClass: routes
### 虎扑 BBS 论坛
-
+
+
+此路由与旧的 `/hupu/bxj/:id/:order?` 等价,但推荐使用 `/hupu/bbs/:id/:order?`,旧路由可能会在未来被删除。
+
+
### 分类
@@ -304,6 +342,7 @@ pageClass: routes
| CrackMe | crackme |
| Pwn | pwn |
| WEB 安全 | web |
+| 外文翻译 | translate |
| 全站 | all |
| 类型 | type |
@@ -373,6 +412,24 @@ pageClass: routes
+## 品葱
+
+### 发现
+
+
+
+| 最新 | 推荐 | 热门 |
+| ---- | --------- | ---- |
+| new | recommend | hot |
+
+### 精选
+
+
+
+### 话题
+
+
+
## 三星盖乐世社区
### 最新帖子
@@ -439,6 +496,12 @@ pageClass: routes
+### 用户帖子
+
+
+
+用户 ID 可以通过打开用户的主页后查看地址栏的 `un` 字段来获取。
+
## 万维读者
### 焦点新闻
@@ -469,24 +532,142 @@ pageClass: routes
+## 小木虫论坛
+
+### 期刊点评
+
+
+
+| SCI 期刊 | 中文期刊 |
+| -------- | -------- |
+| | cn |
+
+### 分类
+
+
+
+::: 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 |
+
+
+
## 一亩三分地
-### 主题帖
+### 帖子
+
+
+
+| 热门帖子 | 最新帖子 |
+| -------- | -------- |
+| hot | new |
+
+### 用户主题帖
-### 回帖
+### 用户回帖
-### 帖子 (手机端的最热与最新 Tab)
-
-
-
-| 最热帖子 | 最新帖子 |
-| -------- | -------- |
-| hot | new |
-
### 录取结果
@@ -502,6 +683,37 @@ pageClass: routes
:::
+### 博客
+
+
+
+| 分类 | 分类名 |
+| ---------- | --------------------------------------------------------------------- |
+| 全部 | |
+| 一亩三分地 | 一亩三分地 |
+| 论坛精华 | 一亩三分地 - 论坛精华 |
+| 咨询服务 | 咨询服务 |
+| 学校院系 | 学校院系信息 |
+| 找工求职 | 如何找工作 |
+| 美国经济 | 如何找工作 - 美国经济与就业 |
+| 杂谈其他 | 其他类别 |
+| 抄袭 | 其他类别 - 抄袭 |
+| 直播 | 其他类别 - 直播 |
+| 热门专业 | eecsmis 统计金工等热门专业 |
+| EECSMIS | eecsmis 统计金工等热门专业 - eecsmis 专业 |
+| 数据科学 | eecsmis 统计金工等热门专业 - 数据科学 |
+| 统计金工 | eecsmis 统计金工等热门专业 - 生物统计金融工程公共健康生物技术制药行业 |
+| 留学申请 | 留学申请信息 |
+| GT 考试 | 留学申请信息 - gt 考试 |
+| 定位 | 留学申请信息 - 定位 |
+| 文书写作 | 留学申请信息 - 文书写作 |
+| 面试 | 留学申请信息 - 面试 |
+| 移民绿卡 | 移民办绿卡 |
+| 美国学习 | 美国学习 |
+| 美国生活 | 美国生活 |
+
+
+
## 直播吧
### 子论坛
diff --git a/docs/blog.md b/docs/blog.md
index 831f8b83d4..2a71f09a64 100644
--- a/docs/blog.md
+++ b/docs/blog.md
@@ -10,12 +10,20 @@ pageClass: routes
+## Benedict Evans
+
+
+
## Google Sites
### 文章更新
+## Gwern Branwen
+
+
+
## Hedwig.pub
@@ -72,6 +80,12 @@ pageClass: routes
+## Phrack Magazine
+
+### 文章
+
+
+
## WordPress
diff --git a/docs/design.md b/docs/design.md
index c125f20967..5703dca277 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -122,6 +122,42 @@ Behance 用户主页 URL 获取用户名,如
+## 优设网
+
+### 设计专题
+
+
+
+更多设计专题请参见 [优设专题](https://www.uisdc.com/zt)
+
+
+
+### 细节猎人
+
+
+
+更多细节标签请参见 [全部标签](https://www.uisdc.com/alltopics)
+
+
+
+### 设计话题
+
+
+
+### 行业新闻
+
+
+
+| 全部新闻 | 活动赛事 | 品牌资讯 | 新品推荐 |
+| -------- | --------------- | ---------- | ------------ |
+| | events-activity | brand-news | new-products |
+
+
+
+### 优设读报
+
+
+
## 站酷
### 推荐
diff --git a/docs/en/README.md b/docs/en/README.md
index f49d0b8daf..27fb40172b 100644
--- a/docs/en/README.md
+++ b/docs/en/README.md
@@ -25,7 +25,7 @@ RSSHub can be used with browser extension [RSSHub Radar](https://github.com/DIYg
### Special Sponsors
-
+
### Sponsors
diff --git a/docs/en/bbs.md b/docs/en/bbs.md
index f6b29af101..bce33ca479 100644
--- a/docs/en/bbs.md
+++ b/docs/en/bbs.md
@@ -29,3 +29,21 @@ pageClass: routes
| x | 7 |
+
+## LowEndTalk
+
+### Discussion
+
+
+
+## SCBOY forum
+
+### Thread
+
+
+
+If the url of the thread is then tid would be `1789863`.
+
+When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environment`. See for details. `SCBOY_BBS_TOKEN` is included in cookies with `bbs_token`.
+
+
diff --git a/docs/en/blog.md b/docs/en/blog.md
index a7d4ab0446..f0e9d942df 100644
--- a/docs/en/blog.md
+++ b/docs/en/blog.md
@@ -31,3 +31,14 @@ pageClass: routes
### Essays
+
+## Phrack Magazine
+
+### Article
+
+
+
+## WordPress
+
+
+
diff --git a/docs/en/game.md b/docs/en/game.md
index 9600be3024..e60cbd6d56 100755
--- a/docs/en/game.md
+++ b/docs/en/game.md
@@ -4,6 +4,52 @@ pageClass: routes
# Gaming
+## Blizzard
+
+### News
+
+
+
+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 |
+
+
+
## dekudeals
### Category
@@ -16,6 +62,12 @@ pageClass: routes
+## Konami
+
+### PES Mobile Announcement
+
+
+
## Metacritic
### Game Releases
@@ -52,6 +104,14 @@ Sorting types, default to `date`:
+### Feed The Beast Modpack Updates
+
+
+| 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`. |
+
+
## Nintendo
### eShop New Game Releases
@@ -114,6 +174,18 @@ For instance, in `https://store.steampowered.com/search/?specials=1&term=atelier
+
+::: 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
diff --git a/docs/en/government.md b/docs/en/government.md
index e2e37f9485..567dc11595 100644
--- a/docs/en/government.md
+++ b/docs/en/government.md
@@ -4,12 +4,51 @@ pageClass: routes
# Goverment
+## Central Intelligence Agency
+
+### Annual FOIA Reports
+
+
## Ministry of Foreign Affairs of Japan
### Press conference
+## Supreme Court of the United States
+
+### Arguments Audios
+
+
+
+## The United States Trade Representative
+
+### Press Releases
+
+
+
+::: tip Tip
+
+Fill in the English expression for the month in the Month field, eg `December` for the 12th Month。
+
+:::
+
+
+
+## U.S. Department of the Treasury
+
+### Press Releases
+
+
+
+Category
+
+| Press Releases | Statements & Remarks | Readouts | Testimonies |
+| -------------- | -------------------- | -------- | ----------- |
+| all | statements-remarks | readouts | testimonies |
+
+
+
## United Nations
### Security Council Vetoed a Resolution
@@ -20,4 +59,4 @@ pageClass: routes
### Dispute settlement news
-
\ No newline at end of file
+
diff --git a/docs/en/install/README.md b/docs/en/install/README.md
index 71b8329e5a..b0ec4ea209 100644
--- a/docs/en/install/README.md
+++ b/docs/en/install/README.md
@@ -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: . 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 |
+
diff --git a/docs/en/journal.md b/docs/en/journal.md
index ffdf589d93..05f727b4f2 100644
--- a/docs/en/journal.md
+++ b/docs/en/journal.md
@@ -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
+
+
+### Topics
+
diff --git a/docs/en/multimedia.md b/docs/en/multimedia.md
index d6ed19b8a4..8e03ec5b2d 100644
--- a/docs/en/multimedia.md
+++ b/docs/en/multimedia.md
@@ -6,9 +6,9 @@ pageClass: routes
## 60-Second Science - Scientific American
-### Transcript
+
-
+Full transcript support for better user experience.
## 99% Invisible
@@ -113,6 +113,6 @@ Official RSS: https://eztv.io/ezrss.xml
-## Youtube
+## YouTube
Refer to [#youtube](/en/social-media.html#youtube)
diff --git a/docs/en/new-media.md b/docs/en/new-media.md
index 686a03cc35..f06929a605 100644
--- a/docs/en/new-media.md
+++ b/docs/en/new-media.md
@@ -35,6 +35,24 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
+## ASML Holding N.V.
+
+### Press releases & announcements
+
+
+
+## Bell Labs
+
+### Event and News
+
+
+
+| Featured events | Latest recognition | Press releases |
+| ------- | ---------- | -------- |
+| events | industry-recognition | press-releases |
+
+
+
## BOF
### Home
@@ -49,6 +67,10 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
## CGTN
+### Opinions
+
+
+
### Most Read & Most Share
@@ -57,6 +79,56 @@ Compared to the official one, the RSS feed generated by RSSHub not only has more
+### Editors' Pick
+
+
+
+## China Labour Bulletin
+
+### Commentary and Analysis
+
+
+
+## China Labour Watch
+
+### Reports
+
+
+
+| All | Automotive | Cookware | Electronics | Footwear | Furniture | Garment | General | Printing | Retail | Toys |
+| - | - | - | - | - | - | - | - | - | - | - |
+| | 2 | 6 | 14 | 3 | 4 | 10 | 8 | 1 | 9 | 7 |
+
+
+
+## Day One
+
+### Blog
+
+
+
+## DeepMind
+
+### Blog
+
+
+
+| All | Podcasts | Research | News |
+| --- | -------- | -------- | ---- |
+| | Podcasts | Research | News |
+
+
+
+## Deutsche Welle
+
+
+
+| All | German Press | Culture | Economy | Science & Nature |
+| ---- | -------- | -------- | -------- | -------- |
+| all | press | cul | eco | sci |
+
+
+
## Engadget
### Chinese
@@ -95,6 +167,30 @@ Provides a better reading experience (full text articles) over the official one.
+## Institute of International Education
+
+### Blog
+
+
+
+## International Energy Agency
+
+### News and events
+
+
+
+| Featured | News | Calendar | Past events |
+| --------------- | ---- | -------- | ----------- |
+| news-and-events | news | calendar | past-events |
+
+
+
+## International Mathematical Union
+
+### Fields Medal
+
+
+
## Letterboxd
### User diary
@@ -105,6 +201,10 @@ Provides a better reading experience (full text articles) over the official one.
+## MakeUseOf
+
+
+
## Matters
### Latest
@@ -123,6 +223,18 @@ Provides a better reading experience (full text articles) over the official one.
+## National Association of Colleges and Employers
+
+### Blog
+
+
+
+| Most Recent | Top Rated | Most Read |
+| - | - | - |
+| | top-blogs | mostreadblogs |
+
+
+
## Nautilus
### Topics
@@ -133,6 +245,30 @@ This route provides a flexible plan with full text content to subscribe specific
+## Oak Ridge National Laboratory
+
+### News
+
+
+
+## OpenAI
+
+### Blog
+
+
+
+| All | Research | Announcements | Events | Milestones |
+| --- | -------- | ------------- | ------ | ---------- |
+| | research | announcements | events | milestones |
+
+
+
+## Polar
+
+### Blog
+
+
+
## Quanta Magazine
### Archive
@@ -146,6 +282,12 @@ Compared to the official one, this feed:
+## Semiconductor Industry Association
+
+### Latest News
+
+
+
## Simons Foundation
### Articles
@@ -188,6 +330,18 @@ Compared to the official one, this feed:
+## The Brain
+
+### Blog
+
+
+
+| Blog | Recorded Events | Big Thinkers |
+| ---- | ---- | ---- |
+| blog | recorded-events | big-thinkers |
+
+
+
## The Verge
@@ -196,6 +350,20 @@ Provides a better reading experience (full text articles) over the official one.
+## Thrillist
+
+
+
+Provides all of the Thrillist articles with the specified tag.
+
+
+
+## VOA News
+
+### Day in Photos
+
+
+
## Vulture
diff --git a/docs/en/other.md b/docs/en/other.md
index 2daad21039..439a2ef9ff 100644
--- a/docs/en/other.md
+++ b/docs/en/other.md
@@ -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)
-
+
## Emi Nitta official website
@@ -111,6 +111,18 @@ Official Website: [https://www.ssm.gov.mo/apps1/PreventWuhanInfection/en.aspx](h
+## King Arthur
+
+### Baking
+
+
+
+| Story | Recipes | Tips and Techniques |
+| ----- | ------- | ------------------- |
+| story | recipes | tips-and-techniques |
+
+
+
## MITRE
### All Publications
diff --git a/docs/en/picture.md b/docs/en/picture.md
index 946c2f8f0f..f41db20042 100644
--- a/docs/en/picture.md
+++ b/docs/en/picture.md
@@ -42,10 +42,22 @@ pageClass: routes
+## ComicsKingdom Comic Strips
+
+
+
+## DailyArt
+
+
+
## Dilbert Comic Strip
+## GoComics Comic Strips
+
+
+
## Google Doodles
### Update
diff --git a/docs/en/program-update.md b/docs/en/program-update.md
index 30862a4368..ab0600f4b9 100644
--- a/docs/en/program-update.md
+++ b/docs/en/program-update.md
@@ -10,6 +10,12 @@ pageClass: routes
+## AnyTXT
+
+### Release Notes
+
+
+
## Apkpure
### Versions
@@ -36,6 +42,44 @@ pageClass: routes
+## Bandisoft
+
+### History
+
+
+
+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 |
+
+
+
## Chocolatey
### Software Update
@@ -58,6 +102,12 @@ For example: `https://www.curseforge.com/sc2/assets/taylor-mouses-stuff/files` t
+## Ditto clipboard manager
+
+### Changes
+
+
+
## 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
+
+
+
## F-Droid
### App Update
@@ -104,12 +160,22 @@ The owner of the official image fills in the library, for example: https://rsshu
+## ManicTime
+
+
+
## Microsoft Edge
### Addons Update
+## Microsoft Store
+
+### Updates
+
+
+
## Minecraft
Refer to [#minecraft](/en/game.html#minecraft)
@@ -167,6 +233,24 @@ Refer to [#minecraft](/en/game.html#minecraft)
+## QTTabBar
+
+### Change Log
+
+
+
+## RescueTime
+
+### Release Notes
+
+
+
+| Mac OS | Windows |
+| - | - |
+| mac | windows |
+
+
+
## RSSHub
### New routes
@@ -193,6 +277,12 @@ Refer to [#minecraft](/en/game.html#minecraft)
+## Total Commander
+
+### What's New
+
+
+
## Typora
### Changelog
@@ -210,3 +300,9 @@ Refer to [#minecraft](/en/game.html#minecraft)
### Module Update
+
+## XYplorer
+
+### What's New
+
+
\ No newline at end of file
diff --git a/docs/en/programming.md b/docs/en/programming.md
index 730c4a075b..5a047117e3 100644
--- a/docs/en/programming.md
+++ b/docs/en/programming.md
@@ -4,6 +4,12 @@ pageClass: routes
# Programming
+## ACM
+
+### A.M.Turing Award Winners
+
+
+
## cve.mitre.org
### Search Result
@@ -31,6 +37,20 @@ GitHub provides some official RSS feeds:
+### Topics
+
+
+
+| 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).
+
+
+
### Repo Issues
diff --git a/docs/en/shopping.md b/docs/en/shopping.md
index 511fcc3018..099fc598fc 100644
--- a/docs/en/shopping.md
+++ b/docs/en/shopping.md
@@ -36,6 +36,12 @@ Parameter `time` only works when `mostwanted` is chosen as the category.
+## booth.pm
+
+### Shop
+
+
+
## Guiltfree.pl
### Onsale
diff --git a/docs/en/social-media.md b/docs/en/social-media.md
index 346b5a1a2e..a34cf4aca5 100644
--- a/docs/en/social-media.md
+++ b/docs/en/social-media.md
@@ -34,6 +34,30 @@ pageClass: routes
+## Gab
+
+### User's Posts
+
+
+
+### Popular Posts
+
+
+
+## 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
+
+
+
## Lofter
### User
@@ -87,7 +111,7 @@ These feed do not include boosts (a.k.a. reblogs). RSSHub provides a feed for us
### User Profile
-
+
## pixiv
@@ -119,7 +143,7 @@ These feed do not include boosts (a.k.a. reblogs). RSSHub provides a feed for us
### Following timeline
-
+
::: 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
+
+
+
### User timeline
-
+
## User following timeline
-
+
::: 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
-
+
### User likes
-
+
### Keyword
-
+
### Trends
-## 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 .
+
+:::
+
### Playlist
diff --git a/docs/en/support/README.md b/docs/en/support/README.md
index 393929a4cf..d7a0e865be 100644
--- a/docs/en/support/README.md
+++ b/docs/en/support/README.md
@@ -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)
diff --git a/docs/en/traditional-media.md b/docs/en/traditional-media.md
index fd310fad06..4bdb4c3685 100644
--- a/docs/en/traditional-media.md
+++ b/docs/en/traditional-media.md
@@ -28,7 +28,7 @@ Site
### BBC
-
+
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
+## ChinaFile
+
+### Reporting & Opinion
+
+
+
+Generates full-text feeds that the official feed doesn't provide.
+
+| All | The China NGO Project |
+| --- | --------------------- |
+| all | ngo |
+
+
+
+## Financial Times
+
+### myFT personal RSS
+
+
+
+::: 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`
+
+:::
+
+
+
## NHK
### News Web Easy
+## Phoronix
+
+### News & Reviews
+
+
+
+## Radio Free Asia (RFA)
+
+
+
+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.
+## The Wall Street Journal (WSJ)
+
+### News
+
+
+
+Provide full article RSS for WSJ topics.
+
+
+
## Yahoo
### News
@@ -226,3 +283,13 @@ Provides a better reading experience (full text articles) over the official one.
| (Empty) | world | business | entertainment | sports | health |
+
+## Yahoo! by Author
+
+### News
+
+
+
+Provides all of the articles by the specified Yahoo! author.
+
+
diff --git a/docs/en/university.md b/docs/en/university.md
index d46ee4ca38..79f0bf022d 100644
--- a/docs/en/university.md
+++ b/docs/en/university.md
@@ -30,10 +30,18 @@ pageClass: routes
## UMASS Amherst
-### College of Electrical and Computer Engineering News
+### College of Electrical and Computer Engineering
+
+#### News
+#### Seminar
+
+
+
+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
diff --git a/docs/finance.md b/docs/finance.md
index 85431a16ff..a180c2c0f3 100644
--- a/docs/finance.md
+++ b/docs/finance.md
@@ -62,6 +62,33 @@ pageClass: routes
<Route author="nczitzk" example="/gelonghui/keyword/ 早报" path="/gelonghui/keyword/:keyword" :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 | 交通运输与物流 |
+
+
+
+## 上海证券交易所
+
+### 本所业务规则
+
+
+
+将目标栏目的网址拆解为 `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`
+
+
+
## 世界经济论坛
### 报告
diff --git a/docs/forecast.md b/docs/forecast.md
index 684fb280a9..647cb38c24 100644
--- a/docs/forecast.md
+++ b/docs/forecast.md
@@ -56,9 +56,13 @@ pageClass: routes
## 停电通知
+### 95598 停电查询网
+
+
+
### 南京市
-
+
## 停水通知
diff --git a/docs/game.md b/docs/game.md
index 4079061f90..d113ee6f4d 100644
--- a/docs/game.md
+++ b/docs/game.md
@@ -40,6 +40,51 @@ pageClass: routes
+## Blizzard
+
+### News
+
+
+
+分类
+
+| 分类 | 分类名 |
+| -------------------- | ------------------- |
+| 所有新闻 | |
+| 暗黑破坏神 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 |
+
+
+
## dekudeals
### 分类
@@ -112,6 +157,18 @@ pageClass: routes
+## Konami
+
+### PES Mobile 公告
+
+
+
+## Liquipedia
+
+### Dota2 战队最近比赛结果
+
+
+
## Maxjia News
### Dota 2
@@ -154,6 +211,14 @@ pageClass: routes
+### Feed The Beast (FTB) 模组包更新
+
+
+| 参数 | 说明 |
+| ------| ------------ |
+| modpackEntry | 模组包的短名从模组包的页面链接中找到,例如 `https://www.feed-the-beast.com/modpack/ftb_presents_direwolf20_1_16`,短名就是 `ftb_presents_direwolf20_1_16`。 |
+
+
## Nintendo
### eShop 新发售游戏
@@ -212,16 +277,37 @@ pageClass: routes
-### 新闻 - 游戏资讯
+### 节点
-
-### 数折-折扣信息推送
+
+
+| 站务 | 活动 | 旅记 | 折扣 | 会免 |
+| ---- | ----- | ------ | ---- | ---- |
+| p9 | event | travel | off | plus |
+
+| 新闻 | 攻略 | 测评 | 心得 | 开箱 |
+| ---- | ----- | ------ | ---- | ------- |
+| news | guide | review | exp | openbox |
+
+| 游列 | 游计 | Ps4 | Ps5 |
+| -------- | -------- | --- | --- |
+| gamelist | planlist | ps4 | ps5 |
+
+| 发米通 | Ign | Ucg |
+| ------- | --- | --- |
+| famitsu | ign | ucg |
+
+
+
+### 数折 - 折扣信息推送
-### 闲游-二手盘信息
+
+### 闲游 - 二手盘信息
-### 游戏-新游戏奖杯信息
+
+### 游戏 - 新游戏奖杯信息
@@ -258,7 +344,13 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
### Steam news
-
+
+
+| 语言 (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 |
+
+
## SteamGifts
@@ -310,6 +402,16 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
+## 触乐
+
+
+
+| 每日聚焦 | 最好玩 | 触乐夜话 | 动态资讯 |
+| -------- | ------ | -------- | -------- |
+| daily | pcz | night | news |
+
+
+
## 二柄 APP
### 新闻
@@ -330,22 +432,6 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
-## 篝火营地
-
-### 游戏资讯
-
-
-
-| 精选 | 海外 | 原创 | PS4 | Xboxone | PC | Switch | 掌机 | 手游 | 新闻 | 评测 | 文化 | 视频 | 音频 | 折扣 |
-| ---------- | -------- | ------- | --- | ------- | -- | ------ | -------- | ---------- | ---- | ------ | ------- | ----- | ----- | -------- |
-| choiceness | overseas | orignal | ps4 | xboxone | pc | switch | handheld | mobilegame | news | review | culture | video | audio | discount |
-
-
-
-### 游戏攻略
-
-
-
## 怪物猎人世界
### 更新情报
@@ -484,6 +570,16 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
+## 游戏动力
+
+### 游戏资讯
+
+
+| Switch | PS4 | PC | Xbox |
+| -------- | -------- | -------- | -------- |
+| 1 | 2 | 3 | 4 |
+
+
## 游戏时光
### 游戏时光新闻
@@ -500,7 +596,7 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
## 游研社
-### 游研社
+### 游研社 - 分类文章
@@ -510,6 +606,10 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
+### 游研社 - 全部文章
+
+
+
## 原神
### 新闻
diff --git a/docs/government.md b/docs/government.md
index aef1911ee4..6482a2a0d2 100644
--- a/docs/government.md
+++ b/docs/government.md
@@ -28,6 +28,16 @@ pageClass: routes
+### 广东省深圳市人民政府
+
+
+
+| 通知公告 | 政府采购 | 资金信息 | 重大项目 |
+| :------: | :------: | :------: | :------: |
+| tzgg | zfcg | zjxx | zdxm |
+
+
+
## 国家税务总局
### 最新文件
@@ -65,12 +75,58 @@ pageClass: routes
+## 哈尔滨市科技局
+
+### 政务公开
+
+
+
## 联合国
### 安理会否决了决议
+## 美国财政部
+
+### 新闻稿
+
+
+
+分类
+
+| Press Releases | Statements & Remarks | Readouts | Testimonies |
+| -------------- | -------------------- | -------- | ----------- |
+| all | statements-remarks | readouts | testimonies |
+
+
+
+## 美国联邦最高法院
+
+### 辩论音频
+
+
+
+## 美国贸易代表办公室
+
+### 新闻稿
+
+
+
+::: tip 提示
+
+月份处填写该月的英语表达,如 12 月 应填入 `December`。
+
+:::
+
+
+
+## 美国中央情报局
+
+### 年度信息自由法报告
+
+
+
## 泉州市跨境电子商务协会
### 新闻动态
@@ -139,6 +195,18 @@ pageClass: routes
+## 中国农工民主党
+
+### 新闻中心
+
+
+
+将目标栏目的网址拆解为 `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`
+
+
+
## 中国人大网
@@ -149,6 +217,12 @@ pageClass: routes
+## 中国庭审公开网
+
+### 开庭信息
+
+
+
## 中国信息通信研究院
### 白皮书
@@ -234,6 +308,32 @@ pageClass: routes
+## 中国证券监督管理委员会
+
+### 发审委公告
+
+
+
+### 证监会消息
+
+
+
+### 申请事项进度
+
+
+
+## 中国政协网
+
+### 栏目
+
+
+
+将目标栏目的网址拆解为 `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`
+
+
+
### 北京市人民政府
#### 北京教育考试院
@@ -313,20 +413,6 @@ pageClass: routes
-## 中国证券监督管理委员会
-
-### 发审委公告
-
-
-
-### 证监会消息
-
-
-
-### 申请事项进度
-
-
-
## 中国驻外使领馆
### 大使馆重要通知
@@ -489,6 +575,18 @@ pageClass: routes
+## 中华人民共和国人力资源和社会保障部
+
+### 社保减免
+
+
+
+| 要点新闻 | 政策文件 | 工作动态 | 媒体报道 | 图片新闻 |
+| -------- | -------- | -------- | -------- | -------- |
+| ydxw | zcwj | gzdt | mtbd | tpxw |
+
+
+
## 中华人民共和国商务部
### 政务公开
diff --git a/docs/install/README.md b/docs/install/README.md
index 03abbcfd51..03b6218688 100644
--- a/docs/install/README.md
+++ b/docs/install/README.md
@@ -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` 开启显示,例如: 。默认 `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. 打开 2. 打开控制台 3. 切换到 Network 面板 4. 刷新 5. 点击 dynamic_new 请求 6. 找到 Cookie
+ - `BILIBILI_COOKIE_{uid}`: 对应 uid 的 b 站用户登录后的 Cookie 值,`{uid}` 替换为 uid,如 `BILIBILI_COOKIE_2267573`,获取方式:
+ 1. 打开
+ 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. 找到 开头的请求 5. 找到请求头中的 x-member
+ - `CHUINIU_MEMBER`: 吹牛部落登录后的 x-member,获取方式
+ 1. 登陆后点开文章正文
+ 2. 打开控制台,刷新
+ 3. 找到 开头的请求
+ 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. 找到 请求 5. 找到请求头中的 Cookie
+ - `PKUBBS_COOKIE`: BBS 注册用户登录后的 Cookie 值,获取方式:
+ 1. 登录后打开论坛首页
+ 2. 打开控制台, 刷新
+ 3. 找到 请求
+ 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. 找到 请求 5. 找到请求头中的 Cookie
+ - `BTBYR_COOKIE`: 注册用户登录后的 Cookie 值,获取方式:
+ 1. 登录后打开网站首页
+ 2. 打开控制台,刷新
+ 3. 找到 请求
+ 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 |
+ | ---------------------------------------- | ------------ |
+ | | akamai |
+ | | cloudflare |
+ | | cloudflare |
+ | | cloudflare |
+ | | digitalocean |
diff --git a/docs/journal.md b/docs/journal.md
index e6afbbc349..78b7111bcf 100644
--- a/docs/journal.md
+++ b/docs/journal.md
@@ -58,6 +58,16 @@ pageClass: routes
+## Deloitte
+
+
+
+| 消费行业 | 能源、资源及工业行业 | 金融服务行业 | 政府及公共服务 | 生命科学与医疗行业 | 科技、传媒及电信行业 |
+| -------- | ---------------------------- | ------------------ | -------------------------- | ------------------------ | ----------------------------------- |
+| consumer | energy-resources-industrials | financial-services | government-public-services | life-sciences-healthcare | technology-media-telecommunications |
+
+
+
## elife
### 最新成果
diff --git a/docs/live.md b/docs/live.md
index 137deefb7d..e92c8c05fb 100644
--- a/docs/live.md
+++ b/docs/live.md
@@ -22,7 +22,7 @@ pageClass: routes
### 直播分区
-
+
::: warning 注意
@@ -42,7 +42,7 @@ pageClass: routes
### 直播间开播
-
+
## 浪 Play (原 kingkong) 直播
diff --git a/docs/multimedia.md b/docs/multimedia.md
index 46f1db2372..2fe3b5c7cb 100644
--- a/docs/multimedia.md
+++ b/docs/multimedia.md
@@ -4,6 +4,102 @@ pageClass: routes
# 音视频
+## 141JAV
+
+::: tip 提示
+
+官方提供的订阅源不支持 BT 下载订阅,地址为
+
+:::
+
+### 141JAV BT
+
+
+
+**类型**
+
+| 最新 | 热门 | 随机 | 指定演员 | 指定标签 | 指定日期 |
+| ---- | ------- | ------ | -------- | -------- | -------- |
+| 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` 的格式
+
+
+
+## 141PPV
+
+::: tip 提示
+
+官方提供的订阅源不支持 BT 下载订阅,地址为
+
+:::
+
+### 141PPV BT
+
+
+
+**类型**
+
+| 最新 | 热门 | 随机 | 指定演员 | 指定标签 | 指定日期 |
+| ---- | ------- | ------ | -------- | -------- | -------- |
+| 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` 的格式
+
+
+
## 2048 核基地
### 论坛更新
@@ -12,9 +108,9 @@ pageClass: routes
## 60-Second Science - Scientific American
-### Transcript
+
-
+输出 Transcript 从而提供比官方(podcast)更好的使用体验。
## 99% Invisible
@@ -63,6 +159,25 @@ pageClass: routes
:::
+## CNTV 栏目
+
+::: tip 提示
+
+栏目 ID 查找示例:
+打开栏目具体某一期页面,F12 控制台输入`column_id`得到栏目 ID。
+
+:::
+
+
+
+栏目
+
+| 新闻联播 | 新闻周刊 | 天下足球 |
+| -------------------- | -------------------- | -------------------- |
+| TOPC1451528971114112 | TOPC1451559180488841 | TOPC1451551777876756 |
+
+
+
## 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 |
@@ -183,9 +298,9 @@ pageClass: routes
分类
-| 有碼 | 無碼 | 歐美 | FC2 |
-| -------- | ---------- | ------- | --- |
-| censored | uncensored | western | fc2 |
+| 有碼 | 無碼 | 歐美 |
+| -------- | ---------- | ------- |
+| censored | uncensored | western |
时间
@@ -325,6 +440,18 @@ pageClass: routes
+## NEW 字幕组
+
+### 分类
+
+
+
+| 最近更新 | 剧集推荐 | 电影推荐 | 纪录片推荐 | 动画推荐 | 真人秀推荐 |
+| -------- | -------- | -------- | ---------- | -------- | ---------- |
+| 1 | 2 | 3 | 4 | 5 | 6 |
+
+
+
## Nyaa
### 搜索结果
@@ -411,6 +538,16 @@ pageClass: routes
+## Prestige 蚊香社
+
+### 系列作品
+
+
+
+| 人气 | 最新 | 发售日期 | 标题顺序 | 价格升序 | 价格降序 |
+| ------- | ---- | -------- | -------- | -------- | -------- |
+| popular | near | date | title | low | high |
+
## rs05 人生 05 电影
### rs05 电影列表
@@ -443,13 +580,16 @@ pageClass: routes
+## subHD.tv - 最新字幕
+
+
## Yahoo! テレビ
### 番組検索
-## Youtube
+## YouTube
见 [#youtube](/social-media.html#youtube)
@@ -463,6 +603,74 @@ pageClass: routes
+## 哔嘀影视
+
+### 首页
+
+
+
+#### 资源分类
+
+| 不限 | 电影 | 电视剧 |
+| ---- | ---- | ------ |
+| 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 |
+
+
+
## 播客 IBC 岩手放送| IBC ラジオ イヤーマイッタマイッタ
### IBC 岩手放送| IBC ラジオ イヤーマイッタマイッタ
@@ -571,6 +779,10 @@ pageClass: routes
+### 最新广播剧
+
+
+
## 猫眼电影
### 正在热映
@@ -647,6 +859,26 @@ pageClass: routes
+## 深影译站
+
+### 首页
+
+
+
+### 剧集类型
+
+
+
+| 英美剧 | 日韩剧 | 小语种 |
+| ------ | ------ | ------ |
+| 62 | 140 | 2 |
+
+
+
+### 最新作品
+
+
+
## 腾讯视频
### 播放列表
@@ -671,31 +903,45 @@ pageClass: routes
+## 西瓜视频
+
+::: 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) 插件
+
+:::
+
+### 用户视频投稿
+
+
+
## 喜马拉雅
-### 专辑
+### 专辑(不输出 ShowNote)
-
+
+
+目前喜马拉雅的 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 才能收听,详情见部署页面的配置模块**
:::
+### 专辑(输出 ShowNote)
+
+
+
+
+
## 小宇宙
### 发现
-
+
::: warning 注意
@@ -766,3 +1012,29 @@ pageClass: routes
例如,路由 `/zimuzu/top/week/movie` 应该输出 的排行榜单
+
+## AV01(av01.tv)
+
+### 演员
+
+::: tip 提示
+当没有给定排序类型时,默认为按上传时间排序及mr
+
+:::
+
+
+
+
+| 按上传时间排序 | 按上市时间排序 | 按观看次数排序| 按评分排序|按时长排序|
+| -------- | -------- |-------- |-------- |--------|
+| mr | rd | bw | tr | lg |
+
+
+
+### 分类
+
+
+
+例如,路由 `/av01/tag/中出し` 应该输出 的排行榜单
+
+
diff --git a/docs/new-media.md b/docs/new-media.md
index 4ffa8b0977..4edde15939 100644
--- a/docs/new-media.md
+++ b/docs/new-media.md
@@ -90,6 +90,24 @@ pageClass: routes
+## ASML 阿斯麦
+
+### Press releases & announcements
+
+
+
+## Bell Labs
+
+### Event and News
+
+
+
+| Featured events | Latest recognition | Press releases |
+| --------------- | -------------------- | -------------- |
+| events | industry-recognition | press-releases |
+
+
+
## BOF
### 首页
@@ -104,6 +122,10 @@ pageClass: routes
## CGTN
+### Opinions
+
+
+
### Most Read & Most Share
@@ -112,11 +134,49 @@ pageClass: routes
+### Editors' Pick
+
+
+
## cnBeta
### 最新
-
+
+
+## Day One
+
+### Blog
+
+
+
+## DeepL
+
+### Blog
+
+
+
+## DeepMind
+
+### Blog
+
+
+
+| All | Podcasts | Research | News |
+| --- | -------- | -------- | ---- |
+| | Podcasts | Research | News |
+
+
+
+## Deutsche Welle 德国之声
+
+
+
+| 全部 | 德语媒体 | 文化经纬 | 经济纵横 | 科技环境 |
+| ---- | -------- | -------- | -------- | -------- |
+| all | press | cul | eco | sci |
+
+
## DoNews
@@ -124,9 +184,9 @@ pageClass: routes
-| 首页 | 商业 | 创业 | 互娱 | 科技 | 专栏 |
-| ---- | ------- | -------- | ---- | ---------- | ------- |
-| (空) | company | business | ent | technology | idonews |
+| 首页 | 商业 | 创业 | 互娱 | 科技 | 专栏 |
+| ---- | ------- | -------- | ---- | ------- | ------- |
+| (空) | company | business | ent | digital | idonews |
@@ -146,6 +206,12 @@ pageClass: routes
+## Esquirehk
+
+### Tag
+
+
+
## GQ
### GQ 台湾
@@ -210,6 +276,12 @@ Tag
+## iDaily 每日环球视野
+
+### 今日 Timeline
+
+
+
## iDownloadBlog
### blog
@@ -292,16 +364,65 @@ Tag
+## MakeUseOf
+
+
+
+## Matataki
+
+::: tip 提示
+
+在 Matataki 发表的文章会上传到星际文件系统(IPFS),永久保存。即使站内文章因为各种原因消失,用 RSS 获取过带 IPFS 连接的 Feed Item 的话,还是可以从 RSS 阅读器找回文章的。
+IPFS 网关有可能失效,那时候换成其他网关。
+
+:::
+
+### 最热作品
+
+
+
+### 最新作品
+
+
+
+### 作者创作
+
+
+
+### Fan 票关联作品
+
+
+
+| 需持票 | 需支付 | 全部 |
+| ------ | ------ | ---- |
+| 1 | 2 | 3 |
+
+
+
+### 标签关联作品
+
+
+
+### 收藏夹
+
+
+
## Matters
-### 最新排序
-
-
-
### 熱門文章
+### 最新、熱議、精華
+
+
+
+| 最新 | 熱議 | 精華 |
+| ------ | ---- | ------- |
+| latest | heat | essence |
+
+
+
### 标签
@@ -314,7 +435,7 @@ Tag
### 首页
-
+
## Nautilus
@@ -322,6 +443,18 @@ Tag
+## OpenAI
+
+### Blog
+
+
+
+| All | Research | Announcements | Events | Milestones |
+| --- | -------- | ------------- | ------ | ---------- |
+| | research | announcements | events | milestones |
+
+
+
## PMCAFF
### 今日推荐 / 精选
@@ -340,6 +473,12 @@ Tag
+## Polar
+
+### Blog
+
+
+
## Quanta Magazine
### 全部
@@ -410,6 +549,18 @@ Tag
+## The Brain
+
+### Blog
+
+
+
+| Blog | Recorded Events | Big Thinkers |
+| ---- | --------------- | ------------ |
+| blog | recorded-events | big-thinkers |
+
+
+
## The Verge
### The Verge
@@ -420,12 +571,26 @@ Tag
+## Thrillist
+
+
+
+Provides all of the Thrillist articles with the specified tag.
+
+
+
## TOPYS
### 分类
+## VOA News
+
+### Day in Photos
+
+
+
## Vulture
@@ -527,6 +692,42 @@ Supported sub-sites:
+## 半月谈
+
+### 时事大事库
+
+
+
+| 每周 | 每月 |
+| ------------- | ----- |
+| shishidashiku | yiyue |
+
+
+
+## 報導者
+
+### 最新
+
+
+
+### 摄影
+
+
+
+### 分类
+
+
+
+## 北屋
+
+
+
+| 首页 | 最新资讯和灾难信息 | 生存主义 survival | 运动户外 | 玩物尚志 | 分享下载 | 知行生活 | 商务服务 |
+| ---- | ------------------ | ----------------- | -------- | -------- | -------- | -------- | -------- |
+| | 最新资讯和灾难信息 | 生存主义 survival | 运动户外 | 玩物尚志 | 分享下载 | 知行生活 | 商务服务 |
+
+
+
## 本地宝
### 焦点资讯
@@ -581,6 +782,30 @@ Supported sub-sites:
+## 城农 Growin' City
+
+### 城农资讯观点
+
+
+
+| 原创内容 | 商业投资 | 观点评论 | 农业科技 |
+| -------- | -------- | -------- | -------- |
+| 48 | 55 | 88 | 98 |
+
+| 农艺管理 | 农业机械 | 设施农业 | 畜牧水产 |
+| -------- | -------- | -------- | -------- |
+| 101 | 83 | 85 | 87 |
+
+| 食品科技 | 科技产品 | 食品创新 | 研究报告 |
+| -------- | -------- | -------- | -------- |
+| 86 | 100 | 99 | 76 |
+
+| 教育拓展 | 展会培训 | 业界访谈 |
+| -------- | -------- | -------- |
+| 61 | 77 | 72 |
+
+
+
## 抽屉新热榜
### 最新
@@ -607,6 +832,28 @@ Supported sub-sites:
+## 得到
+
+### 首页
+
+
+
+### 新闻
+
+
+
+### 人物故事
+
+
+
+### 视频
+
+
+
+### 知识城邦
+
+
+
## 电商报
### 分区
@@ -625,6 +872,28 @@ area 分区选项
+## 丁香园
+
+### 新冠疫苗实时动态
+
+
+
+查看北京市的新冠疫苗接种点,路由为 `/dxy/vaccine/北京`;
+
+查看北京市朝阳区的新冠疫苗接种点,路由为 `/dxy/vaccine/北京/北京/朝阳区`;
+
+查看湖北省武汉市的新冠疫苗接种点,路由为 `/dxy/vaccine/湖北/武汉`;
+
+查看湖北省武汉市武昌区的新冠疫苗接种点,路由为 `/dxy/vaccine/湖北/武汉/武昌区`。
+
+::: tip 提示
+
+若参数为空,则返回全国所有新冠疫苗接种点。
+
+:::
+
+
+
## 懂球帝
::: tip 提示
@@ -673,6 +942,69 @@ area 分区选项
+## 东西智库
+
+### 分类
+
+
+
+内容类别
+
+| 产业观察 | 行业报告 | 政策 & 成效 |
+| -------------------- | ---------------- | ------------------ |
+| industry-observation | industry-reports | policy-achievement |
+
+行业分类
+
+| 行业 | 行业名称 |
+| -------------------- | ----------------------------------------------------------------- |
+| 新一代信息技术 | next-generation-information-technology-industry-reports |
+| 高档数控机床和机器人 | high-grade-cnc-machine-tools-and-robots-industry-reports |
+| 航空航天装备 | aerospace-equipment-industry-reports |
+| 海工装备及高技术船舶 | marine-engineering-equipment-and-high-tech-ships-industry-reports |
+| 先进轨道交通装备 | advanced-rail-transportation-equipment-industry-reports |
+| 节能与新能源汽车 | energy-saving-and-new-energy-vehicles-industry-reports |
+| 电力装备 | electric-equipment-industry-reports |
+| 农机装备 | agricultural-machinery-equipment-industry-reports |
+| 新材料 | new-material-industry-reports |
+| 生物医药及医疗器械 | biomedicine-and-medical-devices-industry-reports |
+| 现代服务业 | modern-service-industry-industry-reports |
+| 制造业人才 | manufacturing-talent-industry-reports |
+
+
+
+### 标签
+
+
+
+| 分类 | 分类名 | 分类 | 分类名 |
+| ---------- | --------------------------------- | -------------- | ------------------------- |
+| 3D 打印 | 3d_printing | 大数据 | dashuju |
+| 5G | 5g | 大湾区 | d_w_q |
+| AI | AI | 宏观经济 | macro_economy |
+| 世界经济 | world_economy | 工业互联网 | industrial_internet |
+| 云计算 | cloud_computing | 工业软件 | g_y_r_j |
+| 人工智能 | rengongzhineng | 数字化转型 | digital_transformation |
+| 人才 | personnel | 数字孪生 | digital_twin |
+| 企业研究 | enterprise_research | 数字经济 | digital_economy |
+| 信息安全 | information_safety | 数字货币 | digital-currency |
+| 创新 | innovate | 数据中心 | data_center |
+| 制造业 | manufacturing | 数据安全 | data_security |
+| 动力电池 | power_battery | 新一代信息技术 | x_y_d_x_x_j_s |
+| 区块链 | qukuailian | 新基建 | new_infrastructure |
+| 医疗器械 | medical_apparatus_and_instruments | 新材料 | x_c_l |
+| 半导体芯片 | semiconductor_chip | 新能源 | x_n_y |
+| 新能源汽车 | new_energy_vehicles | 智能制造 | intelligent_manufacturing |
+| 机器人 | robot | 机床 | machine_tool |
+| 海工装备 | marine_engineering_equipment | 物联网 | wulianwang |
+| 现代服务 | x_d_f_w | 生物医药 | biomedicine |
+| 电力装备 | electric_equipment | 网络安全 | wangluoanquan |
+| 航空航天 | aerospace | 虚拟现实 | virtual_reality |
+| 装备制造业 | equipment_manufacturing_industry | 赋能 | empowerment |
+| 轨道交通 | rail_transit | | |
+
+
+
## 多知网
### 首页
@@ -729,19 +1061,61 @@ area 分区选项
-## 观察者网 - 中国关怀 全球视野
+## 观察者网
-### 观察者首页
+### 头条
-
+
-### 观察者风闻话题
+### 首页
-
+
+
+| 全部 | 评论 & 研究 | 要闻 | 风闻 | 热点新闻 | 滚动新闻 |
+| ---- | ----------- | ----- | ------- | -------- | -------- |
+| all | review | story | fengwen | redian | gundong |
+
+home = 评论 & 研究 + 要闻 + 风闻
+
+others = 热点新闻 + 滚动新闻
+
+::: tip 提示
+
+观察者网首页左中右的三个 column 分别对应 **评论 & 研究**、**要闻**、**风闻** 三个部分。
+
+:::
+
+
+
+### 观学院
+
+
+
+| 精选 | 观书堂 | 在线课 | 观学院 |
+| --------- | ------ | ------- | -------- |
+| recommend | books | courses | huodongs |
+
+
+
+### 风闻话题
+
+
+
+| 最新回复 | 最新发布 | 24 小时最热 | 3 天最热 | 7 天最热 | 3 个月最热 | 专栏文章 |
+| -------- | -------- | ----------- | -------- | -------- | ---------- | -------- |
+| 1 | 2 | 3 | 6 | 7 | 8 | 5 |
+
+::: tip 提示
+
+仅在话题 id 为 0,即选择 全部 时,**3 个月最热**、**24 小时最热**、**3 天最热**、**7 天最热** 和 **专栏文章** 参数生效。
+
+:::
+
+
### 个人主页文章
-
+
## 广告门
@@ -755,6 +1129,30 @@ area 分区选项
+## 国际教育研究所
+
+### Blog
+
+
+
+## 国际能源署
+
+### 新闻及活动
+
+
+
+| Featured | News | Calendar | Past events |
+| --------------- | ---- | -------- | ----------- |
+| news-and-events | news | calendar | past-events |
+
+
+
+## 国际数学联合会
+
+### 菲尔兹奖
+
+
+
## 果壳网
### 科学人
@@ -851,6 +1249,12 @@ area 分区选项
+## 贾真的电商 108 将
+
+### 「108 将」实战分享
+
+
+
## 今日热榜
### 榜单
@@ -899,21 +1303,35 @@ area 分区选项
+## 九三学社
+
+### 分类
+
+
+
## 巨潮资讯
-
+
column 为 szse 或 sse 时可选的 category:
-| 年报 | 半年报 | 一季报 | 三季报 | 业绩预告 | 权益分派 | 董事会 | 监事会 | 股东大会 | 日常经营 | 公司治理 | 中介报告 | 首发 | 增发 | 股权激励 | 配股 | 解禁 | 公司债 | 可转债 | 其他融资 | 股权变动 | 补充更正 | 澄清致歉 | 风险提示 | 特别处理和退市 | 退市整理期 |
-| ------------------ | ------------------- | ------------------- | ------------------- | --------------------- | ---------------------- | ------------------- | ------------------- | ------------------ | ------------------ | ------------------ | ---------------- | ---------------- | ---------------- | ------------------ | ---------------- | ---------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | -------------------- | ------------------- |
-| category_ndbg_szsh | category_bndbg_szsh | category_yjdbg_szsh | category_sjdbg_szsh | category_yjygjxz_szsh | category_qyfpxzcs_szsh | category_dshgg_szsh | category_jshgg_szsh | category_gddh_szsh | category_rcjy_szsh | category_gszl_szsh | category_zj_szsh | category_sf_szsh | category_zf_szsh | category_gqjl_szsh | category_pg_szsh | category_jj_szsh | category_gszq_szsh | category_kzzq_szsh | category_qtrz_szsh | category_gqbd_szsh | category_bcgz_szsh | category_cqdq_szsh | category_fxts_szsh | category_tbclts_szsh | category_tszlq_szsh |
+| 全部 | 年报 | 半年报 | 一季报 | 三季报 | 业绩预告 | 权益分派 | 董事会 | 监事会 | 股东大会 | 日常经营 | 公司治理 | 中介报告 | 首发 | 增发 | 股权激励 | 配股 | 解禁 | 公司债 | 可转债 | 其他融资 | 股权变动 | 补充更正 | 澄清致歉 | 风险提示 | 特别处理和退市 | 退市整理期 |
+| ---- | ------------------ | ------------------- | ------------------- | ------------------- | --------------------- | ---------------------- | ------------------- | ------------------- | ------------------ | ------------------ | ------------------ | ---------------- | ---------------- | ---------------- | ------------------ | ---------------- | ---------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | -------------------- | ------------------- |
+| all | category_ndbg_szsh | category_bndbg_szsh | category_yjdbg_szsh | category_sjdbg_szsh | category_yjygjxz_szsh | category_qyfpxzcs_szsh | category_dshgg_szsh | category_jshgg_szsh | category_gddh_szsh | category_rcjy_szsh | category_gszl_szsh | category_zj_szsh | category_sf_szsh | category_zf_szsh | category_gqjl_szsh | category_pg_szsh | category_jj_szsh | category_gszq_szsh | category_kzzq_szsh | category_qtrz_szsh | category_gqbd_szsh | category_bcgz_szsh | category_cqdq_szsh | category_fxts_szsh | category_tbclts_szsh | category_tszlq_szsh |
column 为 third 时可选的 category:
-| 临时公告 | 定期公告 | 中介机构公告 | 持续信息披露 | 首次信息披露 |
-| ------------- | ------------- | ------------- | ------------- | ------------- |
-| category_lsgg | category_dqgg | category_zjjg | category_cxpl | category_scpl |
+| 全部 | 临时公告 | 定期公告 | 中介机构公告 | 持续信息披露 | 首次信息披露 |
+| ---- | ------------- | ------------- | ------------- | ------------- | ------------- |
+| all | category_lsgg | category_dqgg | category_zjjg | category_cxpl | category_scpl |
+
+::: tip 提示
+
+需要筛选多个 category 时,应使用 `;` 将多个字段连接起来。
+
+如 “年报 + 半年报” 即 `category_ndbg_szsh;category_bndbg_szsh`
+
+:::
@@ -929,6 +1347,44 @@ column 为 third 时可选的 category:
+## 科技島讀
+
+### 分類
+
+
+
+| 全部 | 文章 | Podcast |
+| ---- | ------- | ------- |
+| all | article | podcast |
+
+
+
+## 科学网
+
+### 博客
+
+
+
+类型
+
+| 精选 | 最新 | 热门 |
+| --------- | ---- | ---- |
+| recommend | new | hot |
+
+时间
+
+| 36 小时内精选博文 | 一周内精选博文 | 一月内精选博文 | 半年内精选博文 | 所有时间精选博文 |
+| ----------------- | -------------- | -------------- | -------------- | ---------------- |
+| 1 | 2 | 3 | 4 | 5 |
+
+排序
+
+| 按发表时间排序 | 按评论数排序 | 按点击数排序 |
+| -------------- | ------------ | ------------ |
+| 1 | 2 | 3 |
+
+
+
## 快科技(原驱动之家)
### 最新新闻
@@ -963,13 +1419,67 @@ column 为 third 时可选的 category:
### 首页
-### 24小时热门
+
+### 24 小时热门
+
### 节目
+## 留园网
+
+### 分站
+
+
+
+| 婚姻家庭 | 魅力时尚 | 女性频道 | 生活百态 | 美食厨房 | 非常影音 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| life9 | life1 | chan10 | life2 | life6 | fr |
+
+| 车迷沙龙 | 游戏天地 | 卡通漫画 | 体坛纵横 | 运动健身 | 电脑前线 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| enter7 | enter3 | enter6 | enter5 | sport | know1 |
+
+| 数码家电 | 旅游风向 | 摄影部落 | 奇珍异宝 | 笑口常开 | 娱乐八卦 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| chan6 | life7 | chan8 | page | enter1 | enter8 |
+
+| 吃喝玩乐 | 文化长廊 | 军事纵横 | 百家论坛 | 科技频道 | 爱子情怀 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| netstar | life10 | nz | other | chan2 | chan5 |
+
+| 健康人生 | 博论天下 | 史海钩沉 | 网际谈兵 | 经济观察 | 谈股论金 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| life5 | bolun | chan1 | military | finance | chan4 |
+
+| 杂论闲侃 | 唯美乐园 | 学习园地 | 命理玄机 | 宠物情缘 | 网络歌坛 |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| pk | gz1 | gz2 | gz3 | life8 | chan7 |
+
+| 音乐殿堂 | 情感世界 |
+| -------- | -------- |
+| enter4 | life3 |
+
+::: tip 提示
+
+酷 18 文档参见 [此处](https://docs.rsshub.app/picture.html#ku-18)
+
+禁忌书屋文档参见 [此处](https://docs.rsshub.app/reading.html#jin-ji-shu-wu)
+
+:::
+
+
+
+### 精华区
+
+
+
+### 搜索关键字
+
+
+
## 妈咪帮
@@ -994,6 +1504,24 @@ column 为 third 时可选的 category:
+## 美国半导体行业协会
+
+### 新闻
+
+
+
+## 美国大学和雇主协会
+
+### 博客
+
+
+
+| Most Recent | Top Rated | Most Read |
+| ----------- | --------- | ------------- |
+| | top-blogs | mostreadblogs |
+
+
+
## 梅花网
### 作品
@@ -1108,6 +1636,18 @@ column 为 third 时可选的 category:
+## 求是网
+
+### 分类
+
+
+
+| 网评 | 视频 | 原创 | 经济 | 政治 | 文化 | 社会 | 党建 | 科教 | 生态 | 国防 | 国际 | 图书 | 学习笔记 |
+| ---- | ---- | ------ | ------- | -------- | ------- | ------- | ---- | ------- | ------- | ------- | ------------- | ----- | -------- |
+| qswp | qssp | qslgxd | economy | politics | culture | society | cpc | science | zoology | defense | international | books | xxbj |
+
+
+
## 趣头条
### 分类
@@ -1194,6 +1734,18 @@ column 为 third 时可选的 category:
+## 生命时报
+
+### 栏目
+
+
+
+| 新闻 | 医药 | 养生 | 生活 | 母亲行动 | 长寿 | 视频 | 时评 | 调查 | 产业经济 |
+| ---- | -------- | --------------- | ---- | -------- | --------- | ----- | ------------ | ------- | -------- |
+| news | medicine | healthpromotion | life | mothers | longevity | video | news-comment | hotspot | industry |
+
+
+
## 生物谷
### 最新资讯
@@ -1269,6 +1821,18 @@ column 为 third 时可选的 category:
+## 通識・現代中國
+
+### 議題熱話
+
+
+
+| 全部 | 現代中國 | 今日香港 | 全球化 | 一周時事通識 |
+| ---- | -------- | -------- | ------ | ------------ |
+| | 76 | 479 | 480 | 379 |
+
+
+
## 推酷
### 周刊
@@ -1293,6 +1857,16 @@ column 为 third 时可选的 category:
+## 晚点 LatePost
+
+
+
+| 最新报道 | 晚点独家 | 人物访谈 | 晚点早知道 | 长报道 |
+| -------- | -------- | -------- | ---------- | ------ |
+| | 1 | 2 | 3 | 4 |
+
+
+
## 万联网
### 资讯
@@ -1305,6 +1879,12 @@ column 为 third 时可选的 category:
+## 網路天文館
+
+### 天象預報
+
+
+
## 网易号
### 更新
@@ -1312,11 +1892,17 @@ column 为 third 时可选的 category:
1. 在[网易号搜索页面](https://dy.163.com/v2/media/tosearch.html) 搜索想要订阅的网易号。
-2. 打开网易号文章页面。
-3. 通过浏览器控制台执行 `$('#contain').dataset.wemediaid`,返回的即为网易号 ID。
+2. 打开网易号的任意文章。
+3. 查看源代码,搜索 `data-wemediaid`,查看紧随其后的引号内的属性值(类似 `W1966190042455428950`)即为网易号 ID。
+## 网易号(通用)
+
+优先使用方法一,若是网易号搜索页面搜不到的小众网易号(文章页面不含`data-wemediaid`)则可使用此法。
+触发反爬会只抓取到标题,建议自建。
+
+
## 网易新闻
### 排行榜
@@ -1341,12 +1927,34 @@ column 为 third 时可选的 category:
+### 专栏
+
+
+
+| 轻松一刻 | 槽值 | 人间 | 大国小民 | 三三有梗 | 数读 | 看客 | 下划线 | 谈心社 | 哒哒 | 胖编怪聊 | 曲一刀 | 今日之声 | 浪潮 | 沸点 |
+| -------- | ---- | ---- | -------- | -------- | ---- | ---- | ------ | ------ | ---- | -------- | ------ | -------- | ---- | ---- |
+| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+
+
+
## 维基百科
### 中国大陆新闻动态
+## 未名新闻
+
+### 分类
+
+
+
+| 新闻大杂烩 | 军事 | 国际 | 体育 | 娱乐 | 科技 | 财经 |
+| ---------- | -------- | ------ | ---- | ---- | ---- | ------- |
+| | zhongguo | haiwai | tiyu | yule | keji | caijing |
+
+
+
## 微信
::: tip 提示
@@ -1389,6 +1997,10 @@ column 为 third 时可选的 category:
+### 公众号 (wxnmh.com 来源)
+
+
+
### 公众号栏目 (非推送 & 历史消息)
@@ -1415,6 +2027,30 @@ column 为 third 时可选的 category:
+## 无产者评论
+
+### 分类
+
+
+
+| 全部文章 | 中流击水 | 革命文艺 | 当代中国 | 理论视野 | 国际观察 | 史海沉钩 |
+| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
+| | 中流击水 | 革命文艺 | 当代中国 | 理论视野 | 国际观察 | 史海沉钩 |
+
+
+
+### 标签
+
+
+
+::: tip 提示
+
+标签名参见 [所有标签](https://review.proletar.ink/tags)
+
+:::
+
+
+
## 西祠胡同
### 频道
@@ -1427,6 +2063,12 @@ column 为 third 时可选的 category:
+## 橡树岭国家实验室
+
+### 新闻
+
+
+
## 香水时代
### 首页
@@ -1526,6 +2168,106 @@ column 为 third 时可选的 category:
+## 有趣天文奇观
+
+### 首页
+
+
+
+### 年度天象(天文年历)
+
+
+
+### 近期事件专题
+
+
+
+## 游戏葡萄
+
+无文章正文,仅有目录索引。
+
+### 全部文章
+
+
+
+### 分类
+
+例子对应[深度分类](http://youxiputao.com/article/index/id/13)
+
+
+## 鱼塘热榜
+
+
+## 遠見
+
+
+
+| 最新文章 | 你可能會喜歡 | 名家專欄 | 專題 | 時事熱點 | 政治 | 社會 | 人物報導 | 國際 | 全球焦點 | 兩岸 | 金融理財 | 投資理財 | 保險規劃 | 退休理財 | 金融 Fintech | 房地產 | 總體經濟 | 科技 | 科技趨勢 | 能源 | 產經 | 傳產 | 消費服務 | 生技醫藥 | 傳承轉型 | 創業新創 | 管理 | 農業 | 教育 | 高教 | 技職 | 親子教育 | 國際文教 | 體育 | 好享生活 | 時尚設計 | 心靈成長 | 藝文影視 | 旅遊 | 環境生態 | 健康 | 美食 | 職場生涯 | 調查 | 縣市 | CSR |
+| -------- | ------------ | -------- | ----- | -------- | -------- | ------- | -------- | ----- | ----------- | --------------------- | -------- | ---------- | --------- | -------- | ------------ | ----------- | -------- | ---- | ---------- | ------ | -------- | -------- | -------- | -------- | -------------------------- | -------- | ---------- | ----------- | --------- | ---------------- | ------------- | -------- | --------------- | ------ | -------- | -------- | ----------- | -------- | ------ | ----------- | ------ | ---- | -------- | ------ | ------ | --- |
+| newest | recommend | opinion | topic | news | politics | society | figure | world | world_focus | cross_strait_politics | money | investment | insurance | retire | fintech | real_estate | economy | tech | tech_trend | energy | business | industry | service | medical | family_business_succession | startup | management | agriculture | education | higher_education | technological | parent | world_education | sports | life | art | self_growth | film | travel | environment | health | food | career | survey | county | csr |
+
+
+
+## 中国计算机学会
+
+### 新闻
+
+
+
+| CCF 新闻 | CCF 聚焦 | ACM 信息 |
+| ---------- | -------- | -------- |
+| Media_list | Focus | ACM_News |
+
+
+
+## 中国机械工程学会
+
+### 学会新闻
+
+
+
+| 学会要闻 | 学会动态 | 科技新闻 |
+| ----------- | -------- | -------- |
+| Information | Dynamics | TechNews |
+
+
+
+## 中国科学院青年创新促进会
+
+### 最新博文
+
+
+
+## 中国劳工观察
+
+### 调查报告
+
+
+
+| 全部 | 制鞋 | 印刷 | 厨具 | 家具 | 服饰 | 汽车制造 | 玩具 | 电子产品 | 综合 | 零售 |
+| ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | -------- | ---- | ---- |
+| | 2 | 6 | 14 | 3 | 4 | 10 | 8 | 1 | 9 | 7 |
+
+
+
+## 中国劳工通讯
+
+### 评论与特写
+
+
+
+## 眾新聞
+
+### 眾聞
+
+
+
+| 全部 | 經濟 | 社會 | 生活 | 政治 | 國際 | 台灣 | 人物 | 中國 |
+| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
+| | 13 | 15 | 14 | 12 | 16 | 20 | 21 | 19 |
+
+
+
## 装备前线
### 首页最新帖子
diff --git a/docs/other.md b/docs/other.md
index f94e0994a3..f4f8c38399 100644
--- a/docs/other.md
+++ b/docs/other.md
@@ -4,6 +4,18 @@ pageClass: routes
# 其他
+## 4399 论坛
+
+### 4399 论坛
+
+
+::: warning 注意
+
+需要用户 cookie 值,详情见部署页面的配置模块。
+
+:::
+
+
## acwifi 路由器交流
### 新闻
@@ -97,6 +109,16 @@ pageClass: routes
+## Grand-Challenge
+
+### Challenge 列表
+
+
+
+### 用户参加的 Challenge
+
+
+
## HackerOne
### HackerOne Hacker Activity
@@ -121,6 +143,51 @@ pageClass: routes
+## MiniFlux
+
+因需设置 API Key,故请自行架设 RSSHub。API 密钥则请于 MiniFlux 实例中的 `设置` -> `API密钥` -> `创建一个新的API密钥` 处获取。
+
+### 订阅列表
+
+
+
+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 的分类下,则输出该订阅源信息。
+
+
+
+### 获取订阅源内容
+
+
+
+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`
+
+
+
## MITRE
### 全部出版物
@@ -296,6 +363,18 @@ type 为 all 时,category 参数不支持 cost 和 free
+## 滴答清单
+
+### 习惯打卡
+
+::: warning 注意
+
+需要账号密码,详情见部署文档部分 RSS 模块配置
+
+:::
+
+
+
## 东莞教研网
### 信息公开
@@ -312,7 +391,7 @@ type 为 all 时,category 参数不支持 cost 和 free
### 福利资源 - met.red
-
+
## 古诗文网
@@ -675,6 +754,12 @@ type 为 all 时,category 参数不支持 cost 和 free
+## 天眼查
+
+### 热门搜索
+
+
+
## 无讼案例
### 案例
@@ -757,7 +842,7 @@ type 为 all 时,category 参数不支持 cost 和 free
> 仅支持 IMAP 协议,邮件密码等设置见 [邮件设置](/install/#其他应用配置)
-
+
## 源仓库
@@ -864,13 +949,3 @@ type 为 all 时,category 参数不支持 cost 和 free
### はてな匿名ダイアリー - 人気記事アーカイブ
-
-### 4399 论坛
-
-
-::: warning 注意
-
-需要用户 cookie 值,详情见部署页面的配置模块。
-
-:::
-
diff --git a/docs/picture.md b/docs/picture.md
index b52bed09b1..bef5516e4e 100644
--- a/docs/picture.md
+++ b/docs/picture.md
@@ -36,6 +36,16 @@ pageClass: routes
+## 8KCosplay
+
+### 最新
+
+
+
+### 分类
+
+
+
## Bing 壁纸
### 每日壁纸
@@ -56,6 +66,10 @@ pageClass: routes
| ---- | --------- | ------ |
| hot | recommend | recent |
+## DailyArt 每日艺术
+
+
+
## Dilbert Comic Strip
@@ -64,6 +78,68 @@ pageClass: routes
+## Fantia
+
+### 搜索
+
+
+
+类型
+
+| クリエイター | 投稿 | 商品 | コミッション |
+| ------------ | ----- | -------- | ------------ |
+| 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 |
+
+
+
+### 用户投稿
+
+
+
## GirlImg
### album
@@ -260,13 +336,9 @@ pageClass: routes
| ------ | ---------- | ---------- |
| pic | top | top-4h |
-### 妹子图
+### 首页
-
-
-| 妹子图 | 妹子图热榜 |
-| ------ | ---------- |
-| ooxx | top-ooxx |
+
## 绝对领域
@@ -278,6 +350,42 @@ pageClass: routes
| ---- | ---- |
| tuji | as |
+## 酷 18
+
+### 分站
+
+
+
+| 性趣贴图 | 色色动漫 | 情色靓影 | 私房自拍 | 禁忌书屋 | 性趣论坛 | 情色无忌 | 成人影视 |
+| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
+| 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)
+
+:::
+
+
+
+### 精华区
+
+
+
+### 搜索关键字
+
+
+
+### 妹子图
+
+
+
+| 妹子图 | 妹子图热榜 |
+| ------ | ---------- |
+| ooxx | top-ooxx |
+
## 妹子图
### 首页(最新)
diff --git a/docs/program-update.md b/docs/program-update.md
index e38532661b..37eb486334 100644
--- a/docs/program-update.md
+++ b/docs/program-update.md
@@ -20,6 +20,12 @@ pageClass: routes
+## AnyTXT
+
+### Release Notes
+
+
+
## Apkpure
### Versions
@@ -54,6 +60,36 @@ pageClass: routes
+## Bandisoft
+
+### 更新记录
+
+
+
+软件 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 |
+
+
+
+## Bilibili
+
+### 更新情报
+
+
+
+| 安卓版 | iPhone 版 | iPad HD 版 | UWP 版 | TV 版 |
+| ------- | --------- | ---------- | ------ | -------------- |
+| android | iphone | ipad | win | android_tv_yst |
+
## Bugly SDK
### 更新日志
@@ -104,6 +140,12 @@ pageClass: routes
+## Ditto clipboard manager
+
+### Changes
+
+
+
## Docker Hub
### 镜像有新 Build
@@ -116,6 +158,12 @@ pageClass: routes
:::
+## Everything
+
+### Changes
+
+
+
## F-Droid
### App 更新
@@ -156,12 +204,26 @@ pageClass: routes
+## ManicTime
+
+
+
+## Mathpix
+
+
+
## Microsoft Edge
### 外接程序更新
+## Microsoft Store
+
+### Updates
+
+
+
## Minecraft
见 [#minecraft](/game.html#minecraft)
@@ -196,6 +258,12 @@ pageClass: routes
+## OneNote Gem Add-Ins
+
+### Release History
+
+
+
## PlayStation
### PlayStation 4 系统更新纪录
@@ -214,12 +282,30 @@ pageClass: routes
+## QTTabBar
+
+### Change Log
+
+
+
## Quicker
### 版本更新
+## RescueTime
+
+### Release Notes
+
+
+
+| Mac OS | Windows |
+| ------ | ------- |
+| mac | windows |
+
+
+
## RSSHub
### 有新路由啦
@@ -236,6 +322,16 @@ pageClass: routes
+## simpread
+
+### 消息通知
+
+
+
+### 更新日志
+
+
+
## sketch.com
### beta 更新
@@ -252,6 +348,12 @@ pageClass: routes
+## Total Commander
+
+### What's New
+
+
+
## Typora
### Changelog
@@ -280,6 +382,12 @@ pageClass: routes
+## XYplorer
+
+### What's New
+
+
+
## 怪物猎人世界
### 更新
@@ -304,11 +412,11 @@ pageClass: routes
-## 腾讯柠檬 Lab
+## 特斯拉系统更新
-### 柠檬精选 Mac Apps
+### 版本详细信息
-
+
## 腾讯云移动直播 SDK
@@ -321,3 +429,23 @@ pageClass: routes
### 金米奖
+
+## 猿料
+
+### 标签
+
+
+
+标签
+
+| uTools | 插件发布 |
+| ------ | -------- |
+| utools | plugins |
+
+排序
+
+| 最新回复 | 热门回复 | 新鲜出炉 | 陈年旧贴 |
+| -------- | ------------- | ---------- | --------- |
+| | -commentCount | -createdAt | createdAt |
+
+
diff --git a/docs/programming.md b/docs/programming.md
index 9113dc71c7..a12794e21b 100644
--- a/docs/programming.md
+++ b/docs/programming.md
@@ -4,6 +4,12 @@ pageClass: routes
# 编程
+## ACM
+
+### 图灵奖获得者
+
+
+
## AI 研习社
### 首页
@@ -28,7 +34,7 @@ pageClass: routes
### TheBatch 周报
-
+
## Dockone
@@ -87,6 +93,20 @@ GitHub 官方也提供了一些 RSS:
+### Topics
+
+
+
+| 参数名 | 描述 | 可选值 |
+| ------ | -------- | ----------------------------------------------------------------------------------------- |
+| `l` | 编程语言 | 例如 `php`,可以在相关 [Topics 页](https://github.com/topics/framework?l=php) URL 中找到 |
+| `o` | 排序方法 | `asc`(升序)
`desc`(降序) |
+| `s` | 排序标准 | `stars`(按 star 数量排序)
`forks`(按 fork 数量排序)
`updated`(按更新日期排序) |
+
+例如 `/github/topics/framework/l=php&o=desc&s=stars` 会生成对应[此页面](https://github.com/topics/framework?l=php&o=desc&s=stars)的 RSS。
+
+
+
### 仓库 Issues
@@ -472,19 +492,25 @@ GitHub 官方也提供了一些 RSS:
### 沸点
-
+
+
+| 推荐 | 热门 | 上班摸鱼 | 内推招聘 | 一图胜千言 | 今天学到了 | 每天一道算法题 | 开发工具推荐 | 树洞一下 |
+| --------- | ---- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
+| recommend | hot | 6824710203301167112 | 6819970850532360206 | 6824710202487472141 | 6824710202562969614 | 6824710202378436621 | 6824710202000932877 | 6824710203112423437 |
+
+
### 专栏
-
+
### 收藏集
-
+
### 单个收藏夹
-
+
### 分享
@@ -653,6 +679,12 @@ GitHub 官方也提供了一些 RSS:
+## 美团开放平台
+
+### 美团开放平台公告
+
+
+
## 平安银河实验室
### posts
@@ -660,11 +692,6 @@ GitHub 官方也提供了一些 RSS:
-## 前端技术文章
-
-
-
-
## 前端艺术家 && 飞冰早报
### 列表
diff --git a/docs/reading.md b/docs/reading.md
index f0b157826f..0d569e9b10 100644
--- a/docs/reading.md
+++ b/docs/reading.md
@@ -10,12 +10,59 @@ pageClass: routes
+## Kindle Unlimited
+
+### 会员限时免费读书单
+
+
+
+| 本月书单 | 好评返场 | 次月预告 |
+| -------- | -------- | -------- |
+| this | back | next |
+
+
+
## Mobilism
### eBook Releases
+## SoBooks
+
+### 首页
+
+
+
+| 分类 | 分类名 |
+| -------- | ---------------- |
+| 小说文学 | xiaoshuowenxue |
+| 历史传记 | lishizhuanji |
+| 人文社科 | renwensheke |
+| 励志成功 | lizhichenggong |
+| 经济管理 | jingjiguanli |
+| 学习教育 | xuexijiaoyu |
+| 生活时尚 | shenghuoshishang |
+| 英文原版 | yingwenyuanban |
+
+
+
+### 标签
+
+
+
+热门标签
+
+| 小说 | 文学 | 历史 | 日本 | 科普 | 管理 | 推理 | 社会 | 经济 |
+| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------ |
+| 传记 | 美国 | 悬疑 | 哲学 | 心理 | 商业 | 金融 | 思维 | 经典 |
+| 随笔 | 投资 | 文化 | 励志 | 科幻 | 成长 | 中国 | 英国 | 政治 |
+| 漫画 | 纪实 | 艺术 | 科学 | 生活 | 职场 | 散文 | 法国 | 互联网 |
+| 营销 | 奇幻 | 二战 | 股票 | 女性 | 德国 | 学习 | 战争 | 创业 |
+| 绘本 | 名著 | 爱情 | 军事 | 理财 | 教育 | 世界 | 人物 | 沟通 |
+
+
+
## UU 看书
### 小说更新
@@ -143,7 +190,32 @@ count 的取值范围为 1-12,为防止请求次数过多,推荐设置为 5
-## 观止(每日一文)
+## 归档
+
+
+
+## 禁忌书屋
+
+### 首页
+
+
+
+### 精华区
+
+
+
+### 栏目分类
+
+
+
+| 都市 | 校园 | 乡野 | 古风 | 异国 | 玄幻 | 红杏 | 伦理 | 浪漫 | 暴虐 | 摄心 | 其他 |
+| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
+
+
+
+### 搜索关键字
+
+
## 孔夫子旧书网
diff --git a/docs/shopping.md b/docs/shopping.md
index e646967ec0..ad773c8220 100644
--- a/docs/shopping.md
+++ b/docs/shopping.md
@@ -36,6 +36,25 @@ pageClass: routes
+## booth.pm
+
+### 店铺
+
+
+
+## Craigslist
+
+### 商品搜索
+
+
+
+> 由于 Craigslist 取消了 RSS 订阅搜索功能,因此用 RSSHub 来实现了类似效果。
+> 一个完整原始搜索会像这样:
+>
+>
+> /search/xxx 后跟的 "xxx" 为搜索类型,直接参考原始请求即可。
+> query string 是实际的搜索内容。
+
## Furstar
### 最新售卖角色列表
@@ -153,6 +172,18 @@ For instance, in
+## 麦当劳
+
+### 麦当劳活动资讯
+
+
+
+| 全部分类 | 社会责任 | 人员品牌 | 产品故事 | 优惠 | 品牌文化 | 活动速报 |
+| --------- | -------------- | -------- | -------- | ----- | -------- | -------- |
+| news_list | responsibility | brand | product | sales | culture | event |
+
+
+
## 缺书网
### 促销
@@ -301,7 +332,13 @@ For instance, in
+
+
+| 个性化排序 | 按销量从高到低 | 按好评从高到低 | 按上新时间从近到远 |
+| ---------- | -------------- | -------------- | ------------------ |
+| 0 | 1 | 2 | 3 |
+
+
## 宜家 IKEA
diff --git a/docs/social-media.md b/docs/social-media.md
index 1c47f78eaf..ac3a571a6d 100644
--- a/docs/social-media.md
+++ b/docs/social-media.md
@@ -24,15 +24,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户追番列表
-
+
### UP 主投稿
-
+
### UP 主专栏
-
+
### UP 主动态
@@ -40,11 +40,11 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### UP 主频道
-
+
### UP 主默认收藏夹
-
+
### UP 主非默认收藏夹
@@ -52,15 +52,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### UP 主投币视频
-
+
### UP 主粉丝
-
+
### UP 主关注用户
-
+
### 分区视频
@@ -208,7 +208,8 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注动态
-
+
+
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -218,7 +219,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注视频动态
-
+
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -228,7 +229,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户关注专栏
-
+
::: warning 注意
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
@@ -320,12 +321,36 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
+## Gab
+
+### 用戶時間線
+
+
+
+### 熱門
+
+
+
## iCity
### 用户动态
+## Instagram
+
+::: warning 注意
+
+由于 Instagram API 限制,必须在服务器上设置你的用户名和密码。暂不支持两步验证。步骤见部署指南。
+
+如需无登录的 feed,请用 Picuki。
+
+:::
+
+### 用户
+
+
+
## Keep
### 运动日记
@@ -423,7 +448,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 关注的新作品
-
+
::: warning 注意
因为每个人关注的画师不同,所以只能自建。请不要将画师设为 “悄悄关注”,这样子画师的作品就不会出现在订阅里了。
@@ -451,6 +476,12 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
+## Tape 小纸条
+
+### 提问箱新回答
+
+
+
## 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
+
+的效果为
+
+
+
### 用户时间线
-
+
### 用户关注时间线
-
+
::: warning 注意
@@ -499,15 +561,15 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 列表时间线
-
+
### 用户喜欢列表
-
+
### 关键词
-
+
### Trends
@@ -519,11 +581,11 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
-## 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,形如 。
+
+:::
+
### 播放列表
@@ -603,7 +671,13 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 一周口碑榜
-
+
+
+| 一周口碑电影榜 | 一周口碑剧集榜 | 华语口碑剧集榜 |
+| ----------------- | -------------- | ---------------------- |
+| movie_weekly_best | tv_weekly_best | tv_chinese_best_weekly |
+
+
### 豆瓣电影分类
@@ -673,7 +747,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### 用户广播
-
+
::: 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
+
+的效果为
+
+
+
### 日记最新回应
+### 最新回应过的日记
+
+
+
### 话题
@@ -713,6 +817,23 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
+### 用户想看
+
+
+
+对于豆瓣用户想看的内容,在 `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 |
+
+
+
## 饭否
::: 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
+
+的效果为
+
+
+
### 博主
-
+
部分博主仅登录可见,不支持订阅,可以通过打开 `https://m.weibo.cn/u/:uid` 验证
@@ -861,7 +1008,7 @@ rule
### 关键词
-
+
### 热搜榜
@@ -869,11 +1016,17 @@ rule
### 超话
-
+
### 个人时间线
-
+::: warning 注意
+
+个人时间线暂不支持改善可读性。
+
+:::
+
+
::: warning 注意
@@ -948,7 +1101,7 @@ rule
### 收藏夹
-
+
### 用户动态
@@ -960,7 +1113,11 @@ rule
### 用户文章
-
+
+
+| 普通用户 | 机构用户 |
+| -------- | -------- |
+| people | org |
### 专栏
@@ -978,6 +1135,16 @@ rule
+### 知乎分类热榜
+
+
+
+| 全站 | 国际 | 科学 | 汽车 | 视频 | 时尚 | 时事 | 数码 | 体育 | 校园 | 影视 |
+| ----- | ----- | ------- | ---- | ------ | ------- | ----- | ------- | ----- | ------ | ---- |
+| total | focus | science | car | zvideo | fashion | depth | digital | sport | school | film |
+
+
+
### 知乎想法热榜
@@ -1005,3 +1172,12 @@ rule
### 知乎书店 - 知乎周刊
+
+### 用户关注时间线
+
+
+::: warning 注意
+
+用户关注动态需要登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
+
+:::
diff --git a/docs/study.md b/docs/study.md
index 758953eec6..f62eb0ca4d 100644
--- a/docs/study.md
+++ b/docs/study.md
@@ -41,9 +41,9 @@ pageClass: routes
### 查询国内外 CTF 赛事信息
-
+
| `:class` | 类型 |
| :------: | -------------------------------- |
@@ -63,6 +63,14 @@ pageClass: routes
+### 查询近期赛事
+
+
+
+
+
## gradCafe
### gradCafe result
@@ -73,6 +81,42 @@ pageClass: routes
+## MarginNote
+
+### 标签
+
+
+
+| 经验分享 | 论坛精华 | 待跟进反馈 | 优秀建议 | 精选回答 | 官方签名 | 自动更新 | 3674 以上版本支持 | 368 以上版本支持 | 未经验证的安全风险 | 笔记本分享 | 关键反馈 | 精选话题讨论 | 灵感盒 | 引用 |
+| -------- | -------- | ---------- | -------- | -------- | -------- | -------- | ----------------- | ---------------- | ------------------ | ---------- | -------- | ------------ | ------ | ---- |
+
+
+
+## Mind42
+
+### 分类
+
+
+
+| Overview | Popular | All |
+| -------- | ------- | ------ |
+| mindmaps | popular | public |
+
+
+
+### 标签
+
+
+
+| 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 |
+| -- | ------ | -------- | --- | ---- | -------- | --- | ------ | ------- | ----- | ------- | --- | -- | ---- | ------- | ------- | ----------------------------- | ----- | ---------------------------------------- | ------ |
+
+
+
+### 搜索
+
+
+
## NEEA 中国教育考试网
### 国家教育考试
@@ -102,6 +146,26 @@ pageClass: routes
| wsk | 全国外语水平考试 (WSK) |
| mets | 医护英语水平考试 (METS) |
+## ProcessOn
+
+### 推荐
+
+
+
+分类
+
+| 所有类型 | 流程图 | BPMN | 思维导图 | UI 原型图 | UML | Org 组织结构图 | 网络拓扑图 | 韦恩图 | |
+| -------- | ------ | ---- | -------- | --------- | --- | -------------- | ---------- | ------- | ---- |
+| | es | flow | bpmn | mind_free | ui | uml | org | network | venn |
+
+排序
+
+| 人气 | 最多人赞 | 最多收藏 | 最多浏览 | 最新发布 |
+| ---- | --------- | -------------- | --------- | ----------- |
+| | likeCount | favouriteCount | viewCount | publishTime |
+
+
+
## X-MOL 平台
### 新闻
@@ -120,6 +184,22 @@ pageClass: routes
+## zhimap 思维导图社区
+
+
+
+| 热门 | 学科 | 学习 | 语言 | 工作 | 提升 | 生活 | 互联网 | 教育 | 其他 | 行业 | 服务发布 | 医疗 |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| 33b67d1bad1d4e37812f71d42764af34 | 9434268e893a46aa9a1a231059849984 | 820156a42e9a490796c7fd56916aa95b | 959c81f606ca495c882c7e461429eb2a | 5af4bca5496e4733a2d582690627e25f | 5300988dff564756b5d462cea8a865b7 | 02fdcc2ab6374bc6b9b9717e70c87723 | 437d434fe9eb410a94dcefb889994e2b | 9747cbf78f96492c973aa6ab23925eee | d4c3a92a9cf64da7b187763211dc6ff6 | 58231ab9cef34af7819c3f6e2160c007 | 73d89972bee0457997c983d7fca19f9f | 853ce8b3a4c24b87a03f66af95c5e06c |
+
+
+
+## 杭州市国家普通话测试网报信息
+
+### 考试信息
+
+
+
## 唧唧堂
### 论文
@@ -164,6 +244,10 @@ pageClass: routes
+## 幕布精选
+
+
+
## 扇贝
### 用户打卡
@@ -304,12 +388,68 @@ pageClass: routes
+## 阳光高考
+
+### 教育部阳光高考信息公开平台招生政策规定
+
+
+
+| 招生政策 | 深化考试招生制度改革 | 教育法律法规 |
+| -------- | -------------------- | ------------ |
+| dnzszc | zdgg | jyflfg |
+
+
+
+## 印象识堂
+
+### 印象剪藏
+
+
+
+### 卡片清单
+
+
+
+::: tip 提示
+
+卡片对应的话题、专题等内容过期后,该卡片 id 也会失效,此时填入该卡片 id 将会报错。
+
+:::
+
+| 每周收藏排行榜・TOP5 | 每周热门「读书笔记」榜 TOP5 | 【印象话题】选择的悖论 | 【印象专题】如何一秒洞察问题本质? | 「识堂开讲」5 位嘉宾精华笔记大放送 | 【印象话题】培养专注力的 5 个步骤 | 🎁购物清单主题活动获奖结果 |
+| -------------------- | --------------------------- | ---------------------- | ---------------------------------- | ---------------------------------- | --------------------------------- | -------------------------- |
+| 32 | 33 | 101 | 103 | 104 | 105 | 106 |
+
+
+
+### 用户公开笔记
+
+
+
+### 笔记分类
+
+
+
+### 笔记标签
+
+
+
## 英中协会
### 奖学金
+## 有道云笔记
+
+### 学霸感悟
+
+
+
+### 笔记最新动态
+
+
+
## 语雀
### 知识库
diff --git a/docs/support/README.md b/docs/support/README.md
index b36237ebfd..0cc9deee80 100644
--- a/docs/support/README.md
+++ b/docs/support/README.md
@@ -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)
diff --git a/docs/traditional-media.md b/docs/traditional-media.md
index a75e2a88a7..dc685f48f7 100644
--- a/docs/traditional-media.md
+++ b/docs/traditional-media.md
@@ -8,7 +8,7 @@ pageClass: routes
### 频道
-
+
## ABC News
@@ -34,11 +34,11 @@ pageClass: routes
### BBC 英文
-
+
-通过提取文章全文,以提供比官方源更佳的阅读体验.
+通过提取文章全文,以提供比官方源更佳的阅读体验。
-支持大部分频道,频道名称见[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 中文网
-
+
-通过提取文章全文,以提供比官方源更佳的阅读体验.
+通过提取文章全文,以提供比官方源更佳的阅读体验。
-支持大部分频道,频道名称见[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
相比官方 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`。由于官方源的部分路由有两级,因此这里也相应需要填写子分类。
+
+
+
+## ChinaFile
+
+
+
+通过提取文章全文,以提供比官方源更佳的阅读体验。
+
+| 全部 | The China NGO Project |
+| ---- | --------------------- |
+| all | ngo |
@@ -97,39 +109,100 @@ pageClass: routes
-## FT 中文网
+## Financial Times
### FT 中文网
-
+
::: 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`.
+### 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`
+
+:::
+
+
+
+## i-CABLE 有線新聞
+
+
+
+细则:
+
+- `: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))
+
+
+
## NHK
### News Web Easy
+## Phoronix
+
+### 新闻与评测
+
+
+
+## RTHK 傳媒透視
+
+
+
+细则:
+
+- `:range` 时间范围参数
+ (可为 `latest` 或 `四位数字的年份`)
+
+ - `latest`: 最新的 50 篇文章
+ - `2020`: 2020 年的所有文章
+
+- 全文输出转换为简体字: `?opencc=t2s`
+ (`opencc` 是 RSSHub 的通用参数,详情请参阅 [「中文简繁体转换」](https://docs.rsshub.app/parameter.html#zhong-wen-jian-fan-ti-zhuan-huan))
+
+
+
## Solidot
### 最新消息
-
+
::: tip 提示
@@ -149,7 +222,7 @@ Solidot 提供的 feed:
### News
-
+
可选分类如下
@@ -167,6 +240,24 @@ Solidot 提供的 feed:
+### Search
+
+
+
+排序
+
+| Date Ascending | Date Descending |
+| -------------- | --------------- |
+| 1 | 2 |
+
+发表在时间段内
+
+| 1 month | 3 months | 6 months | 12 months | 24 months |
+| ------- | -------- | -------- | --------- | --------- |
+| 1 | 3 | 6 | 12 | 24 |
+
+
+
## The Economist
### 分类
@@ -185,6 +276,32 @@ Solidot 提供的 feed:
+## UDN
+
+### 轉角國際
+
+
+
+## Voice of America (VOA)
+
+透過提取全文,以獲得更好的閱讀體驗
+
+
+
+`语言`
+
+| 粵語 | 中文 | 藏語 |
+| --------- | ------- | ------- |
+| cantonese | chinese | tibetan |
+
+`频道`
+
+可於各語言官網聚合新聞處 (如 ) 獲取
+
+例如 `https://www.voacantonese.com/api/zyrtyequty` 將對應 `/voa/cantonese/zyrtyequty`
+
+
+
## Yahoo
### 新聞
@@ -201,7 +318,17 @@ Solidot 提供的 feed:
| 新聞總集 | 兩岸國際 | 財經 | 娛樂 | 體育 | 健康 |
| -------- | -------- | -------- | ------------- | ------ | ------ |
-| (空) | world | business | entertainment | sports | health |
+| (空) | world | business | entertainment | sports | health |
+
+
+
+## Yahoo! by Author
+
+### 新聞
+
+
+
+Provides all of the articles by the specified Yahoo! author.
@@ -219,25 +346,25 @@ Solidot 提供的 feed:
## 财新网
-> 网站部分内容需要付费订阅,RSS 仅做更新提醒,不含付费内容.
+> 网站部分内容需要付费订阅,RSS 仅做更新提醒,不含付费内容。
### 新闻分类
-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 列表:
+### 最新文章
+
+
+
+说明:此 RSS feed 会自动抓取财新网的最新文章,但不包含 FM 及视频内容。
+
+
+
## 第一财经
### 直播区
@@ -289,7 +424,7 @@ Category 列表:
-Type 栏目:
+Type 栏目:
| 最新 | 深度 | What’s New | 广场 | 科技 | 风物 | 特约 | ... |
| ------ | ------- | ---------- | ----------------- | ---------- | ------- | ------- | --- |
@@ -301,11 +436,11 @@ Type 栏目:
### 话题・标签
-
+
### 作者
-
+
### 个人订阅追踪动态
@@ -350,6 +485,16 @@ Type 栏目:
+## 华尔街日报 The Wall Street Journal (WSJ)
+
+### 新闻
+
+
+
+通过提取文章全文,以提供比官方源更佳的阅读体验。
+
+
+
## 极客公园
### 全球快讯
@@ -386,7 +531,7 @@ category 对应的关键词有
### 即时新闻
-
+
| 中国 | 新加坡 | 国际 | 财经 |
| ----- | --------- | ----- | -------- |
@@ -396,7 +541,7 @@ category 对应的关键词有
### 新闻
-
+
| 中国 | 新加坡 | 东南亚 | 国际 | 体育 | 早报现在 |
| ----- | --------- | ------ | ----- | ------ | -------- |
@@ -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 对应的关键词有
### 新闻分类
-
+
-下面给出部分参考:
+下面给出部分参考:
| 推荐 | 新闻 | 观点 | 文化 | 人物 | 影像 | 专题 | 生活 | 视频 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
@@ -494,7 +639,7 @@ category 对应的关键词有
-栏目分类对应的数字编号见[官方 RSS](https://www.scmp.com/rss)。相比官方提供的 RSS,多提供了全文输出。
+栏目分类对应的数字编号见 [官方 RSS](https://www.scmp.com/rss)。相比官方提供的 RSS,多提供了全文输出。
@@ -502,13 +647,13 @@ category 对应的关键词有
### 新闻
-
+
通过提取文章全文,以提供比官方源更佳的阅读体验。
-| 默认中文 | 中英对照 | 英文 | 中英对照 (繁体中文) | 繁体中文 |
+| 默认中文 | 中英对照 | 英文 | 中英对照 (繁体中文) | 繁体中文 |
| -------- | -------- | ---- | ----------------------- | ------------------ |
-| (空) | dual | en | dual-traditionalchinese | traditionalchinese |
+| (空) | dual | en | dual-traditionalchinese | traditionalchinese |
@@ -545,6 +690,7 @@ category 对应的关键词有
| 2 | 4 | 3 | 453 |
+
## 齐鲁晚报
### 新闻
@@ -565,21 +711,21 @@ category 对应的关键词有
### 观点
-
+
### 环保频道
-
+
### 习近平系列重要讲话
-
+
## 人民日报社 国际金融报
### 栏目
-
+
`cid`可在对应栏目的 url 后的参数中获取,如`热点快报`的栏目 url 为`http://www.ifnews.com/column.html?cid=48`, `cid`即为`48`.
@@ -597,7 +743,7 @@ category 对应的关键词有
### 新聞
-
+
综合页文章标题添加板块标签
@@ -619,18 +765,6 @@ category 对应的关键词有
-## 网易新闻专栏
-
-### 栏目
-
-
-
-| 轻松一刻 | 槽值 | 人间 | 大国小民 | 三三有梗 | 数读 | 看客 | 下划线 | 谈心社 | 哒哒 | 胖编怪聊 | 曲一刀 | 今日之声 | 浪潮 | 沸点 |
-| -------- | ---- | ---- | -------- | -------- | ---- | ---- | ------ | ------ | ---- | -------- | ------ | -------- | ---- | ---- |
-| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
-
-
-
## 卫报 The Guardian
通过提取文章全文,以提供比官方源更佳的阅读体验。
@@ -647,7 +781,7 @@ category 对应的关键词有
### 分类
-
+
## 香港 01
@@ -657,19 +791,19 @@ category 对应的关键词有
### 栏目
-
+
### 子栏目
-
+
### 专题
-
+
### 标签
-
+
## 香港電台
@@ -691,11 +825,11 @@ category 对应的关键词有
### 栏目
-
+
### 电子报
-
+
## 新浪科技
@@ -739,7 +873,7 @@ category 对应的关键词有
### 新闻专题
-
+
::: tip 提示
@@ -769,6 +903,10 @@ category 对应的关键词有
+### 央视网图片《镜象》
+
+
+
## 朝日新聞中文網(繁體中文版)
### 新聞分類
@@ -896,3 +1034,15 @@ category 对应的关键词有
### 九江新闻
+
+## 自由亚洲电台
+
+
+
+通过指定频道参数,提供比官方源更佳的阅读体验。
+
+参数均可在官网获取,如:
+
+`https://www.rfa.org/cantonese/news` 对应 `/rfa/cantonese/news`
+
+`https://www.rfa.org/cantonese/news/htm` 对应 `/rfa/cantonese/news/htm`
diff --git a/docs/university.md b/docs/university.md
index 9241564146..121d71f36a 100644
--- a/docs/university.md
+++ b/docs/university.md
@@ -28,6 +28,12 @@ pageClass: routes
+## UTDallas
+
+### International Student Services
+
+
+
## 安徽工业大学
### 教务处
@@ -226,7 +232,7 @@ pageClass: routes
### BTBYR 趣味盒
-
+
::: warning 注意
由于需要登陆 BTBYR 后的 Cookie 值,所以只能自建,并且部署和订阅端均需支持 IPV6 网络或使用镜像站点。
@@ -386,6 +392,14 @@ xskb1 对应
+### 研究生院
+
+
+
+### 信息与通信工程学院
+
+
+
## 东北大学
### 东北大学新闻网
@@ -440,6 +454,22 @@ xskb1 对应
+## 复旦大学继续教育学院
+
+### 成人夜大通知公告
+
+
+
+## 福州大学
+
+### 教务处教学通知
+
+
+
+### 教务处专家讲座
+
+
+
## 广东工业大学
### 校内新闻网
@@ -615,6 +645,18 @@ category 列表:
部分文章需要经过统一身份认证后才能阅读全文。
:::
+## 哈尔滨工业大学(深圳)
+
+### 哈尔滨工业大学(深圳) - 新闻中心
+
+
+
+| 校区要闻 | 媒体报道 | 通知公告 | 综合新闻 | 校园动态 | 讲座论坛 | 热点专题 |
+| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
+| id-116 | id-80 | id-74 | id-75 | id-77 | id-78 | id-79 |
+
+
+
## 哈尔滨工业大学(威海)
### 今日工大 - 通知公告
@@ -833,6 +875,8 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
| -------- | -------- |
| tt | yw |
+
+
### 暨南大学校园时讯
@@ -841,6 +885,8 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
| -------- | -------- |
| yxsd | bmkx |
+
+
## 江南大学
### 教务处通知
@@ -934,10 +980,18 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
## 马萨诸塞大学 阿默斯特分校 (UMASS Amherst)
-### 电子与计算机工程系新闻
+### 电子与计算机工程系
+
+#### 新闻
+#### 研讨会
+
+
+
+注:[源站](https://ece.umass.edu/seminar)在未公布研讨会计划时会清空页面导致 Rsshub 抓取不到内容,此属正常现象。
+
### 信息与计算机科学系新闻
@@ -1598,6 +1652,19 @@ type 列表:
+## 武汉纺织大学
+
+### 信息门户公告
+
+
+
+| 公告类型 | 通知公告 | 教务信息 | 科研动态 |
+| -------- | -------- | -------- | -------- |
+| 参数 | 1 | 2 | 3 |
+
+
+
## 西安电子科技大学
### 教务处
@@ -1641,6 +1708,20 @@ type 列表:
+## 西北工业大学
+
+### 翱翔门户
+
+
+
+栏目 ID
+
+| 咨询中心 | 通知公告 | 校内新闻 | 校务公开 | 历史文件查询 | 教育教学 | 学术交流 | 学院动态 | 部门动态 |
+| -------- | -------- | -------- | -------- | ------------ | -------- | -------- | -------- | -------- |
+| 10000 | 10001 | 10002 | 10003 | 10004 | 10005 | 10006 | 10007 | 10008 |
+
+
+
## 西南财经大学
### 经济信息工程学院
@@ -1685,6 +1766,20 @@ type 列表:
+## 信阳师范学院
+
+### 高等教育自学考试办公室
+
+
+
+分类 ID(如果请求的分类 ID 在不存在下表中,默认请求`zkzx`)
+
+| 主考专业 | 规章制度 | 实践课程 | 毕业论文 | 学士学位 | 自考毕业 | 自考教材 | 自考指南 | 联系我们 | 自考资讯 | 报名指南 | 日程安排 | 新生入门 | 转考免考 | 复习资料 |
+| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
+| zkzy | gzzd | sjkc | bylw | xsxw | zkby | zkjc | zkzn | lxwm | zkzx | bmzn | rcap | xsrm | zkmk | fxzl |
+
+
+
## 扬州大学
### 官网消息
@@ -1906,6 +2001,10 @@ type 列表:
## 中国地质大学 (武汉)
+### 今日文章 - 包含全校网站最新通知
+
+
+
### 研究生院综合通知公告
@@ -1918,6 +2017,14 @@ type 列表:
+### 工程学院
+
+
+
+| 所有 | 学院新闻 | 通知公告 | 党建工作 | 学术动态 | 本科生教育 | 研究生教育 | 教工之家 |
+| ---- | -------- | -------- | -------- | -------- | ---------- | ---------- | -------- |
+| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+
## 中国海洋大学
### 信息科学与工程学院
@@ -1948,6 +2055,8 @@ type 列表:
| ------ | ------ | ------ | ------ |
| jx | ky | gl | fw |
+
+
### 教务处通知新闻
@@ -1956,6 +2065,8 @@ type 列表:
| ---- | -------- | ---- | -------- |
| info | teaching | exam | exchange |
+
+
## 中国科学院
### 成果转化
@@ -2116,6 +2227,28 @@ type 列表:
+## 重庆理工大学
+
+### 学校通知
+
+
+
+### 图书馆通知
+
+
+
+## 重庆文理学院
+
+### 通知公告
+
+
+
+| 通知公告 | 学术活动公告 |
+| -------- | ------------ |
+| notify | academiceve |
+
+
+
## 中山大学
### 数据科学与计算机学院动态
diff --git a/lib/app.js b/lib/app.js
index 61ad7129e6..b51ca2314a 100644
--- a/lib/app.js
+++ b/lib/app.js
@@ -48,7 +48,6 @@ app.context.debug = {
etag: 0,
paths: [],
routes: [],
- ips: [],
errorPaths: [],
errorRoutes: [],
};
diff --git a/lib/config.js b/lib/config.js
index 424e5035fb..0ebad15129 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -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();
diff --git a/lib/middleware/cache.js b/lib/middleware/cache.js
index 1500f89c57..7120486759 100644
--- a/lib/middleware/cache.js
+++ b/lib/middleware/cache.js
@@ -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);
}
};
};
diff --git a/lib/middleware/debug.js b/lib/middleware/debug.js
index d3c41ae9dc..644795418a 100644
--- a/lib/middleware/debug.js
+++ b/lib/middleware/debug.js
@@ -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();
diff --git a/lib/middleware/header.js b/lib/middleware/header.js
index ff4272cbf4..92817583d5 100644
--- a/lib/middleware/header.js
+++ b/lib/middleware/header.js
@@ -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();
diff --git a/lib/middleware/onerror.js b/lib/middleware/onerror.js
index bbdb19cdd2..0109576549 100644
--- a/lib/middleware/onerror.js
+++ b/lib/middleware/onerror.js
@@ -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]);
diff --git a/lib/middleware/parameter.js b/lib/middleware/parameter.js
index 3d3be62615..723e4d98f8 100644
--- a/lib/middleware/parameter.js
+++ b/lib/middleware/parameter.js
@@ -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;
});
}
diff --git a/lib/middleware/template.js b/lib/middleware/template.js
index 69ae580e7d..450e9d0592 100644
--- a/lib/middleware/template.js
+++ b/lib/middleware/template.js
@@ -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('JSON output had been removed, see: https://github.com/DIYgod/RSSHub/issues/1114');
}
- 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();
diff --git a/lib/router.js b/lib/router.js
index c0c6fce2ba..aab0d5eea9 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -48,6 +48,9 @@ router.get('/quicker/update', require('./routes/quicker/update.js'));
router.get('/quicker/user/action/:uid/:person', require('./routes/quicker/person.js'));
router.get('/quicker/user/:uid/:person', require('./routes/quicker/person.js'));
+// Benedict Evans
+router.get('/benedictevans', require('./routes/benedictevans/recent.js'));
+
// bilibili
router.get('/bilibili/user/video/:uid/:disableEmbed?', require('./routes/bilibili/video'));
router.get('/bilibili/user/article/:uid', require('./routes/bilibili/article'));
@@ -83,6 +86,8 @@ router.get('/bilibili/followings/article/:uid', require('./routes/bilibili/follo
router.get('/bilibili/readlist/:listid', require('./routes/bilibili/readlist'));
router.get('/bilibili/weekly', require('./routes/bilibili/weekly_recommend'));
router.get('/bilibili/manga/update/:comicid', require('./routes/bilibili/manga_update'));
+router.get('/bilibili/followings/dynamic/:uid/:disableEmbed?', require('./routes/bilibili/followings_dynamic'));
+router.get('/bilibili/app/:id?', require('./routes/bilibili/app'));
// bangumi
router.get('/bangumi/calendar/today', require('./routes/bangumi/calendar/today'));
@@ -93,11 +98,16 @@ router.get('/bangumi/group/:id', require('./routes/bangumi/group/topic'));
router.get('/bangumi/subject/:id', require('./routes/bangumi/subject'));
router.get('/bangumi/user/blog/:id', require('./routes/bangumi/user/blog'));
+// 報導者
+router.get('/twreporter/newest', require('./routes/twreporter/newest'));
+router.get('/twreporter/photography', require('./routes/twreporter/photography'));
+router.get('/twreporter/category/:cid', require('./routes/twreporter/category'));
+
// 微博
-router.get('/weibo/user/:uid/:displayVideo?', require('./routes/weibo/user'));
-router.get('/weibo/keyword/:keyword', require('./routes/weibo/keyword'));
+router.get('/weibo/user/:uid/:routeParams?', require('./routes/weibo/user'));
+router.get('/weibo/keyword/:keyword/:routeParams?', require('./routes/weibo/keyword'));
router.get('/weibo/search/hot', require('./routes/weibo/search/hot'));
-router.get('/weibo/super_index/:id', require('./routes/weibo/super_index'));
+router.get('/weibo/super_index/:id/:routeParams?', require('./routes/weibo/super_index'));
router.get('/weibo/oasis/user/:userid', require('./routes/weibo/oasis/user'));
// 贴吧
@@ -105,6 +115,7 @@ router.get('/tieba/forum/:kw', require('./routes/tieba/forum'));
router.get('/tieba/forum/good/:kw/:cid?', require('./routes/tieba/forum'));
router.get('/tieba/post/:id', require('./routes/tieba/post'));
router.get('/tieba/post/lz/:id', require('./routes/tieba/post'));
+router.get('/tieba/user/:uid', require('./routes/tieba/user'));
// 网易云音乐
router.get('/ncm/playlist/:id', require('./routes/ncm/playlist'));
@@ -117,7 +128,7 @@ router.get('/juejin/category/:category', require('./routes/juejin/category'));
router.get('/juejin/tag/:tag', require('./routes/juejin/tag'));
router.get('/juejin/trending/:category/:type', require('./routes/juejin/trending'));
router.get('/juejin/books', require('./routes/juejin/books'));
-router.get('/juejin/pins', require('./routes/juejin/pins'));
+router.get('/juejin/pins/:type?', require('./routes/juejin/pins'));
router.get('/juejin/posts/:id', require('./routes/juejin/posts'));
router.get('/juejin/collections/:userId', require('./routes/juejin/favorites'));
router.get('/juejin/collection/:collectionId', require('./routes/juejin/collection'));
@@ -136,7 +147,7 @@ router.get('/jianshu/user/:id', require('./routes/jianshu/user'));
router.get('/zhihu/collection/:id', require('./routes/zhihu/collection'));
router.get('/zhihu/people/activities/:id', require('./routes/zhihu/activities'));
router.get('/zhihu/people/answers/:id', require('./routes/zhihu/answers'));
-router.get('/zhihu/people/posts/:id', require('./routes/zhihu/posts'));
+router.get('/zhihu/posts/:usertype/:id', require('./routes/zhihu/posts'));
router.get('/zhihu/zhuanlan/:id', require('./routes/zhihu/zhuanlan'));
router.get('/zhihu/daily', require('./routes/zhihu/daily'));
router.get('/zhihu/daily/section/:sectionId', require('./routes/zhihu/daily_section'));
@@ -148,6 +159,8 @@ router.get('/zhihu/people/pins/:id', require('./routes/zhihu/pin/people'));
router.get('/zhihu/bookstore/newest', require('./routes/zhihu/bookstore/newest'));
router.get('/zhihu/pin/daily', require('./routes/zhihu/pin/daily'));
router.get('/zhihu/weekly', require('./routes/zhihu/weekly'));
+router.get('/zhihu/timeline', require('./routes/zhihu/timeline'));
+router.get('/zhihu/hot/:category?', require('./routes/zhihu/hot'));
// 妹子图
router.get('/mzitu/home/:type?', require('./routes/mzitu/home'));
@@ -172,7 +185,7 @@ router.get('/douban/movie/playing/:score', require('./routes/douban/playing'));
router.get('/douban/movie/playing/:score/:city', require('./routes/douban/playing'));
router.get('/douban/movie/later', require('./routes/douban/later'));
router.get('/douban/movie/ustop', require('./routes/douban/ustop'));
-router.get('/douban/movie/weekly', require('./routes/douban/weekly_best'));
+router.get('/douban/movie/weekly/:type?', require('./routes/douban/weekly_best'));
router.get('/douban/movie/classification/:sort?/:score?/:tags?', require('./routes/douban/classification.js'));
router.get('/douban/group/:groupid', require('./routes/douban/group'));
router.get('/douban/explore', require('./routes/douban/explore'));
@@ -184,8 +197,10 @@ router.get('/douban/bookstore', require('./routes/douban/bookstore'));
router.get('/douban/book/rank/:type?', require('./routes/douban/book/rank'));
router.get('/douban/doulist/:id', require('./routes/douban/doulist'));
router.get('/douban/explore/column/:id', require('./routes/douban/explore_column'));
-router.get('/douban/people/:userid/status', require('./routes/douban/people/status.js'));
+router.get('/douban/people/:userid/status/:routeParams?', require('./routes/douban/people/status.js'));
+router.get('/douban/people/:userid/wish/:routeParams?', require('./routes/douban/people/wish.js'));
router.get('/douban/replies/:uid', require('./routes/douban/replies'));
+router.get('/douban/replied/:uid', require('./routes/douban/replied'));
router.get('/douban/topic/:id/:sort?', require('./routes/douban/topic.js'));
router.get('/douban/channel/:id/:nav?', require('./routes/douban/channel/topic.js'));
router.get('/douban/channel/:id/subject/:nav', require('./routes/douban/channel/subject.js'));
@@ -195,6 +210,7 @@ router.get('/douban/celebrity/:id/:sort?', require('./routes/douban/celebrity.js
router.get('/plainlaw/archives', require('./routes/plainlaw/archives.js'));
// 煎蛋
+router.get('/jandan/article', require('./routes/jandan/article'));
router.get('/jandan/:sub_model', require('./routes/jandan/pic'));
// 喷嚏
@@ -220,14 +236,14 @@ router.get('/jinritoutiao/keyword/:keyword', require('./routes/jinritoutiao/keyw
router.get('/disqus/posts/:forum', require('./routes/disqus/posts'));
// Twitter
-router.get('/twitter/user/:id/:type?', require('./routes/twitter/user'));
-router.get('/twitter/list/:id/:name', require('./routes/twitter/list'));
-router.get('/twitter/likes/:id', require('./routes/twitter/likes'));
-router.get('/twitter/followings/:id', require('./routes/twitter/followings'));
-router.get('/twitter/keyword/:keyword', require('./routes/twitter/keyword'));
+router.get('/twitter/user/:id/:routeParams?', require('./routes/twitter/user'));
+router.get('/twitter/list/:id/:name/:routeParams?', require('./routes/twitter/list'));
+router.get('/twitter/likes/:id/:routeParams?', require('./routes/twitter/likes'));
+router.get('/twitter/followings/:id/:routeParams?', require('./routes/twitter/followings'));
+router.get('/twitter/keyword/:keyword/:routeParams?', require('./routes/twitter/keyword'));
router.get('/twitter/trends/:woeid?', require('./routes/twitter/trends'));
-// Youtube
+// YouTube
router.get('/youtube/user/:username/:embed?', require('./routes/youtube/user'));
router.get('/youtube/channel/:id/:embed?', require('./routes/youtube/channel'));
router.get('/youtube/playlist/:id/:embed?', require('./routes/youtube/playlist'));
@@ -292,6 +308,7 @@ router.get('/github/branches/:user/:repo', require('./routes/github/branches'));
router.get('/github/file/:user/:repo/:branch/:filepath+', require('./routes/github/file'));
router.get('/github/starred_repos/:user', require('./routes/github/starred_repos'));
router.get('/github/contributors/:user/:repo/:order?/:anon?', require('./routes/github/contributors'));
+router.get('/github/topics/:name/:qs?', require('./routes/github/topic'));
// f-droid
router.get('/fdroid/apprelease/:app', require('./routes/fdroid/apprelease'));
@@ -312,6 +329,9 @@ router.get('/pornhub/users/:username', require('./routes/pornhub/users'));
router.get('/pornhub/model/:username/:sort?', require('./routes/pornhub/model'));
router.get('/pornhub/pornstar/:username/:sort?', require('./routes/pornhub/pornstar'));
+// Prestige
+router.get('/prestige-av/series/:mid/:sort?', require('./routes/prestige-av/series'));
+
// yande.re
router.get('/yande.re/post/popular_recent', require('./routes/yande.re/post_popular_recent'));
router.get('/yande.re/post/popular_recent/:period', require('./routes/yande.re/post_popular_recent'));
@@ -329,6 +349,7 @@ router.get('/lfsyd/:typecode', require('./routes/lfsyd/index'));
// 喜马拉雅
router.get('/ximalaya/album/:id/:all?', require('./routes/ximalaya/album'));
+router.get('/ximalaya/album/:id/:all/:shownote?', require('./routes/ximalaya/album'));
// EZTV
router.get('/eztv/torrents/:imdb_id', require('./routes/eztv/imdb'));
@@ -362,8 +383,10 @@ router.get('/mihoyo/bh2/:type', require('./routes/mihoyo/bh2'));
// 新闻联播
router.get('/cctv/xwlb', require('./routes/cctv/xwlb'));
+
// 央视新闻
router.get('/cctv/:category', require('./routes/cctv/category'));
+router.get('/cctv/photo/jx', require('./routes/cctv/jx'));
router.get('/cctv-special/:id?', require('./routes/cctv/special'));
// 财新博客
@@ -411,7 +434,7 @@ router.get('/cpython/:pre?', require('./routes/cpython'));
router.get('/mi/golden', require('./routes/mi/golden'));
router.get('/mi/crowdfunding', require('./routes/mi/crowdfunding'));
router.get('/mi/youpin/crowdfunding', require('./routes/mi/youpin/crowdfunding'));
-router.get('/mi/youpin/new', require('./routes/mi/youpin/new'));
+router.get('/mi/youpin/new/:sort?', require('./routes/mi/youpin/new'));
router.get('/miui/:device/:type?/:region?', require('./routes/mi/miui/index'));
router.get('/mi/bbs/board/:boardId', require('./routes/mi/board'));
@@ -469,6 +492,9 @@ router.get('/xueqiu/hots', require('./routes/xueqiu/hots'));
// Greasy Fork
router.get('/greasyfork/:language/:domain?', require('./routes/greasyfork/scripts'));
+// Gwern Branwen
+router.get('/gwern/:category', require('./routes/gwern/category'));
+
// LinkedKeeper
router.get('/linkedkeeper/:type/:id?', require('./routes/linkedkeeper/index'));
@@ -478,8 +504,10 @@ router.get('/oschina/user/:id', require('./routes/oschina/user'));
router.get('/oschina/u/:id', require('./routes/oschina/u'));
router.get('/oschina/topic/:topic', require('./routes/oschina/topic'));
-// MIT technology review
+// MIT Technology Review
+router.get('/technologyreview', require('./routes/technologyreview/index'));
router.get('/technologyreview/:category_name', require('./routes/technologyreview/topic'));
+
// 安全客
router.get('/aqk/vul', require('./routes/aqk/vul'));
router.get('/aqk/:category', require('./routes/aqk/category'));
@@ -506,6 +534,7 @@ router.get('/wechat/tgchannel/:id', require('./routes/tencent/wechat/tgchannel')
router.get('/wechat/uread/:userid', require('./routes/tencent/wechat/uread'));
router.get('/wechat/ershicimi/:id', require('./routes/tencent/wechat/ershcimi'));
router.get('/wechat/wjdn/:id', require('./routes/tencent/wechat/wjdn'));
+router.get('/wechat/wxnmh/:id', require('./routes/tencent/wechat/wxnmh'));
router.get('/wechat/mp/homepage/:biz/:hid/:cid?', require('./routes/tencent/wechat/mp'));
router.get('/wechat/mp/msgalbum/:biz/:aid', require('./routes/tencent/wechat/msgalbum'));
@@ -611,6 +640,9 @@ router.get('/hhu/libNewsc', require('./routes/universities/hhu/libNewsc'));
router.get('/hit/jwc', require('./routes/universities/hit/jwc'));
router.get('/hit/today/:category', require('./routes/universities/hit/today'));
+// 哈尔滨工业大学(深圳)
+router.get('/hitsz/article/:category?', require('./routes/universities/hitsz/article'));
+
// 哈尔滨工业大学(威海)
router.get('/hitwh/today', require('./routes/universities/hitwh/today'));
@@ -679,6 +711,9 @@ router.get('/cuc/yz', require('./routes/universities/cuc/yz'));
router.get('/ustc/news/:type?', require('./routes/universities/ustc/index'));
router.get('/ustc/jwc/:type?', require('./routes/universities/ustc/jwc/index'));
+// UTdallas ISSO
+router.get('/utdallas/isso', require('./routes/universities/utdallas/isso'));
+
// 南京邮电大学
router.get('/njupt/jwc/:type?', require('./routes/universities/njupt/jwc'));
@@ -702,6 +737,9 @@ router.get('/cqu/youth/:category', require('./routes/universities/cqu/youth/info
router.get('/cqu/sci/:category', require('./routes/universities/cqu/sci/info'));
router.get('/cqu/net/:category', require('./routes/universities/cqu/net/info'));
+// 重庆文理学院
+router.get('/cqwu/news/:type?', require('./routes/universities/cqwu/news'));
+
// 南京信息工程大学
router.get('/nuist/bulletin/:category?', require('./routes/universities/nuist/bulletin'));
router.get('/nuist/jwc/:category?', require('./routes/universities/nuist/jwc'));
@@ -749,6 +787,8 @@ router.get('/uestc/news/:type?', require('./routes/universities/uestc/news'));
router.get('/uestc/auto/:type?', require('./routes/universities/uestc/auto'));
router.get('/uestc/cs/:type?', require('./routes/universities/uestc/cs'));
router.get('/uestc/cqe/:type?', require('./routes/universities/uestc/cqe'));
+router.get('/uestc/gr', require('./routes/universities/uestc/gr'));
+router.get('/uestc/sice', require('./routes/universities/uestc/sice'));
// 云南大学
router.get('/ynu/grs/zytz', require('./routes/universities/ynu/grs/zytz'));
@@ -862,6 +902,10 @@ router.get('/usst/jwc', require('./routes/universities/usst/jwc'));
// 临沂大学
router.get('/lyu/news/:type', require('./routes/universities/lyu/news/index'));
+// 福州大学
+router.get('/fzu/jxtz', require('./routes/universities/fzu/jxtz'));
+router.get('/fzu/zjjz', require('./routes/universities/fzu/zjjz'));
+
// ifanr
router.get('/ifanr/:channel?', require('./routes/ifanr/index'));
@@ -873,6 +917,7 @@ router.get('/guokr/:channel', require('./routes/guokr/calendar'));
router.get('/zaobao/realtime/:section?', require('./routes/zaobao/realtime'));
router.get('/zaobao/znews/:section?', require('./routes/zaobao/znews'));
router.get('/zaobao/:type/:section', require('./routes/zaobao/index'));
+router.get('/zaobao/interactive-graphics', require('./routes/zaobao/interactive'));
// Apple
router.get('/apple/exchange_repair/:country?', require('./routes/apple/exchange_repair'));
@@ -944,7 +989,8 @@ router.get('/nhk/news_web_easy', require('./routes/nhk/news_web_easy'));
// BBC
router.get('/bbc/:site?/:channel?', require('./routes/bbc/index'));
-// FT 中文网
+// Financial Times
+router.get('/ft/myft/:key', require('./routes/ft/myft'));
router.get('/ft/:language/:channel?', require('./routes/ft/channel'));
// The Verge
@@ -972,7 +1018,7 @@ router.get('/laosiji/feed', require('./routes/laosiji/feed'));
router.get('/laosiji/hotshow/:id', require('./routes/laosiji/hotshow'));
// Scientific American 60-Second Science
-router.get('/60s-science/transcript', require('./routes/60s-science/transcript'));
+router.get('/60s-science', require('./routes/60s-science/transcript'));
// 99% Invisible
router.get('/99percentinvisible/transcript', require('./routes/99percentinvisible/transcript'));
@@ -1102,6 +1148,9 @@ router.get('/tssstatus/:board/:build', require('./routes/tssstatus'));
router.get('/anime1/anime/:time/:name', require('./routes/anime1/anime'));
router.get('/anime1/search/:keyword', require('./routes/anime1/search'));
+// Global UDN
+router.get('/udn/global/:tid', require('./routes/udn/global'));
+
// gitea
router.get('/gitea/blog', require('./routes/gitea/blog'));
@@ -1122,6 +1171,10 @@ router.get('/weseepro/circle', require('./routes/weseepro/circle'));
// 玩物志
router.get('/coolbuy/newest', require('./routes/coolbuy/newest'));
+// MiniFlux
+router.get('/miniflux/subscription/:parameters?', require('./routes/miniflux/get_feeds'));
+router.get('/miniflux/:feeds/:parameters?', require('./routes/miniflux/get_entries'));
+
// NGA
router.get('/nga/forum/:fid/:recommend?', require('./routes/nga/forum'));
router.get('/nga/post/:tid', require('./routes/nga/post'));
@@ -1165,6 +1218,12 @@ router.get('/cpu/yjsy', require('./routes/universities/cpu/yjsy'));
router.get('/zimuzu/resource/:id?', require('./routes/zimuzu/resource'));
router.get('/zimuzu/top/:range/:type', require('./routes/zimuzu/top'));
+// 字幕库
+router.get('/zimuku/:type?', require('./routes/zimuku/index'));
+
+// SubHD.tv
+router.get('/subhd/newest', require('./routes/subhd/newest'));
+
// 虎嗅
router.get('/huxiu/tag/:id', require('./routes/huxiu/tag'));
router.get('/huxiu/search/:keyword', require('./routes/huxiu/search'));
@@ -1174,7 +1233,7 @@ router.get('/huxiu/collection/:id', require('./routes/huxiu/collection'));
// Steam
router.get('/steam/search/:params', require('./routes/steam/search'));
-router.get('/steam/news/:appids', require('./routes/steam/news'));
+router.get('/steam/news/:appid/:language?', require('./routes/steam/news'));
// Steamgifts
router.get('/steamgifts/discussions/:category?', require('./routes/steam/steamgifts/discussions'));
@@ -1191,6 +1250,7 @@ router.get('/bihu/activaties/:id', require('./routes/bihu/activaties'));
// 停电通知
router.get('/tingdiantz/nanjing', require('./routes/tingdiantz/nanjing'));
+router.get('/tingdiantz/95598/:province/:city/:district?', require('./routes/tingdiantz/95598'));
// 36kr
router.get('/36kr/search/article/:keyword', require('./routes/36kr/search/article'));
@@ -1287,6 +1347,8 @@ router.get('/gov/beijing/bjeea/:type', require('./routes/gov/beijing/eea'));
// 广东省教育厅
router.get('/gov/guangdong/edu/:caty', require('./routes/gov/guangdong/edu'));
+// 广东省深圳市
+router.get('/gov/shenzhen/xxgk/zfxxgj/:caty', require('./routes/gov/shenzhen/xxgk/zfxxgj'));
// 日本国外務省記者会見
router.get('/go.jp/mofa', require('./routes/go.jp/mofa/main'));
@@ -1486,6 +1548,7 @@ router.get('/zjgsu/xszq', require('./routes/universities/zjgsu/xszq/scripts'));
router.get('/dianping/user/:id?', require('./routes/dianping/user'));
// 半月谈
+router.get('/banyuetan/byt/:time?', require('./routes/banyuetan/byt'));
router.get('/banyuetan/:name', require('./routes/banyuetan'));
// 人民日报
@@ -1502,13 +1565,18 @@ router.get('/gamersky/ent/:category', require('./routes/gamersky/ent'));
// 游研社
router.get('/yystv/category/:category', require('./routes/yystv/category'));
+router.get('/yystv/docs', require('./routes/yystv/docs'));
+
+// konami
+router.get('/konami/pesmobile/:lang?/:os?', require('./routes/konami/pesmobile'));
// psnine
router.get('/psnine/index', require('./routes/psnine/index'));
router.get('/psnine/shuzhe', require('./routes/psnine/shuzhe'));
router.get('/psnine/trade', require('./routes/psnine/trade'));
router.get('/psnine/game', require('./routes/psnine/game'));
-router.get('/psnine/news', require('./routes/psnine/news'));
+router.get('/psnine/news/:order?', require('./routes/psnine/news'));
+router.get('/psnine/node/:id?/:order?', require('./routes/psnine/node'));
// 浙江大学
router.get('/zju/list/:type', require('./routes/universities/zju/list'));
@@ -1541,7 +1609,7 @@ router.get('/zaker/focusread', require('./routes/zaker/focusread'));
// Matters
router.get('/matters/topics', require('./routes/matters/topics'));
-router.get('/matters/latest', require('./routes/matters/latest'));
+router.get('/matters/latest/:type?', require('./routes/matters/latest'));
router.get('/matters/hot', require('./routes/matters/hot'));
router.get('/matters/tags/:tid', require('./routes/matters/tags'));
router.get('/matters/author/:uid', require('./routes/matters/author'));
@@ -1573,6 +1641,7 @@ router.get('/vocus/publication/:id', require('./routes/vocus/publication'));
router.get('/vocus/user/:id', require('./routes/vocus/user'));
// 一亩三分地 1point3acres
+router.get('/1point3acres/blog/:category?', require('./routes/1point3acres/blog'));
router.get('/1point3acres/user/:id/threads', require('./routes/1point3acres/threads'));
router.get('/1point3acres/user/:id/posts', require('./routes/1point3acres/posts'));
router.get('/1point3acres/offer/:year?/:major?/:school?', require('./routes/1point3acres/offer'));
@@ -1669,10 +1738,16 @@ router.get('/manhuadb/comics/:id', require('./routes/manhuadb/comics'));
router.get('/zfrontier/postlist/:type', require('./routes/zfrontier/postlist'));
router.get('/zfrontier/board/:boardId', require('./routes/zfrontier/board_postlist'));
-// 观察者风闻话题
-router.get('/guanchazhe/topic/:id', require('./routes/guanchazhe/topic'));
-router.get('/guanchazhe/personalpage/:uid', require('./routes/guanchazhe/personalpage'));
-router.get('/guanchazhe/index/:type', require('./routes/guanchazhe/index'));
+// 观察者网
+router.get('/guancha/headline', require('./routes/guancha/headline'));
+router.get('/guancha/topic/:id/:order?', require('./routes/guancha/topic'));
+router.get('/guancha/member/:caty?', require('./routes/guancha/member'));
+router.get('/guancha/personalpage/:uid', require('./routes/guancha/personalpage'));
+router.get('/guancha/:caty?', require('./routes/guancha/index'));
+
+router.get('/guanchazhe/topic/:id/:order?', require('./routes/guancha/topic'));
+router.get('/guanchazhe/personalpage/:uid', require('./routes/guancha/personalpage'));
+router.get('/guanchazhe/index/:caty?', require('./routes/guancha/index'));
// Hpoi 手办维基
router.get('/hpoi/info/:type?', require('./routes/hpoi/info'));
@@ -1850,7 +1925,10 @@ router.get('/docschina/jsweekly', require('./routes/docschina/jsweekly'));
router.get('/im2maker/:channel?', require('./routes/im2maker/index'));
// 巨潮资讯
-router.get('/cninfo/announcement/:column/:code/:orgId/:category?', require('./routes/cninfo/announcement'));
+router.get('/cninfo/announcement/:column/:code/:orgId/:category?/:search?', require('./routes/cninfo/announcement'));
+
+// 金十数据
+router.get('/jinshi/index', require('./routes/jinshi/index'));
// 中央纪委国家监委网站
router.get('/ccdi/scdc', require('./routes/ccdi/scdc'));
@@ -1966,7 +2044,8 @@ router.get('/dlmu/grs/zsgz/:type', require('./routes/universities/dlmu/grs/zsgz'
router.get('/socialclub/events/:game?', require('./routes/socialclub/events'));
// CTFHub Event Calendar
-router.get('/ctfhub/calendar/:limit?/:form?/:class?/:title?', require('./routes/ctfhub'));
+router.get('/ctfhub/upcoming/:limit?', require('./routes/ctfhub/upcoming'));
+router.get('/ctfhub/search/:limit?/:form?/:class?/:title?', require('./routes/ctfhub/search'));
// 阿里云
router.get('/aliyun/database_month', require('./routes/aliyun/database_month'));
@@ -1994,9 +2073,6 @@ router.get('/japanpost/:reqCode/:locale?', require('./routes/japanpost/index'));
// 中华人民共和国商务部
router.get('/mofcom/article/:suffix', require('./routes/mofcom/article'));
-// 字幕库
-router.get('/zimuku/:type?', require('./routes/zimuku/index'));
-
// 品玩
router.get('/pingwest/status', require('./routes/pingwest/status'));
router.get('/pingwest/tag/:tag/:type', require('./routes/pingwest/tag'));
@@ -2005,10 +2081,6 @@ router.get('/pingwest/user/:uid/:type?', require('./routes/pingwest/user'));
// Hanime
router.get('/hanime/video', require('./routes/hanime/video'));
-// 篝火营地
-router.get('/gouhuo/news/:category', require('./routes/gouhuo'));
-router.get('/gouhuo/strategy', require('./routes/gouhuo/strategy'));
-
// Soul
router.get('/soul/:id', require('./routes/soul'));
router.get('/soul/posts/hot', require('./routes/soul/hot'));
@@ -2025,6 +2097,9 @@ router.get('/tianya/comments/:userid', require('./routes/tianya/comments'));
router.get('/eleme/open/announce', require('./routes/eleme/open/announce'));
router.get('/eleme/open-be/announce', require('./routes/eleme/open-be/announce'));
+// 美团开放平台
+router.get('/meituan/open/announce', require('./routes/meituan/open/announce'));
+
// 微信开放社区
router.get('/wechat-open/community/:type', require('./routes/tencent/wechat/wechat-open/community/announce'));
// 微信支付 - 商户平台公告
@@ -2071,9 +2146,6 @@ router.get('/szse/rule', require('./routes/szse/rule'));
// 前端艺术家每日整理&&飞冰早报
router.get('/jskou/:type?', require('./routes/jskou/index'));
-// 前端
-router.get('/front-end-rss', require('./routes/frontend/index'));
-
// 国家应急广播
router.get('/cneb/yjxx', require('./routes/cneb/yjxx'));
router.get('/cneb/guoneinews', require('./routes/cneb/guoneinews'));
@@ -2108,9 +2180,6 @@ router.get('/sohu/mp/:id', require('./routes/sohu/mp'));
// 腾讯企鹅号
router.get('/tencent/news/author/:mid', require('./routes/tencent/news/author'));
-// 腾讯柠檬精选
-router.get('/tencent/lemon', require('./routes/tencent/lemon/index'));
-
// 奈菲影视
router.get('/nfmovies/:id?', require('./routes/nfmovies/index'));
@@ -2133,13 +2202,12 @@ router.get('/chuiniu/column_list', require('./routes/chuiniu/column_list'));
// leemeng
router.get('/leemeng', require('./routes/blogs/leemeng'));
-// 中国地质大学
-router.get('/cug/graduate', require('./routes/cug/graduate'));
-router.get('/cug/undergraduate', require('./routes/cug/undergraduate'));
-router.get('/cug/xgxy', require('./routes/cug/xgxy'));
-
-// 网易 - 网易号
-router.get('/netease/dy/:id', require('./routes/netease/dy'));
+// 中国地质大学(武汉)
+router.get('/cug/graduate', require('./routes/universities/cug/graduate'));
+router.get('/cug/undergraduate', require('./routes/universities/cug/undergraduate'));
+router.get('/cug/xgxy', require('./routes/universities/cug/xgxy'));
+router.get('/cug/news', require('./routes/universities/cug/news'));
+router.get('/cug/gcxy/:type?', require('./routes/universities/cug/gcxy/index'));
// 海猫吧
router.get('/haimaoba/:id?', require('./routes/haimaoba/comics'));
@@ -2395,6 +2463,9 @@ router.get('/yahoo-news/:region/:category?', require('./routes/yahoo-news/index'
// Yahoo!テレビ
router.get('/yahoo-jp-tv/:query', require('./routes/yahoo-jp-tv/index'));
+// Yahoo! by Author
+router.get('/yahoo-author/:author', require('./routes/yahoo-author/index'));
+
// 白鲸出海
router.get('/baijing', require('./routes/baijing'));
@@ -2489,9 +2560,6 @@ router.get('/mqube/top', require('./routes/mqube/top'));
router.get('/letterboxd/user/diary/:username', require('./routes/letterboxd/userdiary'));
router.get('/letterboxd/user/followingdiary/:username', require('./routes/letterboxd/followingdiary'));
-// 网易大神
-router.get('/netease/ds/:id', require('./routes/netease/ds'));
-
// javlibrary
router.get('/javlibrary/users/:uid/:utype', require('./routes/javlibrary/users'));
router.get('/javlibrary/videos/:vtype', require('./routes/javlibrary/videos'));
@@ -2510,10 +2578,6 @@ router.get('/piapro/public/:type/:tag?/:category?', require('./routes/piapro/pub
// 凤凰网
router.get('/ifeng/feng/:id/:type', require('./routes/ifeng/feng'));
-// 网易公开课
-router.get('/open163/vip', require('./routes/netease/open/vip'));
-router.get('/open163/latest', require('./routes/netease/open/latest'));
-
// 第一版主
router.get('/novel/d1bz/:category/:id', require('./routes/d1bz/novel'));
@@ -2680,6 +2744,7 @@ router.get('/eastmoney/user/:uid', require('./routes/eastmoney/user'));
// 紳士漫畫
router.get('/ssmh', require('./routes/ssmh'));
+router.get('/ssmh/category/:cid', require('./routes/ssmh/category'));
// 武昌首义学院
router.get('/wsyu/news/:type?', require('./routes/universities/wsyu/news'));
@@ -2739,7 +2804,7 @@ router.get('/acwifi', require('./routes/acwifi'));
router.get('/adnmb/:pid', require('./routes/adnmb/index'));
// MIT科技评论
-router.get('/mittrchina/article', require('./routes/mittrchina'));
+router.get('/mittrchina/:type', require('./routes/mittrchina'));
// 消费者报道
router.get('/ccreports/article', require('./routes/ccreports'));
@@ -2802,6 +2867,9 @@ router.get('/xposed/module/:mod', require('./routes/xposed/module'));
// Microsoft Edge
router.get('/edge/addon/:crxid', require('./routes/edge/addon'));
+// Microsoft Store
+router.get('/microsoft-store/updates/:productid/:market?', require('./routes/microsoft-store/updates'));
+
// 上海立信会计金融学院
router.get('/slu/tzgg/:id', require('./routes/universities/slu/tzgg'));
router.get('/slu/jwc/:id', require('./routes/universities/slu/jwc'));
@@ -2843,6 +2911,7 @@ router.get('/rf/article', require('./routes/rf/article'));
// University of Massachusetts Amherst
router.get('/umass/amherst/ecenews', require('./routes/umass/amherst/ecenews'));
+router.get('/umass/amherst/eceseminar', require('./routes/umass/amherst/eceseminar'));
router.get('/umass/amherst/csnews', require('./routes/umass/amherst/csnews'));
router.get('/umass/amherst/ipoevents', require('./routes/umass/amherst/ipoevents'));
router.get('/umass/amherst/ipostories', require('./routes/umass/amherst/ipostories'));
@@ -2870,9 +2939,6 @@ router.get('/jijitang/publication', require('./routes/jijitang/publication'));
// 新闻联播
router.get('/xwlb', require('./routes/xwlb/index'));
-// 网易新闻专栏
-router.get('/netease/news/special/:type?', require('./routes/netease/news/special'));
-
// 端传媒
router.get('/initium/:type?/:language?', require('./routes/initium/full'));
router.get('/theinitium/:model/:type?/:language?', require('./routes/initium/full'));
@@ -2884,7 +2950,7 @@ router.get('/grubstreet', require('./routes/grubstreet/index'));
router.get('/manhuadui/manhua/:name/:serial?', require('./routes/manhuadui/manhua'));
// 风之漫画
-router.get('/fzdm/manhua/:id', require('./routes/fzdm/manhua'));
+router.get('/fzdm/manhua/:id/:nums?', require('./routes/fzdm/manhua'));
// Aljazeera 半岛网
router.get('/aljazeera/news', require('./routes/aljazeera/news'));
@@ -2989,6 +3055,18 @@ router.get('/jike/user/:id', require('./routes/jike/user'));
// 网易新闻
router.get('/netease/news/rank/:category?/:type?/:time?', require('./routes/netease/news/rank'));
+router.get('/netease/news/special/:type?', require('./routes/netease/news/special'));
+
+// 网易 - 网易号
+router.get('/netease/dy/:id', require('./routes/netease/dy'));
+router.get('/netease/dy2/:id', require('./routes/netease/dy2'));
+
+// 网易大神
+router.get('/netease/ds/:id', require('./routes/netease/ds'));
+
+// 网易公开课
+router.get('/open163/vip', require('./routes/netease/open/vip'));
+router.get('/open163/latest', require('./routes/netease/open/latest'));
// Boston.com
router.get('/boston/:tag?', require('./routes/boston/index'));
@@ -3021,6 +3099,7 @@ router.get('/amazfitwatchfaces/top/:model/:type?/:time?/:sortBy?/:lang?', requir
router.get('/amazfitwatchfaces/search/:model/:keyword?/:sortBy?', require('./routes/amazfitwatchfaces/search'));
// 猫耳FM
+router.get('/missevan/drama/latest', require('./routes/missevan/latest'));
router.get('/missevan/drama/:id', require('./routes/missevan/drama'));
// Go语言爱好者周刊
@@ -3029,6 +3108,9 @@ router.get('/go-weekly', require('./routes/go-weekly'));
// popiask提问箱
router.get('/popiask/:sharecode/:pagesize?', require('./routes/popiask/questions'));
+// Tapechat提问箱
+router.get('/tapechat/questionbox/:sharecode/:pagesize?', require('./routes/popiask/tapechat_questions'));
+
// AMD
router.get('/amd/graphicsdrivers/:id/:rid?', require('./routes/amd/graphicsdrivers'));
@@ -3128,11 +3210,18 @@ router.get('/scut/scet/notice', require('./routes/universities/scut/scet/notice'
// OneJAV
router.get('/onejav/:type/:key?', require('./routes/onejav/one'));
+// 141jav
+router.get('/141jav/:type/:key?', require('./routes/141jav/141jav'));
+
+// 141ppv
+router.get('/141ppv/:type/:key?', require('./routes/141ppv/141ppv'));
+
// CuriousCat
router.get('/curiouscat/user/:id', require('./routes/curiouscat/user'));
// Telecompaper
-router.get('/telecompaper/news/:caty/:year?/:country?/:type?/:keyword?', require('./routes/telecompaper/news'));
+router.get('/telecompaper/news/:caty/:year?/:country?/:type?', require('./routes/telecompaper/news'));
+router.get('/telecompaper/search/:keyword?/:company?/:sort?/:period?', require('./routes/telecompaper/search'));
// 水木社区
router.get('/newsmth/account/:id', require('./routes/newsmth/account'));
@@ -3271,14 +3360,16 @@ router.get('/qzcea/:caty?', require('./routes/qzcea/index'));
router.get('/fulinian/:caty?', require('./routes/fulinian/index'));
// CGTN
+router.get('/cgtn/top', require('./routes/cgtn/top'));
router.get('/cgtn/most/:type?/:time?', require('./routes/cgtn/most'));
+router.get('/cgtn/pick', require('./routes/cgtn/pick'));
+
+router.get('/cgtn/opinions', require('./routes/cgtn/opinions'));
+
// AppSales
router.get('/appsales/:caty?/:time?', require('./routes/appsales/index'));
-// CGTN
-router.get('/cgtn/top', require('./routes/cgtn/top'));
-
// Academy of Management
router.get('/aom/journal/:id', require('./routes/aom/journal'));
@@ -3385,6 +3476,15 @@ router.get('/dev.to/top/:period', require('./routes/dev.to/top'));
router.get('/gameres/hot', require('./routes/gameres/hot'));
router.get('/gameres/list/:id', require('./routes/gameres/list'));
+// ManicTime
+router.get('/manictime/releases', require('./routes/manictime/releases'));
+
+// Deutsche Welle 德国之声
+router.get('/dw/:lang?/:caty?', require('./routes/dw/index'));
+
+// Amazon
+router.get('/amazon/ku/:type?', require('./routes/amazon/ku'));
+
// Citavi 中文网站论坛
router.get('/citavi/:caty?', require('./routes/citavi/index'));
@@ -3397,4 +3497,431 @@ router.get('/sagawa/:id', require('./routes/sagawa/index'));
// QNAP
router.get('/qnap/release-notes/:id', require('./routes/qnap/release-notes'));
+// Liquipedia
+router.get('/liquipedia/dota2/matches/:id', require('./routes/liquipedia/dota2_matches.js'));
+
+// 哈尔滨市科技局
+router.get('/gov/harbin/kjj', require('./routes/gov/harbin/kjj'));
+
+// WSJ
+router.get('/wsj/:lang/:category?', require('./routes/wsj/index'));
+
+// China File
+router.get('/chinafile/:category?', require('./routes/chinafile/index'));
+
+// 科技島讀
+router.get('/daodu/:caty?', require('./routes/daodu/index'));
+
+// CNTV
+router.get('/cntv/:column', require('./routes/cntv/cntv'));
+
+// Grand-Challenge
+router.get('/grandchallenge/user/:id', require('./routes/grandchallenge/user'));
+router.get('/grandchallenge/challenges', require('./routes/grandchallenge/challenges'));
+
+// 西北工业大学
+router.get('/nwpu/:column', require('./routes/nwpu/index'));
+
+// 美国联邦最高法院
+router.get('/us/supremecourt/argument_audio/:year?', require('./routes/us/supremecourt/argument_audio'));
+
+// 得到
+router.get('/dedao/list/:caty?', require('./routes/dedao/list'));
+router.get('/dedao/knowledge/:topic?/:type?', require('./routes/dedao/knowledge'));
+router.get('/dedao/:caty?', require('./routes/dedao/index'));
+
+// 未名新闻
+router.get('/mitbbs/:caty?', require('./routes/mitbbs/index'));
+
+// 8kcos
+router.get('/8kcos/', require('./routes/8kcos/latest'));
+router.get('/8kcos/cat/:cat*', require('./routes/8kcos/cat'));
+
+// 贾真的电商108将
+router.get('/jiazhen108', require('./routes/jiazhen108/index'));
+
+// Instagram
+router.get('/instagram/:category/:key', require('./routes/instagram/index'));
+
+// 优设网
+router.get('/uisdc/talk/:sort?', require('./routes/uisdc/talk'));
+router.get('/uisdc/hangye/:caty?', require('./routes/uisdc/hangye'));
+router.get('/uisdc/news', require('./routes/uisdc/news'));
+router.get('/uisdc/zt/:title?', require('./routes/uisdc/zt'));
+router.get('/uisdc/topic/:title?/:sort?', require('./routes/uisdc/topic'));
+
+// 中国劳工观察
+router.get('/chinalaborwatch/reports/:lang?/:industry?', require('./routes/chinalaborwatch/reports'));
+
+// Phoronix
+router.get('/phoronix/:page/:queryOrItem?', require('./routes/phoronix/index'));
+
+// 美国中央情报局
+router.get('/cia/foia-annual-report', require('./routes/us/cia/foia-annual-report'));
+
+// Everything
+router.get('/everything/changes', require('./routes/everything/changes'));
+
+// 中国劳工通讯
+router.get('/clb/commentary/:lang?', require('./routes/clb/commentary'));
+
+// 国际教育研究所
+router.get('/iie/blog', require('./routes/iie/blog'));
+
+// McKinsey Greater China
+router.get('/mckinsey/:category?', require('./routes/mckinsey/index'));
+
+// 超理论坛
+router.get('/chaoli/:channel?', require('./routes/chaoli/index'));
+
+// Polar
+router.get('/polar/blog', require('./routes/polar/blog'));
+
+// XYplorer
+router.get('/xyplorer/whatsnew', require('./routes/xyplorer/whatsnew'));
+
+// RescueTime
+router.get('/rescuetime/release-notes/:os?', require('./routes/rescuetime/release-notes'));
+
+// Total Commander
+router.get('/totalcommander/whatsnew', require('./routes/totalcommander/whatsnew'));
+
+// Blizzard
+router.get('/blizzard/news/:language?/:category?', require('./routes/blizzard/news'));
+
+// DeepMind
+router.get('/deepmind/blog/:category?', require('./routes/deepmind/blog'));
+
+// 东西智库
+router.get('/dx2025/:type?/:category?', require('./routes/dx2025/index'));
+
+// DeepL
+router.get('/deepl/blog/:lang?', require('./routes/deepl/blog'));
+
+// OpenAI
+router.get('/openai/blog/:tag?', require('./routes/openai/blog'));
+
+// 小木虫
+router.get('/muchong/journal/:type?', require('./routes/muchong/journal'));
+router.get('/muchong/:id/:type?/:sort?', require('./routes/muchong/index'));
+
+// 求是网
+router.get('/qstheory/:category?', require('./routes/qstheory/index'));
+
+// 生命时报
+router.get('/lifetimes/:category?', require('./routes/lifetimes/index'));
+
+// MakeUseOf
+router.get('/makeuseof/:category?', require('./routes/makeuseof/index'));
+
+// 瞬Matataki
+// 热门作品
+router.get('/matataki/posts/hot/:ipfsFlag?', require('./routes/matataki/site/posts/scoreranking'));
+// 最新作品
+router.get('/matataki/posts/latest/:ipfsFlag?', require('./routes/matataki/site/posts/timeranking'));
+// 作者创作
+router.get('/matataki/users/:authorId/posts/:ipfsFlag?', require('./routes/matataki/site/posts/author'));
+// Fan票关联作品
+router.get('/matataki/tokens/:id/posts/:filterCode/:ipfsFlag?', require('./routes/matataki/site/posts/token'));
+// 标签关联作品
+router.get('/matataki/tags/:tagId/:tagName/posts/:ipfsFlag?', require('./routes/matataki/site/posts/tag'));
+// 收藏夹
+router.get('/matataki/users/:userId/favorites/:favoriteListId/posts/:ipfsFlag?', require('./routes/matataki/site/posts/favorite'));
+
+// SoBooks
+router.get('/sobooks/tag/:id?', require('./routes/sobooks/tag'));
+router.get('/sobooks/date/:date?', require('./routes/sobooks/date'));
+router.get('/sobooks/:category?', require('./routes/sobooks/index'));
+
+// Zhimap 知识导图社区
+router.get('/zhimap/:categoryUuid?/:recommend?', require('./routes/zhimap/index'));
+
+// Fantia
+router.get('/fantia/search/:type?/:caty?/:peroid?/:order?/:rating?/:keyword?', require('./routes/fantia/search'));
+router.get('/fantia/user/:id', require('./routes/fantia/user'));
+
+// i-Cable
+router.get('/icable/:category/:option?', require('./routes/icable/category'));
+
+// ProcessOn
+router.get('/processon/popular/:cate?/:sort?', require('./routes/processon/popular'));
+
+// Mathpix
+router.get('/mathpix/blog', require('./routes/mathpix/blog'));
+
+// OneNote Gem Add-Ins
+router.get('/onenotegem/release', require('./routes/onenotegem/release'));
+
+// Mind42
+router.get('/mind42/tag/:id', require('./routes/mind42/tag'));
+router.get('/mind42/search/:keyword', require('./routes/mind42/search'));
+router.get('/mind42/:caty?', require('./routes/mind42/index'));
+
+// 幕布网
+router.get('/mubu/explore/:tagId/:title?', require('./routes/mubu/explore'));
+
+// Esquirehk
+router.get('/esquirehk/tag/:id', require('./routes/esquirehk/tag'));
+
+// 国家普通话测试 杭州市
+router.get('/putonghua', require('./routes/putonghua/hangzhou'));
+
+// 有道云笔记
+router.get('/youdao/xueba', require('./routes/youdao/xueba'));
+router.get('/youdao/latest', require('./routes/youdao/latest'));
+
+// 印象识堂
+router.get('/yinxiang/note', require('./routes/yinxiang/note'));
+router.get('/yinxiang/tag/:id', require('./routes/yinxiang/tag'));
+router.get('/yinxiang/card/:id', require('./routes/yinxiang/card'));
+router.get('/yinxiang/personal/:id', require('./routes/yinxiang/personal'));
+router.get('/yinxiang/category/:id', require('./routes/yinxiang/category'));
+
+// 晚点LatePost
+router.get('/latepost/:proma?', require('./routes/latepost/index'));
+
+// 西瓜视频
+router.get('/ixigua/user/video/:uid/:disableEmbed?', require('./routes/ixigua/userVideo'));
+
+// 遠見 gvm.com.tw
+router.get('/gvm/index/:category?', require('./routes/gvm/index'));
+
+// 触乐
+router.get('/chuapp/index/:category?', require('./routes/chuapp/index'));
+
+// Deloitte
+router.get('/deloitte/industries/:category?', require('./routes/deloitte/industries'));
+
+// 特斯拉系统更新
+router.get('/tesla', require('./routes/tesla/update'));
+
+// 复旦大学继续教育学院
+router.get('/fudan/cce', require('./routes/universities/fudan/cce'));
+
+// LowEndTalk
+router.get('/lowendtalk/discussion/:id?', require('./routes/lowendtalk/discussion'));
+
+// 无产者评论
+router.get('/proletar/:type?/:id?', require('./routes/proletar/index'));
+
+// QTTabBar
+router.get('/qttabbar/change-log', require('./routes/qttabbar/change-log'));
+
+// 酷18
+router.get('/cool18/:id?/:type?/:keyword?', require('./routes/cool18/index'));
+
+// 美国贸易代表办公室
+router.get('/ustr/press-releases/:year?/:month?', require('./routes/us/ustr/press-releases'));
+
+// 游戏动力
+router.get('/vgn/:platform?', require('./routes/vgn/index'));
+
+// 国际能源署
+router.get('/iea/:category?', require('./routes/iea/index'));
+
+// 中国计算机学会
+router.get('/ccf/news/:category?', require('./routes/ccf/news'));
+
+// The Brain
+router.get('/thebrain/:category?', require('./routes/thebrain/blog'));
+
+// 美国财政部
+router.get('/treasury/press-releases/:category?/:title?', require('./routes/us/treasury/press-releases'));
+
+// Bandisoft
+router.get('/bandisoft/:id?/:lang?', require('./routes/bandisoft/index'));
+
+// MarginNote
+router.get('/marginnote/tag/:id?', require('./routes/marginnote/tag'));
+
+// ASML
+router.get('/asml/press-releases', require('./routes/asml/press-releases'));
+
+// 中国机械工程学会
+router.get('/cmes/news/:category?', require('./routes/cmes/news'));
+
+// Craigslist
+router.get('/craigslist/:location/:type', require('./routes/craigslist/search'));
+
+// 有趣天文奇观
+router.get('/interesting-sky/astronomical_events/:year?', require('./routes/interesting-sky/astronomical_events'));
+router.get('/interesting-sky/recent-interesting', require('./routes/interesting-sky/recent-interesting'));
+router.get('/interesting-sky', require('./routes/interesting-sky/index'));
+
+// 国际数学联合会
+router.get('/mathunion/fields-medal', require('./routes/mathunion/fields-medal'));
+
+// ACM
+router.get('/acm/amturingaward', require('./routes/acm/amturingaward'));
+
+// 網路天文館
+router.get('/tam/forecast', require('./routes/tam/forecast'));
+
+// Day One
+router.get('/dayone/blog', require('./routes/dayone/blog'));
+
+// 滴答清单
+router.get('/dida365/habit/checkins', require('./routes/dida365/habit-checkins'));
+
+// Ditto clipboard manager
+router.get('/ditto/changes/:type?', require('./routes/ditto/changes'));
+
+// iDaily 每日环球视野
+router.get('/idaily/today', require('./routes/idaily/index'));
+
+// 北屋
+router.get('/northhouse/:category?', require('./routes/northhouse/index'));
+
+// Oak Ridge National Laboratory
+router.get('/ornl/news', require('./routes/ornl/news'));
+
+// 信阳师范学院 自考办
+router.get('/xynu/zkb/:category', require('./routes/universities/xynu/zkb'));
+
+// Bell Labs
+router.get('/bell-labs/events-news/:category?', require('./routes/bell-labs/events-news.js'));
+
+// 中国科学院青年创新促进会
+router.get('/yicas/blog', require('./routes/yicas/blog'));
+
+// 九三学社
+router.get('/93/:category?', require('./routes/93/index'));
+
+// 科学网
+router.get('/sciencenet/blog/:type?/:time?/:sort?', require('./routes/sciencenet/blog'));
+
+// DailyArt
+router.get('/dailyart/:language?', require('./routes/dailyart/index'));
+
+// SCBOY
+router.get('/scboy/thread/:tid', require('./routes/scboy/thread'));
+
+// 猿料
+router.get('/yuanliao/:tag?/:sort?', require('./routes/yuanliao/index'));
+
+// 中国政协网
+router.get('/cppcc/:slug?', require('./routes/gov/cppcc/index'));
+
+// National Association of Colleges and Employers
+router.get('/nace/blog/:sort?', require('./routes/nace/blog'));
+
+// Caixin Latest
+router.get('/caixin/latest', require('./routes/caixin/latest'));
+
+// Semiconductor Industry Association
+router.get('/semiconductors/latest-news', require('./routes/semiconductors/latest-news'));
+
+// VOA News
+router.get('/voa/day-photos', require('./routes/voa/day-photos'));
+
+// Voice of America
+router.get('/voa/:language/:channel?', require('./routes/voa/index'));
+
+// 留园网
+router.get('/6park/:id?/:type?/:keyword?', require('./routes/6park/index'));
+
+// 哔嘀影视
+router.get('/bde4/:type?/:caty?/:area?/:year?/:order?', require('./routes/bde4/index'));
+
+// 上海证券交易所
+router.get('/sse/sserules/:slug?', require('./routes/sse/sserules'));
+
+// 游戏葡萄
+router.get('/gamegrape/:id?', require('./routes/gamegrape/index'));
+
+// 阳光高考
+router.get('/chsi/zszcgd/:category?', require('./routes/chsi/zszcgd'));
+
+// 眾新聞
+router.get('/hkcnews/news/:category?', require('./routes/hkcnews/news'));
+
+// AnyTXT
+router.get('/anytxt/release-notes', require('./routes/anytxt/release-notes'));
+
+// 鱼塘热榜
+router.get('/mofish/:id', require('./routes/mofish/index'));
+
+// Mcdonalds
+router.get('/mcdonalds/:category', require('./routes/mcdonalds/news'));
+
+// Pincong 品葱
+router.get('/pincong/category/:category?/:sort?', require('./routes/pincong/index'));
+router.get('/pincong/hot/:category?', require('./routes/pincong/hot'));
+router.get('/pincong/topic/:topic', require('./routes/pincong/topic'));
+
+// GoComics
+router.get('/gocomics/:name', require('./routes/gocomics/index'));
+
+// Comics Kingdom
+router.get('/comicskingdom/:name', require('./routes/comicskingdom/index'));
+
+// Media Digest
+router.get('/mediadigest/:range/:category?', require('./routes/mediadigest/category'));
+
+// 中国农工民主党
+router.get('/ngd/:slug?', require('./routes/gov/ngd/index'));
+
+// SimpRead-消息通知
+router.get('/simpread/notice', require('./routes/simpread/notice'));
+// SimpRead-更新日志
+router.get('/simpread/changelog', require('./routes/simpread/changelog'));
+
+// Radio Free Asia
+router.get('/rfa/:language?/:channel?/:subChannel?', require('./routes/rfa/index'));
+
+// booth.pm
+router.get('/booth.pm/shop/:subdomain', require('./routes/booth-pm/shop'));
+
+// Minecraft feed the beast
+router.get('/feed-the-beast/modpack/:modpackEntry', require('./routes/feed-the-beast/modpack'));
+
+// Gab
+router.get('/gab/user/:username', require('./routes/gab/user'));
+router.get('/gab/popular/:sort?', require('./routes/gab/explore'));
+
+// NEW字幕组
+router.get('/newzmz/:category?', require('./routes/newzmz/index'));
+
+// Phrack Magazine
+router.get('/phrack', require('./routes/phrack/index'));
+
+// 通識·現代中國
+router.get('/chiculture/topic/:category?', require('./routes/chiculture/topic'));
+
+// CQUT News
+router.get('/cqut/news', require('./routes/universities/cqut/cqut-news'));
+router.get('/cqut/libnews', require('./routes/universities/cqut/cqut-libnews'));
+
+// 城农 Growin' City
+router.get('/growincity/news/:id?', require('./routes/growincity/news'));
+
+// Thrillist
+router.get('/thrillist/:tag?', require('./routes/thrillist/index'));
+
+// 丁香园
+router.get('/dxy/vaccine/:province?/:city?/:location?', require('./routes/dxy/vaccine'));
+
+// Wtu
+router.get('/wtu/:type', require('./routes/universities/wtu'));
+
+// 中国庭审公开网
+router.get('/tingshen', require('./routes/tingshen/tingshen'));
+
+// 中华人民共和国人力资源和社会保障部
+router.get('/gov/mohrss/sbjm/:category?', require('./routes/gov/mohrss/sbjm'));
+
+// 深影译站
+router.get('/shinybbs/:id?', require('./routes/shinybbs/index'));
+router.get('/shinybbs/latest', require('./routes/shinybbs/latest'));
+
+// 天眼查
+router.get('/tianyancha/hot', require('./routes/tianyancha/hot'));
+
+// King Arthur
+router.get('/kingarthur/:type', require('./routes/kingarthur/index'));
+
+// av01
+router.get('/av01/actor/:name/:type?', require('./routes/av01/actor'));
+router.get('/av01/tag/:name/:type?', require('./routes/av01/tag'));
+
module.exports = router;
diff --git a/lib/routes/141jav/141jav.js b/lib/routes/141jav/141jav.js
new file mode 100644
index 0000000000..440f34f1b7
--- /dev/null
+++ b/lib/routes/141jav/141jav.js
@@ -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: `
Time: ${item.find('p.subtitle.is-6 > a').text()}
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(),
+ };
+};
diff --git a/lib/routes/141ppv/141ppv.js b/lib/routes/141ppv/141ppv.js
new file mode 100644
index 0000000000..ec3d8e63d2
--- /dev/null
+++ b/lib/routes/141ppv/141ppv.js
@@ -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: `
Time: ${item.find('p.subtitle.is-6 > a').text()}
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(),
+ };
+};
diff --git a/lib/routes/1point3acres/blog.js b/lib/routes/1point3acres/blog.js
new file mode 100644
index 0000000000..b1cea5d137
--- /dev/null
+++ b/lib/routes/1point3acres/blog.js
@@ -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,
+ };
+};
diff --git a/lib/routes/1point3acres/post.js b/lib/routes/1point3acres/post.js
index a5009b3f73..bb818467ae 100644
--- a/lib/routes/1point3acres/post.js
+++ b/lib/routes/1point3acres/post.js
@@ -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,// + `楼主:` + item.author,
- description: description,
- // pubDate: new Date(item.submittime + ' GMT+8').toUTCString(),
+ description: `${item.summary}...
作者 ${item.author} · 回复 ${item.replies} · 查看 ${item.views}`,
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)}
作者 ${item.author} · 回复 ${item.replies} · 查看 ${item.views}`;
+ });
+ } catch (error) {
+ // nothing
+ }
+ return result;
+ })
+ );
+ ctx.state.data = {
+ title: `一亩三分地 - ${title}`,
+ link: `https://www.1point3acres.com/bbs/`,
+ item: items,
};
};
diff --git a/lib/routes/60s-science/transcript.js b/lib/routes/60s-science/transcript.js
index 4e16ef68f6..5c9f146ef1 100644
--- a/lib/routes/60s-science/transcript.js
+++ b/lib/routes/60s-science/transcript.js
@@ -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() + '
';
- const contents = intro + capture('.transcript__inner').html();
+ const contents =
+ intro +
+ capture('.transcript__inner')
+ .html()
+ .replace(/\[?\(?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,
};
diff --git a/lib/routes/6park/index.js b/lib/routes/6park/index.js
new file mode 100644
index 0000000000..4334646419
--- /dev/null
+++ b/lib/routes/6park/index.js
@@ -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(/6park.com<\/font>/g, '');
+
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: $('title').text(),
+ link: currentUrl,
+ item: items,
+ };
+};
diff --git a/lib/routes/8kcos/article.js b/lib/routes/8kcos/article.js
new file mode 100644
index 0000000000..5ddbfe7a10
--- /dev/null
+++ b/lib/routes/8kcos/article.js
@@ -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;
diff --git a/lib/routes/8kcos/cat.js b/lib/routes/8kcos/cat.js
new file mode 100644
index 0000000000..a5038a1933
--- /dev/null
+++ b/lib/routes/8kcos/cat.js
@@ -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: '获取失败' }],
+ };
+};
diff --git a/lib/routes/8kcos/const.js b/lib/routes/8kcos/const.js
new file mode 100644
index 0000000000..78a66d65b7
--- /dev/null
+++ b/lib/routes/8kcos/const.js
@@ -0,0 +1,4 @@
+module.exports = {
+ SUB_NAME_PREFIX: '8KCosplay',
+ SUB_URL: 'https://www.8kcosplay.com/',
+};
diff --git a/lib/routes/8kcos/latest.js b/lib/routes/8kcos/latest.js
new file mode 100644
index 0000000000..367ed4b21c
--- /dev/null
+++ b/lib/routes/8kcos/latest.js
@@ -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: '获取失败!',
+ },
+ ],
+ };
+};
diff --git a/lib/routes/93/index.js b/lib/routes/93/index.js
new file mode 100644
index 0000000000..d317f9c0bf
--- /dev/null
+++ b/lib/routes/93/index.js
@@ -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,
+ };
+};
diff --git a/lib/routes/acm/amturingaward.js b/lib/routes/acm/amturingaward.js
new file mode 100644
index 0000000000..297ea02988
--- /dev/null
+++ b/lib/routes/acm/amturingaward.js
@@ -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,
+ };
+};
diff --git a/lib/routes/aeon/category.js b/lib/routes/aeon/category.js
index 7bcf506d32..256224affb 100644
--- a/lib/routes/aeon/category.js
+++ b/lib/routes/aeon/category.js
@@ -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 = `
` + author.trim() + ' ' + capture(authorInfo).html().trim() + `
`;
+ bio = `
` + author.trim() + ' ' + capture(authorInfo).html().trim() + `
`;
capture('.article__inline-sidebar').remove();
} else {
bio = '';
diff --git a/lib/routes/allnow/column.js b/lib/routes/allnow/column.js
index 88d5a2c0ba..c03a0c9f38 100644
--- a/lib/routes/allnow/column.js
+++ b/lib/routes/allnow/column.js
@@ -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;
})
diff --git a/lib/routes/amazon/ku.js b/lib/routes/amazon/ku.js
new file mode 100644
index 0000000000..d75a0cd63a
--- /dev/null
+++ b/lib/routes/amazon/ku.js
@@ -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 docs');
+ }
+
+ 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,
+ };
+};
diff --git a/lib/routes/anytxt/release-notes.js b/lib/routes/anytxt/release-notes.js
new file mode 100644
index 0000000000..da2ea9dcbe
--- /dev/null
+++ b/lib/routes/anytxt/release-notes.js
@@ -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: `${item.next().html()}
`,
+ };
+ })
+ .get();
+
+ ctx.state.data = {
+ title: 'Release Notes - AnyTXT',
+ link: currentUrl,
+ item: items,
+ };
+};
diff --git a/lib/routes/aozora/newbook.js b/lib/routes/aozora/newbook.js
index 4c5a3de34f..92bd1f16af 100644
--- a/lib/routes/aozora/newbook.js
+++ b/lib/routes/aozora/newbook.js
@@ -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();
}
diff --git a/lib/routes/apple/appstore/in-app-purchase.js b/lib/routes/apple/appstore/in-app-purchase.js
index 793aef4445..1fdb885a8f 100644
--- a/lib/routes/apple/appstore/in-app-purchase.js
+++ b/lib/routes/apple/appstore/in-app-purchase.js
@@ -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,
},
diff --git a/lib/routes/asml/press-releases.js b/lib/routes/asml/press-releases.js
new file mode 100644
index 0000000000..07f13d54db
--- /dev/null
+++ b/lib/routes/asml/press-releases.js
@@ -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(//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,
+ };
+};
diff --git a/lib/routes/av01/actor.js b/lib/routes/av01/actor.js
new file mode 100644
index 0000000000..d28dc6d036
--- /dev/null
+++ b/lib/routes/av01/actor.js
@@ -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()}
`,
+ link: `https://www.av01.tv/${item.find('a').attr('href')}`,
+ };
+ })
+ .get(),
+ };
+};
diff --git a/lib/routes/av01/tag.js b/lib/routes/av01/tag.js
new file mode 100644
index 0000000000..623550c0b4
--- /dev/null
+++ b/lib/routes/av01/tag.js
@@ -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()}
`,
+ link: `https://www.av01.tv/${item.find('a').attr('href')}`,
+ };
+ })
+ .get(),
+ };
+};
diff --git a/lib/routes/baijing/index.js b/lib/routes/baijing/index.js
index c14bf1e1b5..313ac611c8 100644
--- a/lib/routes/baijing/index.js
+++ b/lib/routes/baijing/index.js
@@ -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 = `
`;
+ const single = {
+ title,
+ link,
+ pubDate,
+ author,
+ description,
};
- }
+
+ return single;
+ });
+
+ ctx.state.data = {
+ title: `白鲸出海`,
+ desription: '白鲸出海 - 泛互联网出海服务平台',
+ item: output,
+ };
};
diff --git a/lib/routes/bandisoft/index.js b/lib/routes/bandisoft/index.js
new file mode 100644
index 0000000000..7ce535e3a9
--- /dev/null
+++ b/lib/routes/bandisoft/index.js
@@ -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,
+ };
+};
diff --git a/lib/routes/banyuetan/byt.js b/lib/routes/banyuetan/byt.js
new file mode 100644
index 0000000000..4c9efd7f14
--- /dev/null
+++ b/lib/routes/banyuetan/byt.js
@@ -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,
+ };
+};
diff --git a/lib/routes/bbc/index.js b/lib/routes/bbc/index.js
index 6926b45bc5..b65377a1dc 100644
--- a/lib/routes/bbc/index.js
+++ b/lib/routes/bbc/index.js
@@ -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 = {
diff --git a/lib/routes/bbc/utils.js b/lib/routes/bbc/utils.js
index 8d472fc73c..f1a621fe1a 100644
--- a/lib/routes/bbc/utils.js
+++ b/lib/routes/bbc/utils.js
@@ -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