ByteNoteByteNote

字节笔记本

2026年8月29日

GitHub Action + Podwise:自动听中文播客热榜

API中转
¥120

中文播客每天上新很多,真要听完热榜不现实。有人把《枫言枫语》的中文播客榜做成了定时 GitHub Action,每天把热门节目、热门播客、新锐节目写成 JSON;再把小宇宙链接丢给 Podwise CLI,就能自动出转录、摘要和思维导图。后面用关键词搜一下,热点大概在聊什么,不用先戴上耳机。

整条链路是:GitHub Action 抓热榜 → Podwise 转录和摘要 → 关键词检索。

热榜数据从哪来

仓库是 cellinlab/xyzrank,fork 自 eddiehe99/xyzrank(上游已经 archived)。数据源是 xyzrank.com,作者是播客《枫言枫语》。Action 每天 UTC 12:00 跑一次(也可以在仓库里手动触发),调官方 API 分页拉取,再把结果 commit 回去。

脚本 update_data.py 拉这四份:

文件内容
hot_episodes.json热门节目
full.json热门播客
hot_episodes_new.json新锐节目
new_podcasts.json新锐播客

每条节目大概有这些字段:titlepodcastNamelink(小宇宙 URL)、playCountdurationpostTimelink 正好能喂给 Podwise。

托管页 xyzrank.eddiehe.top 也挂过这几份 JSON,更新不一定跟 fork 同步。要最新数据,直接读仓库里的 raw 文件更稳。

先把榜拉下来

不必自己 fork。本地看一眼热门节目:

bash
curl -sL https://raw.githubusercontent.com/cellinlab/xyzrank/main/hot_episodes.json \
  | python3 -c "
import json,sys
eps=json.load(sys.stdin)['data']['episodes']
for i,e in enumerate(eps[:10],1):
    print(f\"{i}. {e['podcastName']} | {e['title']}\")
    print(f\"   {e['link']}\")
"

想自己养一份每日更新,fork 仓库即可。.github/workflows/daily_update.yml 已经写好:装 Python 3.13、跑 update_data.py、有变更就 commit。权限只要 contents: write

装 Podwise CLI

podwise-cli 是 Go 写的命令行,给代理和脚本用。文档写明:CLI 和 MCP 需要 Podwise 的 Pro 或 Enterprise。

macOS:

bash
brew install hardhackerlabs/podwise-tap/podwise

其它平台:

bash
curl -sL https://raw.githubusercontent.com/hardhackerlabs/podwise-cli/main/install.sh | sh

授权一次:

bash
podwise auth
podwise config show

已经有 key 的话:

bash
podwise config set api_key your-sk-xxxx

配置落在 ~/.config/podwise/config.toml

接编码代理可以装 Skill,或开 MCP:

bash
npx skills add hardhackerlabs/podwise-cli
podwise mcp

把热榜喂给 Podwise

podwise process 认小宇宙、YouTube、Podwise 链接,也认本地音频。热榜里的 link 就是小宇宙,可以直接丢进去。

本机先处理前 5 条(已经听过的会重复消耗额度,建议自己记一份已处理 URL):

bash
curl -sL https://raw.githubusercontent.com/cellinlab/xyzrank/main/hot_episodes.json \
  > /tmp/hot_episodes.json

python3 - <<'PY'
import json, subprocess
eps=json.load(open("/tmp/hot_episodes.json"))["data"]["episodes"][:5]
for e in eps:
    url=e.get("link") or ""
    if not url: continue
    print("process", e["podcastName"], e["title"])
    subprocess.run(["podwise","process",url], check=False)
PY

处理完按链接取结构化结果:

bash
podwise get summary   "$URL"
podwise get mindmap   "$URL"
podwise get keywords  "$URL"
podwise get chapters  "$URL"
podwise get transcript "$URL"

关键词检索用 asksearch

bash
podwise ask "最近中文播客在聊什么 AI 和宏观"
podwise search episode "AI Agent" --limit 10
podwise popular

popular 是 Podwise 自己的热门,和 xyzrank 的中文榜不是同一份数据。想盯中文圈,继续用 xyzrank 的 JSON。

想每天自动跑

本机 cron 或另一条 GitHub Action 都可以。Action 里注意两件事:Podwise 的 API key 放进 Actions secrets,不要写进仓库;每天只处理新增 link,用一个 seen.json 去重。

示意(本机或自托管 runner,官方 ubuntu-latest 每次都是新机器,要自己把 CLI 装进去):

yaml
name: listen-hot-podcasts
on:
  schedule:
    - cron: "30 13 * * *"
  workflow_dispatch:
jobs:
  listen:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: install podwise
        run: curl -sL https://raw.githubusercontent.com/hardhackerlabs/podwise-cli/main/install.sh | sh
      - name: process new hot episodes
        env:
          PODWISE_API_KEY: ${{ secrets.PODWISE_API_KEY }}
        run: |
          podwise config set api_key "$PODWISE_API_KEY"
          curl -sL https://raw.githubusercontent.com/cellinlab/xyzrank/main/hot_episodes.json \
            > hot_episodes.json
          python3 scripts/process_new.py

process_new.py 自己写就行:读 hot_episodes.json,和昨天的 seen.json 做差集,对新 URL 调 podwise process,再把摘要写进当天的 markdown。额度有限的话,先按 primaryGenreName 滤「科技」「创业」,或只取 playCount 前 10。

几个坑

  • 托管 JSON 可能停更,以 cellinlab/xyzrank 的 raw 文件为准。
  • 热榜很长,全量 process 会很快烧掉 Podwise 额度。先截前几条,或按分类筛。
  • CLI 要登录后的 API key。GitHub Action 里用 secret,本机用 podwise auth
  • 小宇宙链接失效或节目下架时,process 会失败,脚本里不要 check=True 一刀切。
  • 榜单是播放量热度,不等于信息密度。摘要能帮你决定听不听,替代不了原片里的语气和细节。

小结

xyzrank 解决「今天中文播客热什么」,Podwise 解决「这条不用完整听完也能知道在讲什么」。中间只隔一层 JSON 里的小宇宙链接。自己 fork 养榜,或直接 curl 别人已经跑着的 Action 产物,都能接上。

分享: