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. 系统架构图

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[钉钉/微信/飞书/自定义]

mermaid

系统架构图

二、系统工作原理

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 的完整流程:

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

mermaid

工作流程时序图

3. 数据模型

系统的核心数据模型包括以下几个实体:

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:latest

D. 升级更新

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. 克隆项目
git clone https://github.com/rachelos/we-mp-rss.git
cd we-mp-rss
  1. 安装 Python 依赖
pip install -r requirements.txt
  1. 配置数据库

复制配置文件模板并修改:

cp config.example.yaml config.yaml
  1. 启动服务
python main.py -job True -init True

C. 前端开发

  1. 安装前端依赖
cd we-mp-rss/web_ui
yarn install
  1. 启动前端服务
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_URLRSS 域名地址
RSS_LOCALFalse是否使用本地 RSS 链接
RSS_TITLERSS 标题
RSS_DESCRIPTIONRSS 描述
RSS_COVERRSS 封面
RSS_FULL_CONTEXTTrue是否显示全文
RSS_ADD_COVERTrue是否添加封面图片
RSS_CDATAFalse是否启用 CDATA
RSS_PAGE_SIZE30RSS 分页大小

E. 通知配置

配置项默认值说明
SEND_CODETrue是否发送授权二维码通知
CODE_TITLEWeRSS授权二维码二维码通知标题
DINGDING_WEBHOOK钉钉通知 Webhook URL
WECHAT_WEBHOOK微信通知 Webhook URL
FEISHU_WEBHOOK飞书通知 Webhook URL
CUSTOM_WEBHOOK自定义通知 Webhook URL
WEBHOOK.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。这种架构带来了以下优势:

  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 仓库 - 项目主页
  2. WeRSS 知乎专栏文章 - 项目介绍
最后修改:2026 年 01 月 17 日
如果觉得我的文章对你有用,请随意赞赏