完全开源 | 免费部署 | RSS 订阅 | 文章抓取 | 反风控
100% 开源,100% 免费。 代码完全公开,私有化部署无任何限制,不搞"开源"之名行收费之实。
- RSS 订阅 — 订阅任意公众号,自动定时拉取新文章(包含完整文章内容和图片),生成标准 RSS 2.0 源,接入 FreshRSS / Feedly 等阅读器即可使用
- 文章内容获取 — 通过 URL 获取文章完整内容(标题、作者、正文 HTML / 纯文本、图片列表)
- 反风控体系 — Chrome TLS 指纹模拟 + SOCKS5 代理池轮转 + 三层自动限频,有效对抗微信封控
- 文章列表 & 搜索 — 获取任意公众号历史文章列表,支持分页和关键词搜索
- 公众号搜索 — 按名称搜索公众号,获取 FakeID
- 扫码登录 — 微信公众平台扫码登录,凭证自动保存,4 天有效期
- 图片代理 — 代理微信 CDN 图片,解决防盗链问题
- Webhook 通知 — 登录过期提醒(提前24h/6h预警+已过期通知)、触发验证等事件自动推送(支持企业微信机器人)
- API 文档 — 自动生成 Swagger UI / ReDoc,在线调试所有接口
最快速的部署方式,无需配置 Python 环境,一键启动:
# 方式一:使用 docker-compose(推荐)
git clone https://github.com/tmwgsicp/wechat-download-api.git
cd wechat-download-api
cp env.example .env
# 编辑 .env 设置 SITE_URL 为实际访问地址
docker-compose up -d
# 方式二:直接运行
docker run -d \
-p 5000:5000 \
-v $(pwd)/data:/app/data \
-v $(pwd)/.env:/app/.env \
--name wechat-api \
tmwgsicp/wechat-download-api:latest服务启动后访问 http://localhost:5000/login.html 扫码登录即可使用。
支持多架构:linux/amd64 / linux/arm64(Apple Silicon、树莓派、ARM 服务器)
不想折腾部署?30 秒注册即可使用 👉 wechatrss.waytomaster.com
搜索公众号名称,拿到 RSS 链接,丢进你的阅读器——Feedly、Inoreader、NetNewsWire 全部兼容。
| 套餐 | 公众号数量 | 价格 |
|---|---|---|
| 免费版 | 2 个 | ¥0 |
| 基础版 | 20 个 | ¥9.9/月 |
| 专业版 | 50 个 | ¥19.9/月 |
免费版够用就一直免费,不够了再升级,没有套路。
本工具需要通过微信公众平台后台的登录凭证来调用接口,因此使用前需要:
- 拥有一个微信公众号(订阅号、服务号均可)
- 部署并启动服务后,访问登录页面用公众号管理员微信扫码登录
- 登录成功后凭证自动保存到
.env文件,有效期约 4 天,过期后需重新扫码
登录后即可通过 API 获取任意公众号的公开文章(不限于自己的公众号)。
本地电脑可以直接使用! 不需要公网服务器——在本地启动服务后通过
localhost访问即可完成扫码登录和全部功能。只有当你需要从其他设备(如手机 RSS 阅读器)远程访问时,才需要公网服务器或内网穿透。
# 1. 克隆项目
git clone https://github.com/tmwgsicp/wechat-download-api.git
cd wechat-download-api
# 2. 配置环境变量
cp env.example .env
# 编辑 .env,设置 SITE_URL 为实际访问地址(如 http://your-domain.com)
# 3. 启动服务
docker-compose up -d
# 4. 查看日志
docker-compose logs -f第一步:克隆项目
git clone https://github.com/tmwgsicp/wechat-download-api.git
cd wechat-download-api第二步:一键启动
bash start.sh # Linux/macOS
# 或
start.bat # Windows脚本会自动完成环境检查、虚拟环境创建、依赖安装和服务启动。
第三步:扫码登录
访问 http://localhost:5000/login.html,用公众号管理员微信扫码登录。
| 地址 | 说明 |
|---|---|
| http://localhost:5000 | 管理面板 |
| http://localhost:5000/login.html | 扫码登录 |
| http://localhost:5000/api/docs | Swagger API 文档 |
| http://localhost:5000/api/health | 健康检查 |
start.sh 脚本在 Linux 上以 sudo 运行时,会自动注册 systemd 服务并启用开机自启:
sudo bash start.sh之后可通过以下命令管理服务:
# 查看运行状态
bash status.sh
# 停止服务
bash stop.sh
# 手动操作
sudo systemctl restart wechat-download-api
sudo systemctl status wechat-download-api如需通过域名或 HTTPS 访问,配置 Nginx 反向代理到 localhost:5000:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}复制 env.example 为 .env 并按需修改:
cp env.example .env主要配置项参见 env.example 中的注释说明。
POST /api/article — 解析微信公众号文章,返回标题、正文、图片等结构化数据
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | 是 | 微信文章链接(https://mp.weixin.qq.com/s/...) |
请求示例:
curl -X POST http://localhost:5000/api/article \
-H "Content-Type: application/json" \
-d '{"url": "https://mp.weixin.qq.com/s/xxxxx"}'返回字段:title 标题、content HTML 正文、plain_content 纯文本正文、author 作者、publish_time 发布时间戳、images 图片列表
GET /api/public/searchbiz — 按关键词搜索微信公众号,获取 FakeID
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query |
string | 是 | 搜索关键词(公众号名称) |
请求示例:
curl "http://localhost:5000/api/public/searchbiz?query=公众号名称"返回字段:list[] 公众号列表,每项包含 fakeid、nickname、alias、round_head_img
GET /api/public/articles — 获取指定公众号的文章列表,支持分页
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
fakeid |
string | 是 | 目标公众号的 FakeID(从搜索接口获取) |
begin |
int | 否 | 偏移量,默认 0 |
count |
int | 否 | 获取数量,默认 10,最大 100 |
keyword |
string | 否 | 在该公众号内搜索关键词 |
请求示例:
# 获取前 50 篇
curl "http://localhost:5000/api/public/articles?fakeid=YOUR_FAKEID&begin=0&count=50"
# 获取第 51-100 篇
curl "http://localhost:5000/api/public/articles?fakeid=YOUR_FAKEID&begin=50&count=50"GET /api/public/articles/search — 在指定公众号内按关键词搜索文章
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
fakeid |
string | 是 | 目标公众号的 FakeID |
query |
string | 是 | 搜索关键词 |
begin |
int | 否 | 偏移量,默认 0 |
count |
int | 否 | 获取数量,默认 10,最大 100 |
请求示例:
curl "http://localhost:5000/api/public/articles/search?fakeid=YOUR_FAKEID&query=关键词"GET /api/rss/{fakeid} — 获取指定公众号的 RSS 2.0 订阅源
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
fakeid |
string(路径) | 是 | 公众号 FakeID |
limit |
int(查询) | 否 | 返回文章数量上限,默认 20 |
使用方式:
# 1. 搜索公众号获取 fakeid
curl "http://localhost:5000/api/public/searchbiz?query=人民日报"
# 返回 fakeid: MzA1MjM1ODk2MA==
# 2. 添加订阅
curl -X POST http://localhost:5000/api/rss/subscribe \
-H "Content-Type: application/json" \
-d '{"fakeid": "MzA1MjM1ODk2MA==", "nickname": "人民日报"}'
# 3. 手动触发一次轮询(立即拉取文章)
curl -X POST http://localhost:5000/api/rss/poll
# 4. 获取 RSS 源(把这个地址添加到 RSS 阅读器)
curl "http://localhost:5000/api/rss/MzA1MjM1ODk2MA=="也可以通过管理面板的 RSS 订阅 页面可视化管理,搜索公众号一键订阅并复制 RSS 地址。
关于 RSS 内容: RSS 源包含完整文章内容(图文混排),您可以直接在 RSS 阅读器中阅读全文。
系统使用 SOCKS5 代理池 + Chrome TLS 指纹模拟技术获取文章内容,有效规避微信风控。
扫码登录后,系统会自动将微信凭证用于内容获取,无需手动配置。如需禁用完整内容获取(仅保留标题和摘要),可在
.env中设置RSS_FETCH_FULL_CONTENT=false。
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/rss/subscribe |
添加 RSS 订阅 |
DELETE |
/api/rss/subscribe/{fakeid} |
取消 RSS 订阅 |
GET |
/api/rss/subscriptions |
获取订阅列表 |
POST |
/api/rss/poll |
手动触发轮询 |
GET |
/api/rss/status |
轮询器状态 |
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/image?url=IMG_URL |
图片代理(仅限微信 CDN 域名) |
GET |
/api/health |
健康检查 |
GET |
/api/stats |
限频统计 |
POST |
/api/login/session/{id} |
初始化登录会话 |
GET |
/api/login/getqrcode |
获取登录二维码 |
GET |
/api/login/scan |
检查扫码状态 |
POST |
/api/login/bizlogin |
完成登录 |
GET |
/api/login/info |
获取登录信息 |
GET |
/api/admin/status |
查询登录状态 |
POST |
/api/admin/logout |
退出登录 |
完整的接口文档请访问 http://localhost:5000/api/docs
复制 env.example 为 .env,登录后凭证会自动保存:
cp env.example .env| 配置项 | 说明 | 默认值 |
|---|---|---|
WECHAT_TOKEN |
微信 Token(登录后自动填充) | - |
WECHAT_COOKIE |
微信 Cookie(登录后自动填充) | - |
WECHAT_FAKEID |
公众号 FakeID(登录后自动填充) | - |
WECHAT_EXPIRE_TIME |
凭证过期时间(登录后自动填充) | - |
WEBHOOK_URL |
Webhook 通知地址(支持企业微信机器人) | 空 |
WEBHOOK_NOTIFICATION_INTERVAL |
同一事件通知最小间隔(秒) | 300 |
RATE_LIMIT_GLOBAL |
全局每分钟请求上限 | 10 |
RATE_LIMIT_PER_IP |
单 IP 每分钟请求上限 | 5 |
RATE_LIMIT_ARTICLE_INTERVAL |
文章请求最小间隔(秒) | 3 |
RSS_POLL_INTERVAL |
RSS 轮询间隔(秒) | 3600 |
RSS_FETCH_FULL_CONTENT |
RSS 是否获取完整内容(true/false) | true |
PROXY_URLS |
SOCKS5 代理池地址(强烈建议配置,避免账号风控) | 空 |
SITE_URL |
网站访问地址(用于RSS图片代理,必须配置) | http://localhost:5000 |
PORT |
服务端口 | 5000 |
HOST |
监听地址 | 0.0.0.0 |
DEBUG |
调试模式(开启热重载) | false |
⚠️ 重要:SITE_URL必须配置为实际访问地址(IP或域名),否则RSS图片无法正常显示。例如:
- 本地开发:
http://localhost:5000- 局域网部署:
http://192.168.1.100:5000- 公网域名:
https://你的域名.com
重要提示:
⚠️ 启用完整内容获取时,强烈建议配置代理池,避免账号被微信风控⚠️ 不配置代理直连微信可能导致:频繁验证、账号限制、IP封禁- ✅ 配置2-3个代理IP可有效分散请求,降低风控风险
用途:获取文章完整内容时分散请求 IP,配合 Chrome TLS 指纹模拟,有效规避微信风控。
本项目使用
curl_cffi模拟 Chrome TLS 指纹,请求特征与真实浏览器一致,配合代理池效果更佳。
方案:多台 VPS 自建 SOCKS5 代理
准备 2-3 台低价 VPS(各大云厂商轻量应用服务器即可,¥20-30/月/台),每台运行一个 SOCKS5 代理服务。推荐 gost(Go 语言实现,单二进制文件,无依赖)。
第一步:在每台 VPS 上安装 gost
# 下载最新版(以 Linux amd64 为例,其他架构请去 GitHub Releases 页面选择)
# 国外服务器直接下载
wget https://github.com/go-gost/gost/releases/download/v3.2.6/gost_3.2.6_linux_amd64.tar.gz
# 国内服务器使用加速镜像(任选一个可用的)
wget https://gh-proxy.com/https://github.com/go-gost/gost/releases/download/v3.2.6/gost_3.2.6_linux_amd64.tar.gz
# 或
wget https://ghproxy.cc/https://github.com/go-gost/gost/releases/download/v3.2.6/gost_3.2.6_linux_amd64.tar.gz
# 解压并移动到系统路径
tar -xzf gost_3.2.6_linux_amd64.tar.gz
mv gost /usr/local/bin/
chmod +x /usr/local/bin/gost
# 验证安装
gost -V第二步:启动 SOCKS5 代理服务
# 带用户名密码认证(推荐,替换 myuser / mypass 和端口)
gost -L socks5://myuser:mypass@:1080
# 不带认证(仅内网或已配置防火墙时使用)
gost -L socks5://:1080第三步:配置为 systemd 服务(开机自启)
cat > /etc/systemd/system/gost.service << 'EOF'
[Unit]
Description=GOST Proxy
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/gost -L socks5://myuser:mypass@:1080
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable gost
systemctl start gost第四步:开放防火墙端口
# 仅允许你的主服务器 IP 连接(替换为实际 IP)
ufw allow from YOUR_MAIN_SERVER_IP to any port 1080
# 或者如果用的是云厂商安全组,在控制台添加入站规则:
# 端口 1080 / TCP / 来源 IP 限制为你的主服务器第五步:在主服务器 .env 中配置代理池
PROXY_URLS=socks5://myuser:mypass@vps1-ip:1080,socks5://myuser:mypass@vps2-ip:1080,socks5://myuser:mypass@vps3-ip:1080配置后重启服务,每次文章请求会轮流使用不同的代理 IP。可以通过 GET /api/health 确认代理池状态。留空则直连(默认行为)。
├── app.py # FastAPI 主应用
├── requirements.txt # Python 依赖
├── env.example # 环境变量示例
├── data/ # 数据目录(运行时自动创建)
│ └── rss.db # RSS 订阅 SQLite 数据库
├── routes/ # API 路由
│ ├── article.py # 文章内容获取
│ ├── articles.py # 文章列表
│ ├── rss.py # RSS 订阅管理与输出
│ ├── search.py # 公众号搜索
│ ├── login.py # 扫码登录
│ ├── admin.py # 管理接口
│ ├── image.py # 图片代理
│ ├── health.py # 健康检查
│ └── stats.py # 统计信息
├── utils/ # 工具模块
│ ├── auth_manager.py # 认证管理
│ ├── helpers.py # HTML 解析
│ ├── http_client.py # HTTP 客户端(curl_cffi + 代理池)
│ ├── proxy_pool.py # 代理池轮转
│ ├── rate_limiter.py # 限频器
│ ├── rss_store.py # RSS 数据存储(SQLite)
│ ├── rss_poller.py # RSS 后台轮询器
│ ├── login_reminder.py # 登录过期提醒(主动检测)
│ ├── content_processor.py # 内容处理与图片代理
│ ├── image_proxy.py # 图片URL代理工具
│ ├── article_fetcher.py # 批量并发获取文章
│ └── webhook.py # Webhook 通知
└── static/ # 前端页面(含 RSS 管理)
本项目支持多种微信公众号内容类型,包括标准富文本、纯图片文章、图文消息、短内容、音频文章等。
详细说明请查看:CONTENT_TYPES.md
文档内容:
- 所有支持的内容类型及
item_show_type值 - 不可用状态识别(删除、违规、隐私、验证页面等)
- 反爬策略与代理配置
- 关键函数说明
- 开发贡献指南
提示"服务器未登录"
访问 http://localhost:5000/login.html 扫码登录,凭证会自动保存到 .env。
触发微信风控 / 需要验证
- 在浏览器中打开提示的文章 URL 完成验证
- 等待 30 分钟后重试
- 降低请求频率(系统已内置自动限频)
如何获取公众号的 FakeID
调用搜索接口:GET /api/public/searchbiz?query=公众号名称,从返回结果的 fakeid 字段获取。
Token 多久过期?如何提前知道?
Cookie 登录有效期约 4 天,系统会:
- 前端显示到期时间(
/api/admin/status接口返回expireTime和isExpired字段) - 后台每 6 小时主动检测,提前 24h / 6h 通过 Webhook 预警
- 过期后立即通过 Webhook 通知
配置 WEBHOOK_URL(支持企业微信群机器人)可收到实时提醒,避免因凭证过期导致 RSS 轮询失败或搜索功能不可用。
可以同时登录多个公众号吗
当前版本不支持多账号。建议部署多个实例,每个登录不同公众号。
| 层级 | 技术 |
|---|---|
| Web 框架 | FastAPI |
| ASGI 服务器 | Uvicorn |
| HTTP 客户端 | curl_cffi(Chrome TLS 指纹)/ HTTPX(降级) |
| 反风控 | TLS 指纹模拟 + SOCKS5/HTTP 代理池轮转 |
| RSS 存储 | SQLite(零配置,数据本地化) |
| 配置管理 | python-dotenv |
| 运行环境 | Python 3.8+ |
本项目采用 AGPL 3.0 协议开源,所有功能代码完整公开,私有化部署完全免费。
| 使用场景 | 是否允许 |
|---|---|
| 个人学习和研究 | 允许,免费使用 |
| 企业内部使用 | 允许,免费使用 |
| 私有化部署 | 允许,免费使用 |
| 修改后对外提供网络服务 | 需开源修改后的代码 |
详见 LICENSE 文件。
- 本软件按"原样"提供,不提供任何形式的担保
- 本项目仅供学习和研究目的,请遵守微信公众平台相关服务条款
- 使用者对自己的操作承担全部责任
- 因使用本软件导致的任何损失,开发者不承担责任
由于个人精力有限,目前暂不接受 PR,但非常欢迎:
- 提交 Issue — 报告 Bug、提出功能建议
- Fork 项目 — 自由修改和定制
- Star 支持 — 给项目点 Star,让更多人看到
![]() 个人微信 技术交流 · 商务合作 |
![]() 赞赏支持 开源不易,感谢支持 |
- GitHub Issues: 提交问题
- 邮箱: creator@waytomaster.com
- SaaS 托管版: wechatrss.waytomaster.com
- FastAPI — 高性能 Python Web 框架
- curl_cffi — 支持浏览器 TLS 指纹模拟的 HTTP 客户端
- HTTPX — 现代化 HTTP 客户端
- gost — 轻量级代理工具



