END-TO-END RUN

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)并长期稳定跑。

WEIBO REFRESHYOUTUBE RSSGITHUB SEARCHSQLITEDIGEST.MDPODCASTWECHAT DRAFTXHS PACKAGE

TL;DR

Items Collected
90
Top Rendered
10
YouTube Channels
4 OK
WeChat Draft
OK

证据(本次 run)projects/gh-issue-29-ai-digest-podcast/outputs/runs/run-2026-01-30-053da42d939e496daa2963cb54a11b64.json

End-to-End Flow

同一张图标注 “AUTO / SEMI / MANUAL”

COLLECT Weibo refresh Playwright 登录态 · 输出 JSON 快照 GitHub search API 搜索 · 可选 token YouTube RSS @handle 自动解析 channel_id(缓存) PIPELINE CORE Normalize + Dedupe URL canon + per-source score SQLite store + metrics items / runs / run_metrics Render outputs Digest / WeChat MD / XHS / Podcast DISTRIBUTION WeChat Draft 自动推草稿箱(需开关) XHS publish Playwright 停在“发布前确认” Podcast hosting R2/S3 + HTTPS feed(未做) Xiaoyuzhou 上传(未做)
Legend: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.json
Dashboard:*_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.md
Podcast: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=1REFRESH_WEIBO=1run_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 域名(这一步能显著提升“通勤价值”)。

“自动化的尽头不是更少的人工,而是更强的可复盘。”
Closing Summary · AUTO vs SEMI vs MANUAL