本文是一篇通用教程介绍如何从零搭建类似 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.10Git四、搭建步骤概览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.pySSH 自动打包Git 在服务器上git clone目标目录示例/opt/stock-news-publisher/backend6.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] DescriptionStock News Publisher API Afternetwork.target ​ [Service] Typesimple WorkingDirectory/opt/stock-news-publisher/backend EnvironmentPATH/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 Restartalways RestartSec5 ​ [Install] WantedBymulti-user.target启用systemctl daemon-reload systemctl enable stock-news-publisher systemctl start stock-news-publisher systemctl status stock-news-publisher6.4 防火墙# firewalld 示例 firewall-cmd --add-port8000/tcp --permanent firewall-cmd --reload生产环境建议前面加Nginx HTTPS仅暴露 443 端口。七、核心配置说明.env中常用项ADMIN_USERNAMEadmin ADMIN_PASSWORD请改为强密码 JWT_SECRET请改为随机长字符串 ​ WECHAT_APP_IDwxXXXXXXXX WECHAT_APP_SECRETxxxxxxxx ​ SCHEDULE_HOUR8 SCHEDULE_MINUTE0 TIMEZONEAsia/Shanghai配置作用SCHEDULE_HOUR/MINUTE每天几点执行改后需systemctl restartTIMEZONE定时时区国内用Asia/ShanghaiWECHAT_*微信接口凭证八、微信发布权限常见问题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 项目实践整理可按同样思路扩展到其他资讯类公众号场景。