把公众号变成RSS:wewe-rss 3步落地指南
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
你有没有遇到过:想追的公众号文章刷不到、更新也追不上?wewe-rss 基于微信读书接口,把公众号内容转成 RSS 订阅源,支持私有化部署,数据留在你自己手里。
① 先搞清楚:这个项目到底解决什么问题
微信公众号的内容散在消息流里,没统一入口也检索不了。wewe-rss 干的事很直接:借用你的微信读书账号去读公众号,把文章抓下来,转成 RSS、Atom、JSON 三种订阅格式,后台按 cron 定时抓取更新。微信只负责"喂"内容,阅读和筛选全部交给你的 RSS 阅读器。
| 你原来的做法 | 它的做法 | 省下来的时间 |
|---|---|---|
| 逐个点开几十个公众号 | 全部聚合进一个信息流 | 每天翻消息流的十几分钟 |
| 错过更新靠翻聊天记录找 | 定时抓取,阅读器里直接提醒 | 翻找旧文的时间 |
| 换阅读器要逐个重新订阅 | 导出OPML整体迁移 | 半天手工添加 |
| 无关推送混杂着重要内容 | 按标题关键词过滤 | 人工筛选的时间 |
它和公共 RSS 服务的差别在私有化部署:订阅关系、抓取到的文章都存在你自己的数据库里,服务器在哪、数据就在哪,不经过第三方中转。
② 环境准备与启动:公众号RSS服务私有化部署
你只需要一台装了 Docker 的机器,Node、数据库都不用手动装。
最快路径:Compose 一把拉起
官方推荐的 MySQL 方案,compose 文件里数据库和后台都写好了,克隆下来直接起服务:
git clone https://gitcode.com/GitHub_Trending/we/wewe-rss cd wewe-rss docker-compose up -d # 等 2-3 分钟,浏览器访问 http://localhost:4000最轻路径:SQLite 单容器
机器资源紧张、或者只是先跑跑看,用 SQLite 版:没有数据库依赖,数据文件落在本地data/目录,容器重启不丢数据。执行这一条就行:docker-compose -f docker-compose.sqlite.yml up -d
启动后你该检查的三件事
- 端口可达:浏览器打开
http://localhost:4000/login,能出登录页说明服务已经起来了;打不开就回到上一步查日志。 - 日志无报错:终端跑
docker compose logs -f,看到数据库连接正常、没有连续刷错就稳了,首次启动会跑一遍数据库迁移日志。 - 能登录进后台:如果 compose 里设置了
AUTH_CODE(示例值123567),登录页输入它就能进;没设置则直接进后台。
注意:服务要放外网的话,记得把 compose 里
SERVER_ORIGIN_URL一行取消注释,填上你的域名或公网 IP,否则 RSS 里生成的全部链接都指向 localhost。
③ 核心工作流:从绑定到出稿
从绑账号到出 RSS 地址,一共三步,顺利的话五分钟以内。
🔑 第1步:绑定微信读书账号
操作路径:账号管理 > 添加读书账号,弹窗里出二维码,微信扫一扫完成登录,成功后账号就出现在列表里,支持绑定多个读书账号,状态列会显示每个账号是否可用。
登录确认时千万别勾"24小时后自动退出",勾了授权一天就过期,第二天状态变失效,得重新绑。授权信息只存在你自己的库里,不保存聊天记录之类的敏感数据。
📌 第2步:添加公众号订阅源
操作路径:公众号源 > 添加,把公众号任意一篇文章的分享链接粘贴进去,一行一条,系统识别出公众号后自动开始抓取。
注意:批量加源时留点间隔,添加频率过高会把账号送进"今日小黑屋",要等 24 小时才解封。
加完之后在源详情页点"获取历史文章"可以分批回填旧文,点"立即更新"可以马上拉最新一篇。
📡 第3步:拿到RSS订阅地址
操作路径:公众号源 > 选中某个源(或"全部") > 右上角的 RSS 链接,点开就是可订阅的地址,把它丢进阅读器即可。列表页能直接看到每个源的最近更新时间,哪个源没跟上,一眼能看出来。
源 ID 形如MP_WXS_xxx,"全部"对应的就是all。页面右上角还有"导出OPML"按钮,生成的 OPML 文件可以直接导入 Feedly 等阅读器,换平台时不用一个个重新加。
你能拿到什么:
/feeds/{源ID}.rss:单个公众号的 RSS 2.0,兼容性最广/feeds/{源ID}.atom:单个公众号的 Atom 1.0,元数据更全/feeds/all.rss或/feeds/all.atom:所有源聚合成一个流/feeds/all.json:JSON Feed,支持limit、page分页,给脚本解析最方便
④ 效率提升:公众号RSS的三个用法
三个用法都不动代码:一个改 URL 参数,一个手动触发,一个直接拉数据。
用法1:标题过滤,只看你在意的
订阅号多了之后信息量先过载,在订阅地址上加参数,阅读器里就只剩匹配的文章:
http://localhost:4000/feeds/all.atom?title_include=AI|机器学习&title_exclude=招聘
title_include和title_exclude都支持用|写多个关键词,先按 include 命中、再按 exclude 剔除,两个条件叠加生效。过滤只作用于输出,不影响库里抓到的文章,随时可以把参数去掉看全量。
用法2:手动触发更新,不用等定时
定时抓取默认每天 5:35 和 17:35 各跑一次,刚加的源等不及的话,访问源地址时带上update=true立刻刷新:
http://localhost:4000/feeds/{源ID}.rss?update=true
更新是异步的,这次请求不会等抓取完成才返回,过一会儿再刷新就能看到新文章。
注意:手动更新走的是同一套接口,触发频繁同样可能进小黑屋,手动拉一次后歇一会儿再动。
用法3:喂给自己的自动化脚本
/feeds路径不需要登录态,外部脚本直接拉 JSON 就能做文章播报:
import requests r = requests.get("http://localhost:4000/feeds/all.json", params={"title_include": "AI|机器学习", "limit": 20}) for item in r.json()["items"]: print(item.get("title"), item.get("url"))把print换成钉钉 webhook 或邮件发送,就是一个按关键词过滤的文章通知器。配合你系统里的 cron 或定时器,隔几小时跑一次就行。
⑤ 踩坑速查
高频问题基本都在这张表里,先查表再动手。
| 现象 | 最可能的原因 | 一句话处理 | 是否需重启 |
|---|---|---|---|
| 4000 端口打不开 | 端口被占或防火墙拦截 | 映射改成-p 8080:4000 | 是 |
| 外网看 RSS 链接还是 localhost | 没配SERVER_ORIGIN_URL | 填公网域名后重建容器 | 是 |
| 加源失败、状态显示小黑屋 | 请求频率过高 | 等 24 小时,降低操作频率 | 否 |
| 扫码成功但账号显示失效 | 勾了24小时自动退出 | 重新添加,这次别勾 | 否 |
账号状态怎么读
- 正常:可以正常抓取,不用管。
- 今日小黑屋(受限):当天被风控,等 24 小时自动恢复,急用可以重启服务/容器把记录清掉。
- 失效:登录态没了,回账号管理重新扫码绑定。
⑥ 想继续深入?
下面几个方向都只动配置或加模块,不碰核心逻辑。
- 改更新节奏:
CRON_EXPRESSION - 开全文模式:
FEED_MODE=fulltext - 正文HTML清理:
ENABLE_CLEAN_HTML - 接钉钉通知:
wewe-rss-dingtalk目录 - 前端二次开发:
apps/web目录
如果你要贡献或二次开发,RSS 生成的入口在 feeds 服务源码,钉钉推送模块在 wewe-rss-dingtalk。
wewe-rss/ ├── docker-compose.yml # MySQL 部署配置 ├── docker-compose.sqlite.yml # SQLite 轻量配置 ├── apps/server/src/feeds/ # RSS 生成核心逻辑 ├── apps/web/ # React 管理界面 └── wewe-rss-dingtalk/ # 钉钉通知模块今天就试一下:compose 起个服务,绑一个读书账号,把 all.rss 加进你的阅读器。
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考