Loading... # WeRSS 微信公众号订阅助手技术分析 # 一、项目概述 ## 1. 项目简介 WeRSS(We-MP-RSS)是一个开源的微信公众号订阅助手项目,旨在为用户提供符合阅读习惯的微信公众号内容管理方案。该项目通过微信公众号内容爬取和解析,自动生成 RSS 订阅源,使用户能够使用 RSS 阅读器订阅和管理微信公众号内容,摆脱微信应用的束缚。 项目仓库地址为 https://github.com/rachelos/we-mp-rss,采用前后端分离架构,后端使用 Python + FastAPI,前端使用 Vue 3 + Vite,数据库支持 SQLite 和 MySQL。 ## 2. 核心功能 WeRSS 提供了丰富的功能特性,主要涵盖以下几个方面: ### A. 内容管理功能 - 微信公众号内容爬取和解析:支持多种爬取方式,自动获取公众号文章列表和详情 - RSS 订阅源生成:为每个订阅的公众号自动生成标准 RSS 格式的订阅源 - 定时自动更新:可配置定时任务,自动抓取最新文章 - 标签订阅:支持按标签筛选和订阅公众号 ### B. 内容导出功能 - 导出为 Markdown:将公众号文章转换为 Markdown 格式 - 导出为 PDF:支持将文章导出为 PDF 文档 - 导出为其他格式:支持 docx、json 等多种格式导出 ### C. Web 管理界面 - 友好的用户界面:提供简洁易用的 Web 管理界面 - 二维码授权:支持扫码授权登录微信公众号 - 订阅管理:可视化的订阅列表管理 - 文章阅读:内置文章阅读器 ### D. 通知与集成 - 授权过期提醒:当公众号授权即将过期时自动提醒 - 自定义通知渠道:支持钉钉、微信、飞书和自定义 Webhook - API 接口:提供完整的 RESTful API - WebHook 支持:支持 Webhook 集成 - AI Agent 接入:支持 AI Agent 接入微信公众号 ### E. 定制化配置 - 自定义 RSS 标题、描述和封面 - 自定义 RSS 分页大小 - 多数据库支持:默认使用 SQLite,可选 MySQL - 多 RSS 客户端支持 ## 3. 技术架构 WeRSS 采用前后端分离的架构设计,主要技术栈包括: ### A. 后端技术 - **Python 3.13.1+**:项目要求 Python 版本不低于 3.13.1 - **FastAPI**:高性能的 Python Web 框架,用于构建 RESTful API - **SQLite/MySQL**:数据存储,默认使用 SQLite,可配置 MySQL - **定时任务**:内置任务调度系统,支持定时抓取文章 ### B. 前端技术 - **Vue 3**:渐进式 JavaScript 框架 - **Vite**:下一代前端构建工具 - **Node.js 20.18.3+**:前端开发环境要求 ### C. 系统架构图 ```mermaid graph TB subgraph 前端 A[Vue3 + Vite] end subgraph 后端 B[FastAPI] C[定时任务] D[爬虫模块] E[RSS生成] end subgraph 数据存储 F[(SQLite/MySQL)] G[文件缓存] end subgraph 外部服务 H[微信公众号] I[通知渠道] end A -->|HTTP API| B B --> F B --> G C --> D D --> H D --> F E --> B B --> I I --> J[钉钉/微信/飞书/自定义] ```   # 二、系统工作原理 ## 1. 核心工作流程 WeRSS 的核心工作流程可以分为订阅管理、内容爬取、RSS 生成和通知推送四个主要环节。 ### A. 订阅管理 用户通过 Web 界面添加要订阅的微信公众号,系统提供多种添加方式: 1. **二维码授权**:用户使用微信扫描二维码授权登录,系统自动获取已关注的公众号列表 2. **手动添加**:用户输入公众号名称或 ID,系统搜索并添加 3. **标签订阅**:用户选择感兴趣的标签,系统自动订阅相关公众号 订阅信息被保存到数据库中,包括公众号 ID、名称、授权状态等。 ### B. 内容爬取 系统的定时任务模块会周期性地执行内容爬取任务: 1. **文章列表爬取**:根据订阅列表,爬取每个公众号的最新文章列表 2. **文章详情爬取**:对新增文章,爬取完整的文章内容、图片、作者等信息 3. **内容解析**:解析微信公众号的 HTML 内容,提取正文、图片链接等关键信息 4. **内容存储**:将解析后的文章内容保存到数据库 爬取过程支持多种爬取方式,可以应对不同的反爬策略。 ### C. RSS 生成 当用户或其他系统请求 RSS 订阅源时,系统会执行以下步骤: 1. **读取文章列表**:从数据库中查询指定公众号的文章列表 2. **生成 RSS XML**:按照 RSS 2.0 标准格式生成 XML 文档 3. **应用自定义配置**:根据用户配置的标题、描述、封面等信息自定义 RSS 4. **返回 RSS**:将生成的 RSS 内容返回给请求方 ### D. 通知推送 当有新的文章被爬取或授权即将过期时,系统会触发通知推送: 1. **检查通知条件**:判断是否满足通知条件(新文章、授权过期等) 2. **格式化通知内容**:根据配置的格式(HTML/文本)格式化通知内容 3. **调用 Webhook**:向配置的通知渠道发送 Webhook 请求 4. **记录通知结果**:记录通知发送状态,处理失败重试 ## 2. 工作流程时序图 以下时序图展示了从用户订阅到获取 RSS 的完整流程: ```mermaid sequenceDiagram participant U as 用户 participant W as Web界面 participant A as API服务 participant J as 定时任务 participant M as 微信公众号 participant D as 数据库 U->>W: 订阅公众号 W->>A: POST /api/subscribe A->>D: 保存订阅信息 Note over J,D: 定时执行 J->>M: 爬取文章列表 M-->>J: 返回文章数据 J->>M: 爬取文章详情 M-->>J: 返回完整内容 J->>D: 保存文章 J->>A: 生成RSS A->>D: 读取文章列表 A-->>U: 返回RSS Feed U->>A: 获取RSS A->>D: 查询文章 A-->>U: 返回RSS XML ```   ## 3. 数据模型 系统的核心数据模型包括以下几个实体: ### A. 公众号信息 存储微信公众号的基本信息和授权状态,字段包括: - 公众号 ID:唯一标识符 - 公众号名称:显示名称 - 授权状态:是否已授权 - 授权过期时间:授权的到期时间 - 最后更新时间:最后爬取时间 ### B. 文章信息 存储爬取的文章内容,字段包括: - 文章 ID:唯一标识符 - 公众号 ID:关联的公众号 - 文章标题 - 文章内容(HTML/Markdown) - 发布时间 - 原文链接 - 封面图片链接 ### C. 订阅关系 存储用户的订阅记录,字段包括: - 用户 ID - 公众号 ID - 订阅时间 - 订阅状态 # 三、部署与安装 ## 1. Docker 部署(推荐) WeRSS 提供了预构建的 Docker 镜像,部署非常简单。 ### A. 快速启动 ```bash docker run -d \ --name we-mp-rss \ -p 8001:8001 \ -v ./data:/app/data \ ghcr.io/rachelos/we-mp-rss:latest ``` 启动后访问 http://localhost:8001/ 即可使用。 ### B. 配置说明 - `-p 8001:8001`:将容器的 8001 端口映射到主机的 8001 端口 - `-v ./data:/app/data`:将主机的 data 目录挂载到容器,确保持久化存储 ### C. 国内加速镜像 对于国内用户,可以使用代理镜像加速访问: ```bash docker run -d \ --name we-mp-rss \ -p 8001:8001 \ -v ./data:/app/data \ docker.1ms.run/rachelos/we-mp-rss:latest ``` ### D. 升级更新 ```bash docker stop we-mp-rss docker rm we-mp-rss docker pull ghcr.io/rachelos/we-mp-rss:latest docker run -d \ --name we-mp-rss \ -p 8001:8001 \ -v ./data:/app/data \ ghcr.io/rachelos/we-mp-rss:latest ``` ## 2. 源码部署 如果需要从源码部署,可以按照以下步骤操作。 ### A. 环境要求 - Python >= 3.13.1 - Node.js >= 20.18.3 ### B. 后端服务部署 1. 克隆项目 ```bash git clone https://github.com/rachelos/we-mp-rss.git cd we-mp-rss ``` 2. 安装 Python 依赖 ```bash pip install -r requirements.txt ``` 3. 配置数据库 复制配置文件模板并修改: ```bash cp config.example.yaml config.yaml ``` 4. 启动服务 ```bash python main.py -job True -init True ``` ### C. 前端开发 1. 安装前端依赖 ```bash cd we-mp-rss/web_ui yarn install ``` 2. 启动前端服务 ```bash yarn dev ``` # 四、配置详解 ## 1. 环境变量配置 WeRSS 通过 config.yaml 文件进行配置,支持丰富的环境变量。以下是主要的配置项说明: ### A. 基础配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | APP_NAME | we-mp-rss | 应用名称 | | SERVER_NAME | we-mp-rss | 服务器名称 | | WEB_NAME | WeRSS微信公众号订阅助手 | 前端显示名称 | | PORT | 8001 | API 服务端口 | | DEBUG | False | 调试模式 | ### B. 数据库配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | DB | sqlite:///data/db.db | 数据库连接字符串 | | ARTICLE.TRUE_DELETE | False | 是否真正删除文章 | ### C. 定时任务配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | ENABLE_JOB | True | 是否启用定时任务 | | SPAN_INTERVAL | 10 | 定时任务执行间隔(秒) | | THREADS | 2 | 最大线程数 | | MAX_PAGE | 5 | 最大爬取页数 | ### D. RSS 配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | RSS_BASE_URL | 空 | RSS 域名地址 | | RSS_LOCAL | False | 是否使用本地 RSS 链接 | | RSS_TITLE | 空 | RSS 标题 | | RSS_DESCRIPTION | 空 | RSS 描述 | | RSS_COVER | 空 | RSS 封面 | | RSS_FULL_CONTEXT | True | 是否显示全文 | | RSS_ADD_COVER | True | 是否添加封面图片 | | RSS_CDATA | False | 是否启用 CDATA | | RSS_PAGE_SIZE | 30 | RSS 分页大小 | ### E. 通知配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | SEND_CODE | True | 是否发送授权二维码通知 | | CODE_TITLE | WeRSS授权二维码 | 二维码通知标题 | | DINGDING_WEBHOOK | 空 | 钉钉通知 Webhook URL | | WECHAT_WEBHOOK | 空 | 微信通知 Webhook URL | | FEISHU_WEBHOOK | 空 | 飞书通知 Webhook URL | | CUSTOM_WEBHOOK | 空 | 自定义通知 Webhook URL | | WEBHOOK.CONTENT_FORMAT | html | 文章内容发送格式 | ### F. 内容收集配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | GATHER.CONTENT | True | 是否收集内容 | | GATHER.MODEL | app | 收集模式 | | GATHER.CONTENT_AUTO_CHECK | False | 是否自动检查未收集文章内容 | | GATHER.CONTENT_AUTO_INTERVAL | 59 | 自动检查未收集文章内容的时间间隔(分钟) | | GATHER.CONTENT_MODE | web | 内容修正模式 | ### G. 安全配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | SECRET_KEY | we-mp-rss | 密钥 | | SAFE_HIDE_CONFIG | db,secret,token,notice... | 隐藏的配置信息 | | SAFE_LIC_KEY | RACHELOS | 授权加密密钥 | | TOKEN_EXPIRE_MINUTES | 4320 | 登录会话有效期(分钟) | ### H. 缓存与日志配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | CACHE.DIR | ./data/cache | 缓存目录 | | LOG_FILE | 空 | 日志文件路径 | | LOG_LEVEL | INFO | 日志级别 | ### I. 其他配置 | 配置项 | 默认值 | 说明 | |-------|-------|------| | USER_AGENT | Mozilla/5.0... | 用户代理 | | AUTO_RELOAD | False | 代码变更时自动重启服务 | | EXPORT_PDF | False | 是否启用 PDF 导出功能 | ## 2. 配置示例 以下是一个完整的 config.yaml 配置示例: ```yaml app: name: we-mp-rss server_name: we-mp-rss web_name: WeRSS微信公众号订阅助手 port: 8001 debug: false database: url: sqlite:///data/db.db article_true_delete: false job: enable: true span_interval: 10 threads: 2 max_page: 5 rss: base_url: "" local: false title: "" description: "" cover: "" full_context: true add_cover: true cdata: false page_size: 30 notification: send_code: true code_title: WeRSS授权二维码 dingding_webhook: "" wechat_webhook: "" feishu_webhook: "" custom_webhook: "" webhook_content_format: html gather: content: true model: app content_auto_check: false content_auto_interval: 59 content_mode: web security: secret_key: your-secret-key hide_config: db,secret,token,notice.wechat,notice.feishu,notice.dingding lic_key: RACHELOS token_expire_minutes: 4320 cache: dir: ./data/cache logging: file: "" level: INFO other: user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 auto_reload: false export_pdf: false ``` # 五、技术特点 ## 1. 前后端分离架构 WeRSS 采用前后端分离的架构设计,前端使用 Vue 3 + Vite 构建,后端使用 FastAPI 提供 RESTful API。这种架构带来了以下优势: 1. **开发效率提升**:前后端可以独立开发和部署,提高了开发效率 2. **可维护性强**:前后端职责清晰,代码组织更加规范 3. **扩展性好**:可以轻松添加新的客户端(如移动端 App) 4. **性能优化**:前端可以使用 Vite 进行快速构建和热更新 ## 2. 多爬取方式支持 系统支持多种微信公众号内容爬取方式,可以根据不同的反爬策略自动选择合适的爬取方法。这种设计提高了系统的稳定性和可靠性。 ## 3. 灵活的通知机制 WeRSS 提供了丰富的通知渠道,包括钉钉、微信、飞书和自定义 Webhook。用户可以根据自己的需求选择合适的通知方式,及时获取新文章更新和授权过期提醒。 ## 4. 多格式内容导出 系统支持将微信公众号文章导出为多种格式,包括 Markdown、PDF、DOCX 和 JSON。这使得用户可以根据不同的使用场景选择合适的导出格式。 ## 5. 定时任务调度 内置的定时任务调度系统可以自动执行文章爬取任务,用户无需手动触发。同时支持配置爬取间隔、最大爬取页数等参数,灵活控制爬取行为。 ## 6. API 接口完善 系统提供了完整的 RESTful API,支持第三方系统集成。通过 API,用户可以实现以下功能: - 订阅管理 - 文章查询 - RSS 获取 - Webhook 配置 ## 7. 数据库灵活切换 支持 SQLite 和 MySQL 两种数据库,用户可以根据自己的需求选择合适的数据库。SQLite 适合小型部署和单机使用,MySQL 适合大型部署和高并发场景。 # 六、应用场景 ## 1. 个人阅读管理 对于经常阅读微信公众号内容的用户,WeRSS 提供了以下便利: 1. **统一管理**:在一个界面中管理所有关注的公众号 2. **RSS 订阅**:使用熟悉的 RSS 阅读器阅读公众号内容 3. **离线阅读**:支持导出为 Markdown 或 PDF,方便离线阅读 4. **内容归档**:自动保存历史文章,便于回顾和搜索 ## 2. 企业内容监测 企业可以使用 WeRSS 监测竞争对手或行业动态: 1. **竞品监测**:订阅竞争对手的公众号,及时了解其动态 2. **行业资讯**:订阅行业媒体的公众号,获取最新行业资讯 3. **舆情监控**:通过 Webhook 集成,将新文章推送到企业内部系统 ## 3. 内容分析与挖掘 研究人员或分析师可以使用 WeRSS 进行内容分析: 1. **数据采集**:批量采集公众号文章数据 2. **格式转换**:将文章转换为结构化格式(JSON) 3. **内容导出**:导出为 Markdown 或 PDF,便于后续处理 ## 4. AI Agent 集成 WeRSS 支持 AI Agent 接入,可以实现: 1. **智能推荐**:根据阅读历史推荐相关文章 2. **内容摘要**:自动生成文章摘要 3. **智能问答**:基于公众号内容构建知识库 # 七、项目亮点 ## 1. 开源免费 WeRSS 是完全开源的项目,采用 MIT 许可证。用户可以免费使用、修改和分发,非常适合个人和小团队使用。 ## 2. 部署简单 提供 Docker 镜像,一条命令即可完成部署。对于不熟悉 Python 和 Node.js 的用户,也可以轻松使用。 ## 3. 功能完整 涵盖了微信公众号订阅管理的各个方面,从订阅、爬取、RSS 生成到通知推送,功能齐全。 ## 4. 持续更新 项目活跃度高,持续更新维护。根据 GitHub 数据,项目拥有 1.8k+ Star,300+ Fork,用户反馈积极。 ## 5. 社区支持 项目拥有活跃的社区,用户可以通过 GitHub Issues 提问和反馈问题。同时项目还提供了详细的文档和使用说明。 # 八、注意事项 ## 1. 合规使用 使用 WeRSS 爬取微信公众号内容时,需要注意: 1. **尊重版权**:爬取的内容仅供个人使用,不得用于商业用途 2. **遵守协议**:遵守微信公众号的服务协议和 robots.txt 规则 3. **合理频率**:设置合理的爬取频率,避免对服务器造成压力 ## 2. 数据安全 1. **备份数据**:定期备份数据库,防止数据丢失 2. **权限控制**:如果部署在公网,建议配置访问控制和身份认证 3. **密钥保护**:妥善保管 SECRET_KEY 等敏感配置 ## 3. 性能优化 1. **数据库选择**:对于大量订阅和文章,建议使用 MySQL 替代 SQLite 2. **缓存配置**:合理配置缓存目录,提高访问速度 3. **定时任务**:根据实际需求调整定时任务的执行间隔和线程数 ## 4. 反爬策略 微信公众号可能采取反爬措施,建议: 1. **更新频率**:及时关注项目更新,获取最新的反爬应对方案 2. **多种方式**:系统支持多种爬取方式,当一种失效时可以尝试其他方式 3. **User Agent**:合理配置 User Agent,模拟正常访问 # 九、总结 WeRSS 是一个功能完整、设计优雅的微信公众号订阅管理工具。它通过前后端分离的架构设计,提供了稳定可靠的内容爬取和 RSS 生成功能。项目开源免费,部署简单,非常适合个人和小团队使用。 对于希望摆脱微信应用束缚,使用 RSS 阅读器管理微信公众号内容的用户来说,WeRSS 是一个理想的选择。同时,其完善的 API 接口和 Webhook 支持,也为企业级应用和二次开发提供了可能。 *** ## 参考资料 1. [WeRSS GitHub 仓库](https://github.com/rachelos/we-mp-rss) - 项目主页 2. [WeRSS 知乎专栏文章](https://zhuanlan.zhihu.com/p/1925281790370747495) - 项目介绍 最后修改:2026 年 01 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏