Issue #29 全链路跑通(含公众号草稿发布)
2026-01-30 12:47 · run_id=053da42d… · 目标:10:00 可读可听
可视化展示:全自动 / 半自动 / 手动,以及每天怎么跑、坏了怎么修
这次我们把 Issue #29 从“能产物”推进到“能自动发布草稿”:刷新 Weibo AI 热门快照 → 汇总 GitHub/YouTube → 去重与打分(MVP)→ 生成 Digest / 播客 / 分发包 → 自动推送到公众号草稿箱。下面按自动化等级把流程拆开,方便你把它装进 launchd(03:30 + 10:00)并长期稳定跑。
TL;DR
- AUTO 本次 run 已完成:Weibo 刷新、GitHub/YouTube 采集、Digest/播客/分发包生成。
- AUTO 公众号草稿箱发布成功:
wechat.draft_published=1(不会公开发布)。 - SEMI 小红书/小宇宙仍建议保持“半自动”(生成包 + 人工确认),避免风控与误发布。
- MANUAL 播客公网订阅仍缺:音频与 RSS 托管(R2/S3/HTTPS)+ 多期 feed。
证据(本次 run):projects/gh-issue-29-ai-digest-podcast/outputs/runs/run-2026-01-30-053da42d939e496daa2963cb54a11b64.json。
End-to-End Flow
同一张图标注 “AUTO / SEMI / MANUAL”
Automation Map
按“你每天要不要碰它”分级
AUTO 全自动(已跑通)
- GitHub Search 拉取(1 query)
- YouTube RSS 拉取(4 channels;@handle 自动解析并缓存)
- Digest / WeChat MD / XHS content.yaml / Podcast mp3 + feed.xml 生成
- 公众号草稿箱发布(本次成功;默认需要显式开关)
- SQLite 落盘与 metrics(runs/items/run_metrics)
SEMI 半自动(建议保留人工点)
- Weibo 刷新:依赖登录态(长期运行需偶尔补登录/防风控)
- 公众号“公开发布”:仍建议人工在草稿箱审阅后点发布
- 小红书发布:脚本可自动填充,但停在发布前确认
- 定时任务:模板已写,安装到 launchd 需要一次手动
MANUAL 手动/缺失(下一阶段)
- 播客托管与 HTTPS feed(R2/S3 上传 + 多期 RSS)
- LLM 摘要与 ck/成本账本(目前仅占位:
cost.usd=0) - 小宇宙上传与分发策略(风控/审核)
- RSSHub/FreshRSS 真接入(目前未消费 RSS 源)
为什么这么分级? 最懂“长期自动化”的人(SRE/数据系统)会说:默认保留人工闸门,先确保每个阶段可复盘(SQLite+metrics),再逐步移除人工点。
How To (Daily)
你要的“一看就能跑”:每天怎么做、怎么装进定时任务
| 阶段 | 自动化等级 | 怎么跑(最小命令) | 产物/去哪里看 |
|---|---|---|---|
| 夜间刷新来源 | SEMI | python3 projects/gh-issue-29-ai-digest-podcast/run_mvp.py --enable-network --refresh-weibo |
Weibo JSON:search-flow/search/hot-search-pipeline/outputs/*_weibo_ai_trending.jsonDashboard: *_weibo_ai_dashboard.html
|
| 生成 Digest / 播客 / 分发包 | AUTO | python3 projects/gh-issue-29-ai-digest-podcast/run_mvp.py --enable-network |
Digest:projects/gh-issue-29-ai-digest-podcast/outputs/digest/<date>/digest.mdPodcast: outputs/podcast/<date>/podcast.mp3
|
| 推送公众号草稿箱 | AUTO(需开关) | python3 projects/gh-issue-29-ai-digest-podcast/run_mvp.py --publish-wechat --enable-network |
公众号后台:草稿箱(本次已成功写入草稿箱) |
| 本地听播客(MVP) | AUTO |
cd projects/gh-issue-29-ai-digest-podcast/outputs/podcast/<date> && python3 -m http.server 8787
|
http://localhost:8787/feed.xml |
| 小红书发布 | SEMI | (先生成 content.yaml,再用 Playwright 脚本自动填充,发布前停住) |
projects/gh-issue-29-ai-digest-podcast/outputs/xhs/<date>/content.yaml |
装进 launchd(03:30 + 10:00)
模板已在:projects/gh-issue-29-ai-digest-podcast/scheduler/(不会自动安装)。
关键点:run_nightly.sh 支持 ENABLE_NETWORK=1、REFRESH_WEIBO=1;run_morning_publish.sh 支持 PUBLISH_WECHAT=1。
When It Breaks
按“最常见故障”给出 1 分钟定位路径
Weibo 刷新失败
- 症状:
weibo.refresh.ok=0或无新*_weibo_ai_trending.json - 原因:登录态过期 / Visitor System 风控 / headless 被拦
- 修复:先手动登录一次(search-flow 复用 persistent context),再重跑
公众号发布失败
- 症状:
wechat.draft_published=0 - 原因:IP 白名单 / token 过期 / 网络封面下载失败
- 修复:项目会尝试跑
npm run wechat:ip自动修;仍失败再看 ref 工程日志
YouTube channels 变 0
- 症状:
youtube.channels.ok下降、或 warnings - 修复:删除并重建缓存:
projects/gh-issue-29-ai-digest-podcast/data/youtube_channel_cache.json
GitHub rate limit
- 症状:warnings 里出现 403 / rate limit
- 修复:设置
GITHUB_TOKEN(可选但强烈建议)
Next Action
One next action:把播客从“本地可听”升级为“手机可订阅”——接入 R2 上传 podcast.mp3 + feed.xml,并把
PODCAST_BASE_URL 改成公网 HTTPS 域名(这一步能显著提升“通勤价值”)。