微信公众号为什么没法直接订阅?用 wewe-rss 十分钟把第一篇公众号文章推进阅读器
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
wewe-rss 是一个私有化部署的微信公众号转 RSS 订阅源工具:它走微信读书通道抓取公众号文章(含历史发布),在你的/feeds/端点上生成标准 RSS / Atom / JSON Feed,任何 RSS 阅读器都能直接订阅。整条链路你只需要做三件事:跑一个容器、扫一次微信读书的码、贴一条文章链接。读完本文,你的阅读器里就会有一个可用的订阅地址。
先说清楚原理:微信公众号内容封闭在微信生态里,没有原生的订阅源输出。wewe-rss 的做法是把你的微信读书账号当成"抓取通道"——通过微信读书接口拉取文章列表,在自己的服务器上生成 feed。登录状态和数据全部留在你自己的机器上,不经过第三方托管。
十分钟启动 wewe-rss:Docker Compose 两处改动加一条命令
仓库自带的 docker-compose.yml 已经把应用容器和 MySQL 容器的镜像、网络、健康检查全部配好,你只需要改两个值。
git clone https://gitcode.com/GitHub_Trending/we/wewe-rss cd wewe-rss这条命令拉取项目源码。接下来打开 docker-compose.yml,把 MySQL 的MYSQL_ROOT_PASSWORD(默认 123456)和 app 容器的AUTH_CODE(默认 123567,服务接口的授权码)改成自己的值。
docker-compose up -d这条命令同时启动数据库和服务。compose 文件里写了depends_on: service_healthy,MySQL 健康检查通过之前 app 容器不会启动,所以你只需要等两个容器都显示Up,全程大约 2~3 分钟。
然后在浏览器打开http://localhost:4000,看到顶部带「公众号源」和「账号管理」两个标签的页面,部署就算成了:
不想跑 MySQL 也有单容器的 SQLite 方案:
docker-compose -f docker-compose.sqlite.yml up -d这条命令只启动一个 app 容器加一个./data数据目录。官方 README 明确标注该方案"不推荐",订阅少、纯自用没问题,长期跑建议回到 MySQL 版。
打算对外公开访问时,别用默认的4000:4000映射,改成8080:4000之类的端口,再套一层 Nginx 反代,仓库里的assets/nginx.example.conf是现成的参考配置。
先绑定微信读书账号:它是唯一的抓取通道
后面所有抓取都依赖这一步,所以先做它。
进入「账号管理」标签,点右上角「添加读书账号」,弹出二维码,用手机微信扫码登录微信读书。成功后列表里多出一条记录,状态显示「启用」,绑定完成。
这里有个必须小心的坑:扫码登录时不要勾选"24小时后自动退出"。勾了它,登录态会周期性失效,你得隔三差五重新扫码绑定,这是本项目最高频的故障来源。
添加公众号源:粘贴一条分享链接就完成
切到「公众号源」标签,点左上角「添加」,在输入框里粘贴该公众号任意一篇文章的链接。链接这样拿:在微信里打开一篇文章,点右上角「…」→ 分享 → 复制链接。
确认后系统开始抓取该源的历史文章——历史发布内容会一并拉下来,不用等新文章累积。列表里这个源的「最后更新时间」刷新了,就说明成功。
节奏上要控制一下:不要连续批量添加多个源,间隔几分钟再操作下一个。README 明确写了添加频率过高会触发封控,进了小黑屋要等 24 小时才能恢复。
上公网前建议调的 6 个环境变量
默认值都能跑,但对外提供订阅前把下面这几项过一遍。它们都写在 docker-compose.yml 的 app 环境变量里,被注释掉的行去掉#生效。
| 变量 | 默认值 | 什么时候改 | 建议值 |
|---|---|---|---|
AUTH_CODE | 123567 | 部署后立刻换;不设等于服务无鉴权 | 随机 8 位以上字符串;/feeds订阅路径不需要它 |
SERVER_ORIGIN_URL | 未设置 | 公网访问必配,否则 RSS 里生成的链接是 localhost | 你的公网域名 |
FEED_MODE | 摘要输出 | 确实需要全文内容时 | fulltext全文模式,响应更慢且吃内存,源多时别开 |
CRON_EXPRESSION | 35 5,17 * * * | 想改自动更新节奏时 | 默认每天 5:35 和 17:35 各更新一次,多数人保留默认 |
MAX_REQUEST_PER_MINUTE | 60 | 被限流时 | 降到 30 |
UPDATE_DELAY_TIME | 60s | 基本不用动 | 保持默认,作用是拉长连续更新间隔、降低进小黑屋的概率 |
订阅地址写法:三种格式、两个参数、一个手动更新开关
源加好之后,真正的消费者是你的 RSS 阅读器。地址规则一句话:/feeds/后跟"源ID.格式",all代表全部源聚合。
http://<服务器地址>/feeds/all.rss # 全部源聚合 http://<服务器地址>/feeds/all.atom http://<服务器地址>/feeds/all.json http://<服务器地址>/feeds/MP_WXS_xxx.rss # 单个源,xxx 是源ID格式怎么选:.rss兼容性最稳,拿不准就选它;自己写脚本或前端解析选.json,字段最干净;对标准校验严格的阅读器用.atom。三种格式都支持limit和page参数,比如?limit=20&page=1。
订阅地址还能追加查询参数做多值过滤,值之间用|表示"或":
/feeds/all.atom?title_include=AI|机器学习 /feeds/MP_WXS_xxx.json?title_exclude=招聘&limit=20 /feeds/MP_WXS_xxx.rss?update=truetitle_include和title_exclude按标题关键词做包含/排除过滤。信息源杂的时候,直接在all地址上挂过滤参数,比单建源省事。update=true是手动更新开关:发现某个公众号更新不及时,带着它访问一次该源地址,就能触发一次抓取。
另外,全部订阅源支持一键导出 OPML,迁移订阅列表或者批量导入阅读器时用得上。
进阶三条路:钉钉推送、前端定制、脚本拉取
钉钉群推送:仓库自带wewe-rss-dingtalk/模块,把机器人的access_token和secret填进 main.py,在该目录执行docker-compose up -d,之后新文章就会推送到群里,具体步骤见该目录下的 README.md。
阅读页定制:管理页是 React + Vite 写的,代码在apps/web/。想要贴合自己审美的阅读页,可以直接基于它改。本地开发流程:装好 Node 20 和 pnpm 后执行pnpm install && pnpm run build:web && pnpm dev。
脚本拉取:订阅接口就是普通 GET 请求,任何语言都能直接拉,Python 里几行 requests 调用/feeds/all.json就能拿到标题和链接字段,接进自己的监控或转发流程很直接。想改行为的话,RSS 生成、过滤、更新逻辑集中在apps/server/src/feeds/feeds.service.ts,路由在apps/server/src/feeds/feeds.controller.ts,从这里入手成本最低。
故障排查速查:五种最常遇到的状况
| 卡在哪 | 可能原因 | 恢复动作 |
|---|---|---|
| 4000 端口打不开 | 端口被占用或防火墙未放行 | docker-compose ps确认容器状态,必要时把映射改成8080:4000 |
| 账号状态「失效」 | 登录态过期,或登录时勾选了 24 小时自动退出 | 重新扫码登录,这次务必不勾选自动退出 |
| 账号状态「今日小黑屋」 | 添加或更新过于频繁被限流 | 等 24 小时恢复;账号恢复正常后,重启服务/容器可清除小黑屋记录 |
| 阅读器里链接打不开 | 没配SERVER_ORIGIN_URL | 填上公网域名后重启容器 |
| 更新频繁报错 | 网络波动或接口限流 | 拉长CRON_EXPRESSION间隔,MAX_REQUEST_PER_MINUTE降到 30 |
关页之前留一份四周内的动作清单:第一周绑 1~2 个微信读书账号、加 2~3 个常用公众号,在阅读器里订阅/feeds/all.rss验证历史文章能正常收到;第二、三周观察自动更新节奏,不合阅读习惯再调CRON_EXPRESSION,并给all地址加上title_include/title_exclude把 feed 收窄;第四周起,需要团队共享就加上wewe-rss-dingtalk推送,需要新的阅读体验再基于apps/web/定制。
【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考