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: image: 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' healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:1200/healthz'] interval: 30s timeout: 10s retries: 3 depends_on: - redis - browserless
browserless: image: browserless/chrome restart: always ulimits: core: hard: 0 soft: 0 healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:3000/pressure'] interval: 30s timeout: 10s retries: 3
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: image: diygod/rsshub:chromium-bundled 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
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 CACHE_CONTENT_EXPIRE: 7200
|
2.3.3 抓取健壮性
1 2 3
| REQUEST_RETRY: 3 REQUEST_TIMEOUT: 10000 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'
|
YouTube(订阅频道必备)
X
Cookies 里的 auth_toekn ,一年有效期。
Bilibili(动态、追番等需要登录态的路由)
1
| BILIBILI_COOKIE_你的UID=SESSDATA=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
|
- 配完后订阅 URL 末尾加
?chatgpt=true 才会启用。
2.4 部署
快速的提取 rss 链接。
仓库
Chrome插件
Edge插件
多个设备的的 RSS 自然也需要同步
那必然得放到服务器上,同类产品有不少。这是直接 docker compose 部署 FreshRSS
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
|
一键启动