WeWe RSS:把公众号变成 RSS 订阅源,5 分钟私有部署全记录
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
想让几十个个公众号的推送在一处统一管理,WeWe RSS 是个方案:它基于微信读书把公众号文章转成标准 RSS 源,整套服务跑在你自己的服务器上。
快速跑起来
用 Docker Compose 一键部署
仓库自带的 docker-compose.yml 已经把 MySQL 8 和 wewe-rss 镜像编排好,只需改两处密码:db 段的 MYSQL_ROOT_PASSWORD,app 段的 DATABASE_URL 和 AUTH_CODE,改成你自己的值。
MYSQL_ROOT_PASSWORD: 你自己的密码 - DATABASE_URL=mysql://root:你自己的密码@db:3306/wewe-rss?schema=public&connect_timeout=30&pool_timeout=30&socket_timeout=30 - AUTH_CODE=你的授权码然后执行:
git clone https://gitcode.com/GitHub_Trending/we/wewe-rss cd wewe-rss docker-compose up -d等两到三分钟,两个容器都 Up 之后数据库就建好了,表结构首次启动自动初始化,全程不用手工建库。端口不通?先检查 4000 是否被占用,或者防火墙没放行。
验证服务是否就绪
浏览器打开 http://localhost:4000 ,出现 WeWe RSS 管理界面,顶部有"公众号源"和"账号管理"两个页签,说明服务已经起来了。
命令行验证更直接,/feeds 路径不需要 AUTH_CODE 校验:
curl -i http://localhost:4000/feeds/all.atom返回 HTTP 200 和一份标准 Atom 文档即可。此时还没订阅任何源,feed 是空的,属于正常状态。
核心场景拆解
绑定微信读书账号:一次扫码完成订阅前提
wewe-rss 通过微信读书接口拿公众号内容,所以第一步是登录一个微信读书账号。进入"账号管理"页签,点"添加读书账号",用手机微信扫码授权,列表里出现状态为"启用"的记录就成功了。授权信息存在你自己的服务器上,只用于拉取公众号内容。
⚠️ 关键细节:登录时千万不要勾选"24小时后自动退出"。勾了的话登录态 24 小时后失效,账号直接变"失效",只能重新扫码。
24 小时后账号又失效了?大概率就是登录时碰了这个自动退出选项。
添加公众号源:粘贴文章链接拉取历史文章
账号绑定后切到"公众号源"页签,点左上角"添加",把该公众号任意一篇文章的分享链接(mp.weixin.qq.com 开头)粘进去确定。系统会自动识别公众号 ID,回抓历史文章,并生成一条带独立 RSS 地址的订阅记录,左侧列表即可看到文章标题流。
提示:批量添加多个公众号时,每个间隔几分钟再操作。添加频率过高会触发封控,账号进小黑屋要等 24 小时才恢复。
配置标题过滤与订阅策略
每个源生成后的订阅地址形如:
- 单个公众号:http://localhost:4000/feeds/{公众号ID}.rss
- 全部聚合:http://localhost:4000/feeds/all.rss
把后缀换成 .atom 或 .json,分别得到 Atom 和 JSON Feed 格式。两个查询参数让订阅策略变得很细:
curl "http://localhost:4000/feeds/all.atom?title_include=AI|机器学习" curl "http://localhost:4000/feeds/all.json?title_exclude=招聘|广告&limit=20&page=1"title_include 命中即保留,竖线内是"或"的关系;title_exclude 命中即剔除,两个参数可以组合。把过滤后的地址丢进 Feedly、Inoreader、Reeder 等阅读器,"只看 AI 不看招聘"就成了稳定信息流。all 聚合地址适合阅读器里一条入口搞定,单源地址适合按公众号精细分组。如果你的阅读器支持 OPML,还能在管理界面把所有订阅源一次性导出迁移。
定时更新与手动触发
服务默认每天 5:35 和 17:35 各更新一次全部订阅源,对应 Cron 表达式 35 5,17 * * *,通过 CRON_EXPRESSION 环境变量可改成任意节奏,比如 0 */4 * * * 表示每 4 小时。发现某个源更新不及时时,手动触发一条:
curl "http://localhost:4000/feeds/{公众号ID}.rss?update=true"如果服务部署在公网,务必把 SERVER_ORIGIN_URL 设为公网域名或 IP,否则 feed 内部的链接指向 localhost,外部阅读器点开会 404。
调优与边界
关键参数速查
| 环境变量 | 作用 | 默认值 |
|---|---|---|
| FEED_MODE | 设为 fulltext 输出全文,更耗内存、响应变慢 | 摘要模式 |
| CRON_EXPRESSION | 定时更新订阅源的 Cron 表达式 | 35 5,17 * * * |
| AUTH_CODE | 接口请求授权码,/feeds 路径不需要 | 不启用 |
| SERVER_ORIGIN_URL | 公网访问地址,用于生成 feed 完整链接 | 空 |
| MAX_REQUEST_PER_MINUTE | 每分钟最大请求次数限制 | 60 |
常见报错与应对
| 现象 | 原因 | 解法 |
|---|---|---|
| 账号状态显示"今日小黑屋" | 请求频率触发官方封控 | 等 24 小时自动恢复,或重启容器清除记录 |
| feed 内文章链接打不开 | 未设置 SERVER_ORIGIN_URL | 设为公网域名后重启服务 |
| 账号反复变"失效" | 登录时勾选了 24 小时自动退出 | 重新扫码,不勾该选项 |
| 4000 端口无法访问 | 端口被占用 | 映射改为 8080:4000 后重试 |
性能与资源注意
- 全文模式只建议订阅源较少时开启;源多时保持摘要模式,内存占用和接口响应都更友好。
- UPDATE_DELAY_TIME(默认 60s)是连续更新各源之间的延迟,一次加了很多账号时不要调太小,能明显降低进小黑屋的概率。
- 几十个源以上建议用 MySQL 版;个人轻量场景用 docker-compose.sqlite.yml 的 SQLite 版即可,省掉一个数据库容器。
深入一瞥
后端是 NestJS + Prisma,前端是 React + Vite,代码分在 apps/ 下。RSS 生成的核心在 apps/server/src/feeds/feeds.service.ts:它经微信读书接口拉文章、用 LRU 做缓存,再按请求参数输出三种格式;数据模型定义在 apps/server/prisma/schema.prisma。想接入新文章群聊推送的话,可以关注 wewe-rss-dingtalk/ 目录下的钉钉通知模块。
先绑定两三个常用公众号,把 all.rss 加进阅读器,观察一天定时更新和文章跳转是否正常。
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考