如何搭建「热点资讯 → 微信公众号」自动发布系统
本文是一篇通用教程,介绍如何从零搭建类似 StockNewsPublisher 的系统:定时抓取公开资讯,生成图文,推送到微信公众号。不绑定特定服务器或账号,可按需替换数据源与部署环境。
一、系统能做什么
典型流程:
定时任务 → 抓取热点数据 → 组装 HTML 文章 → 微信草稿箱 → (可选)API 自动发布
适用场景:
股市/财经早报
行业资讯汇总
运营类公众号的半自动内容更新
二、为什么需要后端服务器
微信公众号的AppSecret、access_token、发布接口只能在服务端安全使用:
不能写进 Android/iOS App(会泄露)
不能纯前端网页调用(跨域 + 密钥暴露)
因此标准架构是:
[可选手机 App] ──HTTP──► [你的 Python/Node 后端] ──HTTPS──► [微信 API] │ [数据源 API]
手机 App不是必须的;只要后端在云服务器上 7×24 运行,就能每天自动执行。
三、前置条件
3.1 公众号
已注册微信公众号(订阅号或服务号)
管理员能登录 微信开发者平台
获取AppID、AppSecret(路径:我的业务 → 公众号 → 基础信息 → 开发密钥)
将后端服务器公网 IP加入API IP 白名单(同页开发密钥)
3.2 服务器
任选其一:
云厂商 Linux 虚拟机(阿里云、腾讯云等)
家庭/NAS 机器(需有公网 IP 或内网穿透,且 IP 能加入微信白名单)
建议配置:1 核 1G 内存即可;系统 Ubuntu 22.04 / CentOS 7+。
3.3 本地开发环境(可选)
Python 3.10+
Git
四、搭建步骤概览
1. 准备公众号 AppID / AppSecret / IP 白名单 2. 克隆或复制项目代码 3. 配置 backend/.env 4. 本地试运行验证 5. 部署到云服务器 + systemd 开机自启 6. 手动触发一次发布,检查草稿箱或已发文章 7. 确认定时任务在目标时间执行
五、本地试运行
以 StockNewsPublisher 为例(其他框架思路相同):
cd StockNewsPublisher/backend python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # 编辑 .env,填写微信与管理员账号 uvicorn app.main:app --host 0.0.0.0 --port 8000
浏览器访问:
http://127.0.0.1:8000/health
应看到wechat_configured: true(填好微信配置后)。
测试发布
# 登录 curl -X POST http://127.0.0.1:8090/api/login \ -H "Content-Type: application/json" \ -d '{"username":"123","password":"123"}' # 发布(替换 TOKEN) curl -X POST http://127.0.0.1:8000/api/publish \ -H "Authorization: Bearer TOKEN"然后登录 微信公众平台 →内容管理 → 草稿箱,确认是否出现新文章。
六、部署到 Linux 服务器
6.1 上传代码
方式任选:
scp/rsync上传backend/目录使用项目自带的
deploy.py(SSH + 自动打包)Git 在服务器上
git clone
目标目录示例:/opt/stock-news-publisher/backend
6.2 安装依赖
cd /opt/stock-news-publisher/backend python3 -m venv venv ./venv/bin/pip install -r requirements.txt cp .env.example .env nano .env # 填写生产配置
6.3 使用 systemd 守护进程
创建/etc/systemd/system/stock-news-publisher.service:
[Unit] Description=Stock News Publisher API After=network.target [Service] Type=simple WorkingDirectory=/opt/stock-news-publisher/backend Environment=PATH=/opt/stock-news-publisher/backend/venv/bin ExecStart=/opt/stock-news-publisher/backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
启用:
systemctl daemon-reload systemctl enable stock-news-publisher systemctl start stock-news-publisher systemctl status stock-news-publisher
6.4 防火墙
# firewalld 示例 firewall-cmd --add-port=8000/tcp --permanent firewall-cmd --reload
生产环境建议前面加Nginx + HTTPS,仅暴露 443 端口。
七、核心配置说明
.env中常用项:
ADMIN_USERNAME=admin ADMIN_PASSWORD=请改为强密码 JWT_SECRET=请改为随机长字符串 WECHAT_APP_ID=wxXXXXXXXX WECHAT_APP_SECRET=xxxxxxxx SCHEDULE_HOUR=8 SCHEDULE_MINUTE=0 TIMEZONE=Asia/Shanghai
| 配置 | 作用 |
|---|---|
SCHEDULE_HOUR/MINUTE | 每天几点执行,改后需systemctl restart |
TIMEZONE | 定时时区,国内用Asia/Shanghai |
WECHAT_* | 微信接口凭证 |
八、微信发布权限(常见问题)
8.1 草稿 vs 自动发布
微信提供两类能力:
草稿箱(
draft/add)— 多数已开通开发者的账号可用发布接口(
freepublish/submit)— 需账号具备相应权限
若 API 返回48001 api unauthorized:
草稿通常已经创建成功
需到公众平台草稿箱手动发表
或使用已认证的企业主体服务号以开通完整发布能力
8.2 AppSecret 在哪里
2025 年 12 月起,不再从 mp.weixin.qq.com 的「基本配置」查看,而是:
微信开发者平台 → 我的业务 → 公众号 → 基础信息 → 开发密钥
忘记 Secret 只能重置,旧 Secret 立即失效。
8.3 IP 白名单
调用服务端 API 时,请求来源 IP 必须在白名单内。 若服务器换 IP 或迁移,记得同步更新。
九、定时任务原理
本项目使用APScheduler的 Cron 触发器:
服务启动时注册「每天 HH:MM 执行」
到点自动:抓数据 → 生成文章 → 调微信接口
无需 crontab,也无需外部再调 HTTP
修改时间 = 改.env+ 重启服务,通过/health的schedule字段验证。
十、可选:Android 客户端
App 仅用于:
在手机上查看今日热点
手动点「立即发布」
日常自动发布不依赖 App。若只做自动早报,可只部署后端。
安装 APK 后,登录页填写:
服务器地址:
http://你的服务器IP:8000用户名/密码:与
.env中ADMIN_*一致
十一、自己换数据源
若要改成别的资讯(科技、体育等),只需替换news_service.py中的抓取逻辑:
找到稳定、允许抓取的 HTTP API 或 RSS
解析为统一结构:
title、summary、url在
_build_article_html()中渲染成 HTML其余微信发布流程可复用
注意遵守目标网站 robots 协议与服务条款。
十二、检查清单(上线前)
.env中密码、JWT、AppSecret 已修改,且未提交 Git- 微信 IP 白名单已添加服务器公网 IP
/health返回wechat_configured: true- 手动
/api/publish能在草稿箱看到文章 journalctl无持续报错- 定时时间
/health显示正确 - 明确账号是否有 API 自动发布权限;若无,运营流程包含「草稿箱人工发表」
十三、延伸阅读
微信公众号 — 新增草稿
微信公众号 — 发布草稿
开发接口管理迁移说明
十四、免责声明
资讯内容来源于第三方公开数据,不构成投资建议
自动化发布需遵守微信公众平台运营规范
请合法合规使用爬虫与 API,尊重数据源版权与访问限制
基于 StockNewsPublisher 项目实践整理,可按同样思路扩展到其他资讯类公众号场景。
