播客发布到小宇宙 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分钟)
注册账号: https://rss.com/ → Sign Up
创建播客: Dashboard → Create New Podcast
名称: 今日科技早报 分类: Technology / News 语言: Chinese (Simplified)
获取凭证:
-
Settings → API Keys → Generate New API Key
-
复制 API Key: rss_com_sk_xxx
-
从播客URL获取 Podcast ID
配置环境变量: 编辑 apps/daily-podcast-ai/.env :
RSS_COM_API_KEY=rss_com_sk_your_actual_key RSS_COM_PODCAST_ID=your-podcast-uuid
步骤2: 小宇宙订阅配置(3分钟,仅需一次)
-
登录创作者平台: https://podcaster.xiaoyuzhoufm.com/podcasts/695e1e64e0970c835fb2e784/home
-
添加RSS订阅:
-
设置 → RSS Feed设置
-
点击「验证并导入」
-
首次同步: 点击「立即同步」
步骤3: 飞书通知配置(可选,5分钟)
-
创建飞书应用: https://open.feishu.cn/app
-
添加权限: im:message
- im:message:send_as_bot
- 配置环境变量: 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
代码改进(已实现)
- 智能文件名识别(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" ]
- 飞书通知集成(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存储+流量
-
飞书: 企业自建应用免费
扩展功能(可选)
- 多平台分发
将同一个RSS Feed提交到:
-
小宇宙(已支持)
-
喜马拉雅
-
荔枝FM
-
Apple Podcasts
-
Spotify Podcasts
- 数据分析
从RSS.com获取统计数据:
curl -H "Authorization: Bearer $RSS_COM_API_KEY"
"https://api.rss.com/v4/podcasts/$RSS_COM_PODCAST_ID/analytics"
- 智能推送
根据播放数据优化:
-
调整发布时间(当前07:00)
-
优化新闻选择策略
-
A/B测试不同播报风格
- 批量操作
批量发布最近7天的播客
for date in $(seq -f "%Y-%m-%d" 7 -1 1); do python scripts/publish_to_rss.py --date $date sleep 10 done
注意事项
重要提醒
API凭证安全:
-
✅ .env 已在 .gitignore 中
-
❌ 不要将API Key提交到Git
-
❌ 不要在日志中打印完整API Key
文件命名规范:
-
项目生成带速率后缀的文件(-1.2x.mp3 )
-
发布脚本会自动识别
-
优先使用1.2x版本(平衡时长和音质)
错误处理策略:
-
RSS发布失败 → 中断流程(需要人工介入)
-
飞书通知失败 → 仅记录日志(不影响发布)
-
小宇宙同步延迟 → 可手动触发
RSS Feed更新频率:
-
RSS.com: 实时更新
-
小宇宙: 每小时抓取(可配置)
-
加速同步: 手动点击「立即同步」
相关资源
官方文档
-
RSS.com API: https://api.rss.com/v4/docs
-
小宇宙创作者指南: https://podcaster.xiaoyuzhoufm.com/help
-
飞书开放平台: https://open.feishu.cn/document/
项目文档
-
完整集成指南: docs/XIAOYUZHOU_INTEGRATION.md
-
快速开始: QUICKSTART_XIAOYUZHOU.md
-
主项目README: apps/daily-podcast-ai/README.md
工具链接
-
Feed验证: https://validator.w3.org/feed/
-
ElevenLabs管理: https://elevenlabs.io/app/
更新记录
-
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