skills/muzhicaomingwang/ai-ideas/podcast-publish-xiaoyuzhou

podcast-publish-xiaoyuzhou

SKILL.md

播客发布到小宇宙 Skill

概述

此 Skill 实现了每日科技早报播客的全自动发布流程:播客生成 → RSS.com发布 → 小宇宙同步 → 飞书通知。

项目路径: /Users/qitmac001395/workspace/QAL/ideas/apps/daily-podcast-ai

核心能力

功能 状态 所需配置
早报播客生成 ✅ 可用 ELEVENLABS_API_KEY
RSS.com自动发布 ✅ 可用 RSS_COM_API_KEY + RSS_COM_PODCAST_ID
小宇宙RSS订阅 ✅ 可用 一次性手动配置
飞书消息通知 ✅ 可用 FEISHU_APP_ID + FEISHU_APP_SECRET + FEISHU_RECEIVER_OPEN_ID
定时自动执行 ✅ 可用 macOS launchd (每天7点)

使用方法

方式1: 自动执行(推荐)

无需操作,每天早上7点自动运行:

07:00 - 从缓存读取新闻(0:00-6:00收集的30-50篇)
07:02 - AI优选Top 10新闻
07:05 - 生成对话脚本(双人播报模式)
07:10 - TTS语音合成(ElevenLabs)
07:15 - 合并音频 + 生成封面
07:17 - 发布到RSS.com
07:18 - 发送飞书通知
08:00 - 小宇宙自动同步

方式2: 手动发布指定日期

cd /Users/qitmac001395/workspace/QAL/ideas/apps/daily-podcast-ai

# 发布昨天的播客
python scripts/publish_to_rss.py --date 2026-01-14

# 生成今天的播客并发布
python scripts/daily_generate.py --from-cache && \
python scripts/publish_to_rss.py --date $(date +%Y-%m-%d)

方式3: 仅发送飞书通知

python scripts/notify_feishu.py \
  --date 2026-01-14 \
  --rss-url "https://rss.com/podcasts/xxx/feed.xml" \
  --episode-url "https://rss.com/podcasts/xxx/episodes/ep_xxx" \
  --article-count 10

首次配置指南

步骤1: RSS.com配置(5分钟)

  1. 注册账号: https://rss.com/ → Sign Up

  2. 创建播客: Dashboard → Create New Podcast

    名称: 今日科技早报
    分类: Technology / News
    语言: Chinese (Simplified)
    
  3. 获取凭证:

    • Settings → API Keys → Generate New API Key
    • 复制 API Key: rss_com_sk_xxx
    • 从播客URL获取 Podcast ID
  4. 配置环境变量: 编辑 apps/daily-podcast-ai/.env

    RSS_COM_API_KEY=rss_com_sk_your_actual_key
    RSS_COM_PODCAST_ID=your-podcast-uuid
    

步骤2: 小宇宙订阅配置(3分钟,仅需一次)

  1. 登录创作者平台: https://podcaster.xiaoyuzhoufm.com/podcasts/695e1e64e0970c835fb2e784/home
  2. 添加RSS订阅:
    • 设置 → RSS Feed设置
    • 输入: https://rss.com/podcasts/{YOUR_ID}/feed.xml
    • 点击「验证并导入」
  3. 首次同步: 点击「立即同步」

步骤3: 飞书通知配置(可选,5分钟)

  1. 创建飞书应用: https://open.feishu.cn/app
  2. 添加权限: im:message + im:message:send_as_bot
  3. 配置环境变量:
    FEISHU_APP_ID=cli_xxx
    FEISHU_APP_SECRET=xxx
    FEISHU_RECEIVER_OPEN_ID=ou_18b8063b232cbdec73ea1541dfb74890  # 王植萌
    

步骤4: 测试验证(2分钟)

# 测试发布
python scripts/publish_to_rss.py --date 2026-01-14

# 预期看到:
# ✅ Episode published successfully!
# 📱 发送飞书通知...
# ✅ 飞书消息发送成功

技术架构

集成流程图

┌─────────────┐
│ 早报生成     │  scripts/daily_generate.py
│ (每天7点)    │  - 从cache读取新闻
└──────┬──────┘  - AI优选Top 10
       │         - TTS语音合成
┌─────────────┐
│ 输出文件     │  output/{date}/dailyReport/
│             │  - podcast-{date}-1.2x.mp3
│             │  - cover-{date}.png
└──────┬──────┘  - script-{date}.md
┌─────────────┐
│ RSS发布     │  scripts/publish_to_rss.py
│             │  - 上传音频到RSS.com
└──────┬──────┘  - 创建单集元数据
       ├──────────────────┐
       ↓                  ↓
┌─────────────┐    ┌─────────────┐
│ RSS Feed    │    │ 飞书通知     │  scripts/notify_feishu.py
│ 更新        │    │             │  - 发送卡片消息
└──────┬──────┘    └─────────────┘  - 包含RSS链接
       ↓ (每小时)
┌─────────────┐
│ 小宇宙同步   │  podcaster.xiaoyuzhoufm.com
│             │  - 自动抓取RSS
└─────────────┘  - 发布到App

关键文件

文件 行数 功能
scripts/publish_to_rss.py 376 RSS.com发布主脚本
scripts/notify_feishu.py 191 飞书通知脚本
scripts/daily_generate.py 651 播客生成核心逻辑
scripts/daily_automated_run.sh 100 定时任务执行脚本
docs/XIAOYUZHOU_INTEGRATION.md - 完整集成指南
QUICKSTART_XIAOYUZHOU.md - 5分钟快速开始

环境变量清单

# 必需 - 播客生成
ELEVENLABS_API_KEY=sk_xxx          # TTS语音合成

# 可选 - AI增强
OPENAI_API_KEY=sk-xxx              # AI摘要和优选

# 必需 - RSS发布
RSS_COM_API_KEY=rss_com_sk_xxx    # RSS.com API
RSS_COM_PODCAST_ID=xxx-xxx-xxx     # 播客频道ID

# 可选 - 飞书通知
FEISHU_APP_ID=cli_xxx              # 飞书应用ID
FEISHU_APP_SECRET=xxx              # 飞书密钥
FEISHU_RECEIVER_OPEN_ID=ou_xxx     # 接收者Open ID

代码改进(已实现)

1. 智能文件名识别(publish_to_rss.py:258-269)

问题: 项目生成 podcast-{date}-1.2x.mp3,但脚本期望 podcast-{date}.mp3

解决: 自动查找并使用多速率版本

audio_file = base_path / f"podcast-{args.date}.mp3"
if not audio_file.exists():
    audio_file_12x = base_path / f"podcast-{args.date}-1.2x.mp3"
    audio_file_15x = base_path / f"podcast-{args.date}-1.5x.mp3"

    if audio_file_12x.exists():
        audio_file = audio_file_12x

2. 多端点重试机制(publish_to_rss.py:106-159)

问题: RSS.com API端点可能变化

解决: 依次尝试3个可能的端点

upload_endpoints = [
    f"{self.API_BASE_URL}/upload",
    f"{self.API_BASE_URL}/media",
    f"{self.API_BASE_URL}/podcasts/{self.podcast_id}/media"
]

3. 飞书通知集成(publish_to_rss.py:343-362)

功能: 发布成功后自动调用 notify_feishu.py

特性:

  • 使用 check=False 避免通知失败中断主流程
  • 自动提取文章数量
  • 传递RSS URL和单集URL

飞书消息效果

发布成功后,接收者会收到蓝色卡片消息:

┌─────────────────────────────────────────┐
│ 🎙️ 今日科技早报已发布                    │
├─────────────────────────────────────────┤
│ 📅 日期: 2026-01-14                     │
│ 📰 内容: 精选 10 篇科技新闻              │
│                                         │
│ 📢 发布状态:                             │
│ - ✅ RSS.com 发布成功                    │
│ - ⏳ 小宇宙同步中(预计1小时内)          │
│                                         │
│ 🔗 单集链接: https://rss.com/...        │
│ 📡 RSS Feed: https://rss.com/...feed.xml│
│                                         │
│ ───────────────────────────────────────  │
│ 💡 小宇宙订阅步骤:                       │
│ 1. 打开小宇宙创作者平台                  │
│ 2. 点击「立即同步」查看最新单集          │
│ 3. 首次设置需添加RSS订阅(仅需一次)      │
└─────────────────────────────────────────┘

故障排查

常见问题

问题 症状 解决方案
RSS发布失败 401 Unauthorized 检查API Key是否正确/过期
文件找不到 Missing required files 确认播客已生成,检查output目录
小宇宙未同步 RSS成功但App无单集 手动点击「立即同步」
飞书通知失败 发布成功但无消息 检查应用权限,验证open_id
API端点404 Endpoint not found 查看RSS.com最新API文档

调试命令

# 查看最近的生成日志
tail -50 logs/daily_run.log

# 检查错误日志
tail -50 logs/daily_error.log

# 验证RSS Feed可访问
curl -I "https://rss.com/podcasts/{YOUR_ID}/feed.xml"

# 验证环境变量
python3 -c "from dotenv import load_dotenv; import os; load_dotenv(); \
  print('RSS Key:', bool(os.getenv('RSS_COM_API_KEY'))); \
  print('Podcast ID:', bool(os.getenv('RSS_COM_PODCAST_ID')))"

使用场景

场景1: 每日自动发布(默认)

触发: 每天07:00自动执行 流程: 完整的生成 → 发布 → 通知 无需操作: 配置一次后永久生效

场景2: 补发昨天的播客

# 用户说: "帮我重新发布昨天的播客到小宇宙"
python scripts/publish_to_rss.py --date 2026-01-14

场景3: 仅通知不发布

# 用户说: "通知植萌播客已发布"
python scripts/notify_feishu.py \
  --date 2026-01-14 \
  --rss-url "https://rss.com/podcasts/xxx/feed.xml" \
  --article-count 10

场景4: 生成但不发布

# 用户说: "生成今天的播客但先不发布"
python scripts/daily_generate.py --from-cache
# 不运行 publish_to_rss.py

技术细节

RSS.com API集成

API版本: v4 Base URL: https://api.rss.com/v4 认证方式: Bearer Token

核心端点:

POST /upload                           # 上传文件(主端点)
POST /media                            # 备选端点1
POST /podcasts/{id}/media              # 备选端点2
POST /podcasts/{id}/episodes           # 创建单集
GET  /podcasts/{id}/feed.xml           # RSS Feed

文件上传:

  • 音频: 最大100MB,支持MP3/M4A
  • 封面: 最大5MB,推荐3000x3000px PNG
  • 超时: 120秒

小宇宙集成方式

方式: RSS订阅(非API上传)

优势:

  • ✅ 一次配置,永久生效
  • ✅ 无需逆向工程小宇宙API
  • ✅ 官方支持,稳定可靠
  • ✅ 支持多平台分发

更新频率:

  • 默认: 每小时
  • 可设置: 30分钟/2小时/4小时

飞书通知实现

消息类型: Interactive(卡片消息)

卡片结构:

{
  "header": {"title": "🎙️ 今日科技早报已发布", "template": "blue"},
  "elements": [
    {"tag": "markdown", "content": "📅 日期: {date}\n📰 内容: 精选 {count} 篇..."}
  ]
}

依赖库: httpx>=0.27.0


监控与维护

日志位置

logs/
├── daily_run.log        # 主日志(生成+发布)
├── daily_error.log      # 错误日志
├── hourly-stdout.log    # 每小时收集日志
└── hourly-stderr.log    # 收集错误

关键日志搜索

# 查看最近5次发布状态
grep "Publication completed" logs/daily_run.log | tail -5

# 查看RSS发布错误
grep "RSS" logs/daily_error.log

# 查看飞书通知记录
grep "飞书通知" logs/daily_run.log | tail -5

数据清理

# 清理30天前的播客文件(节省空间)
find output/ -type d -mtime +30 -exec rm -rf {} +

# 清理缓存(保留最近7天)
find cache/ -name "*.json" -mtime +7 -delete

成本预估

每日成本

服务 用量 成本
ElevenLabs TTS 3-5分钟音频 ¥1-2
OpenAI GPT-4o-mini 摘要+优选 ¥0.5-1
RSS.com 3-5MB存储+流量 免费
小宇宙 RSS订阅 免费
飞书API 1条消息/天 免费

月度总计: ¥45-90(主要是ElevenLabs和OpenAI)

免费额度

  • ElevenLabs: 10,000 credits/月(约10分钟)
  • OpenAI: 需付费,但gpt-4o-mini成本极低
  • RSS.com: 免费版支持5GB存储+流量
  • 飞书: 企业自建应用免费

扩展功能(可选)

1. 多平台分发

将同一个RSS Feed提交到:

  • 小宇宙(已支持)
  • 喜马拉雅
  • 荔枝FM
  • Apple Podcasts
  • Spotify Podcasts

2. 数据分析

从RSS.com获取统计数据:

curl -H "Authorization: Bearer $RSS_COM_API_KEY" \
  "https://api.rss.com/v4/podcasts/$RSS_COM_PODCAST_ID/analytics"

3. 智能推送

根据播放数据优化:

  • 调整发布时间(当前07:00)
  • 优化新闻选择策略
  • A/B测试不同播报风格

4. 批量操作

# 批量发布最近7天的播客
for date in $(seq -f "%Y-%m-%d" 7 -1 1); do
  python scripts/publish_to_rss.py --date $date
  sleep 10
done

注意事项

重要提醒

  1. API凭证安全:

    • .env 已在 .gitignore
    • ❌ 不要将API Key提交到Git
    • ❌ 不要在日志中打印完整API Key
  2. 文件命名规范:

    • 项目生成带速率后缀的文件(-1.2x.mp3
    • 发布脚本会自动识别
    • 优先使用1.2x版本(平衡时长和音质)
  3. 错误处理策略:

    • RSS发布失败 → 中断流程(需要人工介入)
    • 飞书通知失败 → 仅记录日志(不影响发布)
    • 小宇宙同步延迟 → 可手动触发
  4. RSS Feed更新频率:

    • RSS.com: 实时更新
    • 小宇宙: 每小时抓取(可配置)
    • 加速同步: 手动点击「立即同步」

相关资源

官方文档

项目文档

工具链接


更新记录

  • 2026-01-15: 初始版本,支持RSS.com自动发布和小宇宙订阅
  • 2026-01-15: 添加飞书通知功能(王植萌)
  • 2026-01-15: 修复多速率音频文件名识别问题
  • 2026-01-15: 增强API错误处理,支持多端点重试

Skill维护者

  • 创建者: Claude Code
  • 项目: daily-podcast-ai
  • 版本: v1.0.0
  • 最后更新: 2026-01-15
Weekly Installs
22
GitHub Stars
2
First Seen
Jan 25, 2026
Installed on
gemini-cli20
codex20
openclaw20
opencode20
github-copilot19
amp19