☰
如何把微信公众号文章变成 RSS 订阅源:wewe-rss 私有化部署完整指南
2026/10/15 3:45:27 网站建设 项目流程

如何把微信公众号文章变成 RSS 订阅源:wewe-rss 私有化部署完整指南

【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss

微信公众号 RSS 订阅听起来不复杂,但现实中公众号没有开放订阅入口,文章又散落在各自的推送历史里。wewe-rss 是一个可以私有化部署的项目,它基于微信读书接口抓取公众号内容,生成标准 RSS / Atom / JSON 订阅源,让任何 RSS 阅读器统一管理这些文章。这篇文章按"先看清它能干什么、再一条链路搭起来"的顺序走一遍,从启动服务到把新文章推进群,都有对应步骤。

wewe-rss 能解决什么:三个典型使用场景

十几个号的消息散落在微信里

添加多个公众号之后,所有号的新文章都会进同一条聚合流,阅读器里只需订一个地址;每个公众号也有独立订阅地址,可以单独挑着看。服务支持把所有订阅源导出 OPML,换个阅读器时一键迁移。

只追一个主题,却被大量推送淹没

公众号的内容经常混杂:讲技术的号也会发招聘、活动和转载。在订阅地址上追加title_include与title_exclude两个查询参数即可,多个关键词用竖线|分隔,例如http://localhost:4000/feeds/all.atom?title_include=AI|机器学习&title_exclude=招聘,效果是只保留标题命中前一组关键词、且不含后一组关键词的条目。过滤在服务端完成,阅读器端不用做任何改造。

希望在阅读器里直接读全文

默认情况下订阅流只携带标题、封面和链接。设置环境变量FEED_MODE=fulltext(或单次请求追加mode=fulltext,单次参数优先于全局配置)后,服务会抓取文章正文写进 feed,在阅读器里直接读完,不用跳回微信。全文输出会让接口响应变慢、内存占用变高,不必常开,临时需求用单次参数更合适。

wewe-rss 私有化部署步骤:从 0 到订阅地址一条链路

启动服务

推荐 Docker Compose,一条命令同时拉起服务与数据库:

git clone https://gitcode.com/GitHub_Trending/we/wewe-rss cd wewe-rss docker compose up -d

服务默认监听4000 端口,浏览器打开http://localhost:4000即进入管理界面。不想用 Docker 也可以本地跑:pnpm install && pnpm run -r build && pnpm run start:server,完整说明见 README.md。

💡更轻量的替代:把启动文件换成 docker-compose.sqlite.yml,用 SQLite 版本,省去单独部署 MySQL。

绑定微信读书账号

抓取公众号内容的凭证是微信读书账号。进入账号管理页面,点击右上角添加读书账号,用手机扫码登录,账号保存在服务端,仅用于抓取文章。

💡两个易踩的坑:扫码登录时不要勾选"24 小时后自动退出",否则凭证很快失效;账号列表出现"今日小黑屋"状态说明临时封控,等一天会自行恢复。

添加公众号源,拿到订阅地址

切到公众号源标签页,点左上角添加,在弹窗里粘贴该公众号的任意一篇分享链接,点确定。服务会自动识别公众号并抓取历史文章;添加频率过高同样会触发临时封控,一般 24 小时左右恢复。

添加成功后,每个公众号对应一个独立订阅地址,从列表页的RSS按钮可直接复制,常见两种形态:

  • 单个公众号:http://localhost:4000/feeds/{公众号ID}.rss
  • 全部聚合:http://localhost:4000/feeds/all.rss

⚠️公网部署注意:如果要把服务放到公网给别人用,务必在环境变量里设置SERVER_ORIGIN_URL为服务器公网 IP 或域名,否则生成的链接指向 localhost,别人无法打开。

配置旋钮速查:筛选、全文、频率、限流

旋钮分两类:查询参数写在订阅地址后,即时生效;环境变量改 docker-compose.yml 后重启容器生效。

旋钮设置位置作用默认值
title_include订阅地址查询参数只保留标题命中关键词的条目,多值用\|分隔无
title_exclude订阅地址查询参数排除标题命中关键词的条目,多值用\|分隔无
mode订阅地址查询参数单次请求输出全文(mode=fulltext),优先于FEED_MODE关闭
limit/page订阅地址查询参数每页条数与页码单源 10 / 聚合 30,第 1 页
update订阅地址查询参数update=true手动触发该源立即抓取关闭
FEED_MODE环境变量全局全文模式,取值fulltext关闭
CRON_EXPRESSION环境变量定时抓取任务的 Cron 表达式35 5,17 * * *(北京时间每天 5:35 与 17:35)
MAX_REQUEST_PER_MINUTE环境变量接口限流,每分钟最大请求次数60

输出格式由地址后缀决定:.rss兼容性最广(RSS 2.0),.atom标准更严格,.json是 JSON Feed,适合程序解析;后缀无法识别时按 atom 处理。聚合流里每条条目还会标注来源公众号,单源流则不显示。

把新文章推进群,或交给脚本处理

用钉钉机器人接收推送

仓库 wewe-rss-dingtalk/ 目录自带一个独立推送服务:它直接查数据库里最近 12 小时的新文章,通过机器人 Webhook 以 markdown 消息推到群里,脚本每 4 小时跑一轮。接入只需两步:在main.py填入机器人的access_token和secret,再在 compose 文件里放开13306:3306数据库端口映射,然后python3 main.py或docker-compose up -d运行。新文章发布不久,团队就能在群里看到,不需要轮询任何接口。

让脚本消费聚合流

聚合流本身就是标准 JSON Feed,任何脚本都能直接消费:

import requests resp = requests.get( "http://localhost:4000/feeds/all.json", params={"limit": 20, "title_include": "AI"}, ) for item in resp.json()["items"][:5]: print(item["title"])

把这段放进定时任务,接上邮件、飞书或自己的告警系统,就能按自己的规则处理新文章。

内部是怎么跑的:从请求到 feed 生成

  • 后端是 NestJS,核心生成逻辑在 feeds.service.ts:handleGenerateFeed先从数据库取出文章列表,再按请求后缀渲染 RSS 2.0、Atom 或 JSON Feed,标题过滤在渲染完成后应用。
  • 前端管理界面位于 apps/web/src/,React + Vite 技术栈。
  • 数据模型与迁移文件在 apps/server/prisma/schema.prisma 旁的 migrations 目录。
  • 抓取文章正文带一层 LRU 缓存,最多存 5000 条,热门文章的二次访问直接命中缓存,不再请求微信。
  • 想改代码可以从handleGenerateFeed入手,加一种输出格式或过滤条件都很顺手。

开始之前的一条建议

先只订阅 2~3 个天天看的公众号,跑一周再调title_include和CRON_EXPRESSION,一周的真实数据比一堆配置项更能说明哪些设置对你有用。另外若服务对外暴露,记得设置AUTH_CODE——/feeds路径不受限,该授权码保护的是管理类接口,能防止陌生人改动你的公众号列表。

【免费下载链接】wewe-rss🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书)项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询