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. 通知与集成授权过期提醒：当公众号授权即将过期时自动提醒自定义通知渠道：支持钉钉、微信、飞书和自定义 WebhookAPI 接口：提供完整的 RESTful APIWebHook 支持：支持 Webhook 集成AI Agent 接入：支持 AI Agent 接入微信公众号E. 定制化配置自定义 RSS 标题、描述和封面自定义 RSS 分页大小多数据库支持：默认使用 SQLite，可选 MySQL多 RSS 客户端支持3. 技术架构WeRSS 采用前后端分离的架构设计，主要技术栈包括：A. 后端技术Python 3.13.1+：项目要求 Python 版本不低于 3.13.1FastAPI：高性能的 Python Web 框架，用于构建 RESTful APISQLite/MySQL：数据存储，默认使用 SQLite，可配置 MySQL定时任务：内置任务调度系统，支持定时抓取文章B. 前端技术Vue 3：渐进式 JavaScript 框架Vite：下一代前端构建工具Node.js 20.18.3+：前端开发环境要求C. 系统架构图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 界面添加要订阅的微信公众号，系统提供多种添加方式：二维码授权：用户使用微信扫描二维码授权登录，系统自动获取已关注的公众号列表手动添加：用户输入公众号名称或 ID，系统搜索并添加标签订阅：用户选择感兴趣的标签，系统自动订阅相关公众号订阅信息被保存到数据库中，包括公众号 ID、名称、授权状态等。B. 内容爬取系统的定时任务模块会周期性地执行内容爬取任务：文章列表爬取：根据订阅列表，爬取每个公众号的最新文章列表文章详情爬取：对新增文章，爬取完整的文章内容、图片、作者等信息内容解析：解析微信公众号的 HTML 内容，提取正文、图片链接等关键信息内容存储：将解析后的文章内容保存到数据库爬取过程支持多种爬取方式，可以应对不同的反爬策略。C. RSS 生成当用户或其他系统请求 RSS 订阅源时，系统会执行以下步骤：读取文章列表：从数据库中查询指定公众号的文章列表生成 RSS XML：按照 RSS 2.0 标准格式生成 XML 文档应用自定义配置：根据用户配置的标题、描述、封面等信息自定义 RSS返回 RSS：将生成的 RSS 内容返回给请求方D. 通知推送当有新的文章被爬取或授权即将过期时，系统会触发通知推送：检查通知条件：判断是否满足通知条件（新文章、授权过期等）格式化通知内容：根据配置的格式（HTML/文本）格式化通知内容调用 Webhook：向配置的通知渠道发送 Webhook 请求记录通知结果：记录通知发送状态，处理失败重试2. 工作流程时序图以下时序图展示了从用户订阅到获取 RSS 的完整流程：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 XML3. 数据模型系统的核心数据模型包括以下几个实体：A. 公众号信息存储微信公众号的基本信息和授权状态，字段包括：公众号 ID：唯一标识符公众号名称：显示名称授权状态：是否已授权授权过期时间：授权的到期时间最后更新时间：最后爬取时间B. 文章信息存储爬取的文章内容，字段包括：文章 ID：唯一标识符公众号 ID：关联的公众号文章标题文章内容（HTML/Markdown）发布时间原文链接封面图片链接C. 订阅关系存储用户的订阅记录，字段包括：用户 ID公众号 ID订阅时间订阅状态三、部署与安装1. Docker 部署（推荐）WeRSS 提供了预构建的 Docker 镜像，部署非常简单。A. 快速启动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. 国内加速镜像对于国内用户，可以使用代理镜像加速访问：docker run -d \ --name we-mp-rss \ -p 8001:8001 \ -v ./data:/app/data \ docker.1ms.run/rachelos/we-mp-rss:latestD. 升级更新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:latest2. 源码部署如果需要从源码部署，可以按照以下步骤操作。A. 环境要求Python >= 3.13.1Node.js >= 20.18.3B. 后端服务部署克隆项目git clone https://github.com/rachelos/we-mp-rss.git cd we-mp-rss安装 Python 依赖pip install -r requirements.txt配置数据库复制配置文件模板并修改：cp config.example.yaml config.yaml启动服务python main.py -job True -init TrueC. 前端开发安装前端依赖cd we-mp-rss/web_ui yarn install启动前端服务yarn dev四、配置详解1. 环境变量配置WeRSS 通过 config.yaml 文件进行配置，支持丰富的环境变量。以下是主要的配置项说明：A. 基础配置配置项默认值说明APP_NAMEwe-mp-rss应用名称SERVER_NAMEwe-mp-rss服务器名称WEB_NAMEWeRSS微信公众号订阅助手前端显示名称PORT8001API 服务端口DEBUGFalse调试模式B. 数据库配置配置项默认值说明DBsqlite:///data/db.db数据库连接字符串ARTICLE.TRUE_DELETEFalse是否真正删除文章C. 定时任务配置配置项默认值说明ENABLE_JOBTrue是否启用定时任务SPAN_INTERVAL10定时任务执行间隔（秒）THREADS2最大线程数MAX_PAGE5最大爬取页数D. RSS 配置配置项默认值说明RSS_BASE_URL空RSS 域名地址RSS_LOCALFalse是否使用本地 RSS 链接RSS_TITLE空RSS 标题RSS_DESCRIPTION空RSS 描述RSS_COVER空RSS 封面RSS_FULL_CONTEXTTrue是否显示全文RSS_ADD_COVERTrue是否添加封面图片RSS_CDATAFalse是否启用 CDATARSS_PAGE_SIZE30RSS 分页大小E. 通知配置配置项默认值说明SEND_CODETrue是否发送授权二维码通知CODE_TITLEWeRSS授权二维码二维码通知标题DINGDING_WEBHOOK空钉钉通知 Webhook URLWECHAT_WEBHOOK空微信通知 Webhook URLFEISHU_WEBHOOK空飞书通知 Webhook URLCUSTOM_WEBHOOK空自定义通知 Webhook URLWEBHOOK.CONTENT_FORMAThtml文章内容发送格式F. 内容收集配置配置项默认值说明GATHER.CONTENTTrue是否收集内容GATHER.MODELapp收集模式GATHER.CONTENT_AUTO_CHECKFalse是否自动检查未收集文章内容GATHER.CONTENT_AUTO_INTERVAL59自动检查未收集文章内容的时间间隔（分钟）GATHER.CONTENT_MODEweb内容修正模式G. 安全配置配置项默认值说明SECRET_KEYwe-mp-rss密钥SAFE_HIDE_CONFIGdb,secret,token,notice...隐藏的配置信息SAFE_LIC_KEYRACHELOS授权加密密钥TOKEN_EXPIRE_MINUTES4320登录会话有效期（分钟）H. 缓存与日志配置配置项默认值说明CACHE.DIR./data/cache缓存目录LOG_FILE空日志文件路径LOG_LEVELINFO日志级别I. 其他配置配置项默认值说明USER_AGENTMozilla/5.0...用户代理AUTO_RELOADFalse代码变更时自动重启服务EXPORT_PDFFalse是否启用 PDF 导出功能2. 配置示例以下是一个完整的 config.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。这种架构带来了以下优势：开发效率提升：前后端可以独立开发和部署，提高了开发效率可维护性强：前后端职责清晰，代码组织更加规范扩展性好：可以轻松添加新的客户端（如移动端 App）性能优化：前端可以使用 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 提供了以下便利：统一管理：在一个界面中管理所有关注的公众号RSS 订阅：使用熟悉的 RSS 阅读器阅读公众号内容离线阅读：支持导出为 Markdown 或 PDF，方便离线阅读内容归档：自动保存历史文章，便于回顾和搜索2. 企业内容监测企业可以使用 WeRSS 监测竞争对手或行业动态：竞品监测：订阅竞争对手的公众号，及时了解其动态行业资讯：订阅行业媒体的公众号，获取最新行业资讯舆情监控：通过 Webhook 集成，将新文章推送到企业内部系统3. 内容分析与挖掘研究人员或分析师可以使用 WeRSS 进行内容分析：数据采集：批量采集公众号文章数据格式转换：将文章转换为结构化格式（JSON）内容导出：导出为 Markdown 或 PDF，便于后续处理4. AI Agent 集成WeRSS 支持 AI Agent 接入，可以实现：智能推荐：根据阅读历史推荐相关文章内容摘要：自动生成文章摘要智能问答：基于公众号内容构建知识库七、项目亮点1. 开源免费WeRSS 是完全开源的项目，采用 MIT 许可证。用户可以免费使用、修改和分发，非常适合个人和小团队使用。2. 部署简单提供 Docker 镜像，一条命令即可完成部署。对于不熟悉 Python 和 Node.js 的用户，也可以轻松使用。3. 功能完整涵盖了微信公众号订阅管理的各个方面，从订阅、爬取、RSS 生成到通知推送，功能齐全。4. 持续更新项目活跃度高，持续更新维护。根据 GitHub 数据，项目拥有 1.8k+ Star，300+ Fork，用户反馈积极。5. 社区支持项目拥有活跃的社区，用户可以通过 GitHub Issues 提问和反馈问题。同时项目还提供了详细的文档和使用说明。八、注意事项1. 合规使用使用 WeRSS 爬取微信公众号内容时，需要注意：尊重版权：爬取的内容仅供个人使用，不得用于商业用途遵守协议：遵守微信公众号的服务协议和 robots.txt 规则合理频率：设置合理的爬取频率，避免对服务器造成压力2. 数据安全备份数据：定期备份数据库，防止数据丢失权限控制：如果部署在公网，建议配置访问控制和身份认证密钥保护：妥善保管 SECRET_KEY 等敏感配置3. 性能优化数据库选择：对于大量订阅和文章，建议使用 MySQL 替代 SQLite缓存配置：合理配置缓存目录，提高访问速度定时任务：根据实际需求调整定时任务的执行间隔和线程数4. 反爬策略微信公众号可能采取反爬措施，建议：更新频率：及时关注项目更新，获取最新的反爬应对方案多种方式：系统支持多种爬取方式，当一种失效时可以尝试其他方式User Agent：合理配置 User Agent，模拟正常访问九、总结WeRSS 是一个功能完整、设计优雅的微信公众号订阅管理工具。它通过前后端分离的架构设计，提供了稳定可靠的内容爬取和 RSS 生成功能。项目开源免费，部署简单，非常适合个人和小团队使用。对于希望摆脱微信应用束缚，使用 RSS 阅读器管理微信公众号内容的用户来说，WeRSS 是一个理想的选择。同时，其完善的 API 接口和 Webhook 支持，也为企业级应用和二次开发提供了可能。参考资料WeRSS GitHub 仓库 - 项目主页WeRSS 知乎专栏文章 - 项目介绍