rsshub 可以把不支持 RSS 的一些网站映射成 RSS 格式,方便统一的订阅,本质上是 nodejs 的爬虫。

一、官网

官方网站

官方文档

仓库地址

二、部署

docker-compose 部署.

2.1 官网版本

官网版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
services:
rsshub:
# two ways to enable Playwright:
# 启用 Playwright 的两种方法:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# 注释掉标记的行,然后使用此镜像:diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
# (占用更多磁盘空间和内存)保持所有设置不变
image: diygod/rsshub # or ghcr.io/diygod/rsshub
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PLAYWRIGHT_WS_ENDPOINT: 'ws://browserless:3000' # marked
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:1200/healthz']
interval: 30s
timeout: 10s
retries: 3
depends_on:
- redis
- browserless # marked

browserless: # marked
image: browserless/chrome # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked
healthcheck: # marked
test: ['CMD', 'curl', '-f', 'http://localhost:3000/pressure'] # marked
interval: 30s # marked
timeout: 10s # marked
retries: 3 # marked

redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 30s
timeout: 10s
retries: 5
start_period: 5s

volumes:
redis-data:

2.2 真实浏览器版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
services:
rsshub:
# two ways to enable Playwright:
# 启用 Playwright 的两种方法:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# 注释掉标记的行,然后使用此镜像:diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
# (占用更多磁盘空间和内存)保持所有设置不变
image: diygod/rsshub:chromium-bundled # or ghcr.io/diygod/rsshub
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:1200/healthz']
interval: 30s
timeout: 10s
retries: 3
depends_on:
- redis

redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 30s
timeout: 10s
retries: 5
start_period: 5s

volumes:
redis-data:

2.3 环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ACCESS_KEY=换成你自己生成的长随机串_至少32
CACHE_EXPIRE=900
CACHE_CONTENT_EXPIRE=7200
REQUEST_RETRY=3
REQUEST_TIMEOUT=10000
TITLE_LENGTH_LIMIT=255
GITHUB_ACCESS_TOKEN=ghp_xxxxxxxxxxxxxxxx
TWITTER_AUTH_TOKEN=xxxxxxxxxxxxx
YOUTUBE_KEY=
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_ENDPOINT=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
OPENAI_TEMPERATURE=0.2
# OPENAI_PROMPT=你也可以自定义 prompt,比如要求中文输出
ZHIHU_COOKIES=
HOTLINK_TEMPLATE=https://cf-img-proxy.bravexist.cn/?url=$${href_ue}
HOTLINK_INCLUDE_PATHS=/weibo,/zhihu,/bilibili,/xiaohongshu,/douyin,/wechat,/twitter,/instagram,/pixiv,/telegram

批量注入

1
2
3
4
5
6
7
8
services:
rsshub:
image: diygod/rsshub
env_file:
- .env
environment:
# 这里只放需要覆盖或硬编码的
PLAYWRIGHT_WS_ENDPOINT: ws://browserless:3000

2.3.1 访问控制

  • ACCESS_KEY: 访问密钥,用于直接访问所有路由或者生成访问码

访问码为 访问密钥 + 路由 共同生成的 md5,例如:

访问密钥 路由 生成过程 访问码
ILoveRSSHub /qdaily/column/59 md5(‘/qdaily/column/59’ + ‘ILoveRSSHub’) 0f820530128805ffc10351f22b5fd121
  • 此时可以通过 code 访问路由,例如:https://rsshub.app/qdaily/column/59?code=0f820530128805ffc10351f22b5fd121
  • 或使用访问密钥 key 直接访问所有路由,例如:https://rsshub.app/qdaily/column/59?key=ILoveRSSHub

当启用 ACCESS_KEY 时,healthcheck 端点也需要进行身份验证。

1
2
3
healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
+ test: ["CMD", "curl", "-f", "http://localhost:1200/healthz?key=${ACCESS_KEY}"]

2.3.2 缓存调优

默认 5 分钟路由缓存有点短,自用可以拉长省点 CPU 和被封风险:

1
2
CACHE_EXPIRE: 900           # 路由缓存 15 分钟
CACHE_CONTENT_EXPIRE: 7200 # 内容缓存 2 小时

2.3.3 抓取健壮性

1
2
3
REQUEST_RETRY: 3
REQUEST_TIMEOUT: 10000 # 默认 3000ms 经常超时,特别是走代理时
TITLE_LENGTH_LIMIT: 255

2.3.4 图片代理(处理防盗链)

1
2
HOTLINK_TEMPLATE=https://cf-img-proxy.bravexist.cn/?url=$${href_ue}
HOTLINK_INCLUDE_PATHS=/weibo,/zhihu,/bilibili,/xiaohongshu,/douyin,/wechat,/twitter,/instagram,/pixiv,/telegram

注意:要使用两个 $,否则无法成功替换图片 url。

2.3.5 平台专属配置

GitHub(强烈推荐,匿名很容易触发 rate limit)

1
GITHUB_ACCESS_TOKEN: 'ghp_xxx'   # https://github.com/settings/tokens,只勾 public_repo 就够

YouTube(订阅频道必备)

1
YOUTUBE_KEY: 'xxx'   # https://console.cloud.google.com/apis/dashboard?pli=1

X

1
TWITTER_AUTH_TOKEN=xxxx
  • Cookies 里的 auth_toekn ,一年有效期。

Bilibili(动态、追番等需要登录态的路由)

1
BILIBILI_COOKIE_你的UID=SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx; ...

知乎

1
ZHIHU_COOKIES=z_c0=xxx; d_c0=xxx; ...

小红书

1
XIAOHONGSHU_COOKIE=从 xiaohongshu.com 复制的整段 cookie

OpenAI 摘要(可选,给文章加 AI 总结)

1
2
3
4
5
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_ENDPOINT=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
OPENAI_TEMPERATURE=0.2
# OPENAI_PROMPT=你是一个 RSS 文章摘要助手。请用中文(即使原文是英文、日文或其他语言)对文章做简明摘要。严格按以下格式输出,不要添加任何额外说明:📌 一句话:<不超过50字,概括全文核心>。🔑 要点:- <30字以内,关键信息1>- <30字以内,关键信息2>- <30字以内,关键信息3>。规则:要点 3-5 条按重要性排序;包含具体数据、观点、结论或行动建议;不复述标题;不写"本文""作者认为"等冗余表述;严禁编造原文没有的内容;总长度不超过 200 字。
  • 配完后订阅 URL 末尾加 ?chatgpt=true 才会启用。

2.4 部署

1
docker compose up -d

三、RSSHub Radar

快速的提取 rss 链接。

仓库

Chrome插件

Edge插件

四、freshrss

多个设备的的 RSS 自然也需要同步

那必然得放到服务器上,同类产品有不少。这是直接 docker compose 部署 FreshRSS

1
vim docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
version: '3'

services:
freshrss-db:
image: mysql:8.0
container_name: freshrss-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: freshrss
MYSQL_USER: freshrss
MYSQL_PASSWORD: freshrss123
volumes:
- ./mysql-data:/var/lib/mysql
networks:
- freshrss-network
command: --default-authentication-plugin=mysql_native_password

freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
ports:
- "3089:80"
environment:
CRON_MIN: '*/15'
TZ: Asia/Singapore
volumes:
- ./freshrss-data:/var/www/FreshRSS/data
- ./freshrss-extensions:/var/www/FreshRSS/extensions
networks:
- freshrss-network
depends_on:
- freshrss-db

networks:
freshrss-network:
driver: bridge

一键启动

1
docker compose up -d

五、常见RSS订阅