# Podcast Publish Xiaoyuzhou

> 自动发布每日科技早报播客到小宇宙平台。 触发场景：用户提到"发布播客"、"小宇宙播客"、"自动发布"、"播客上传"、"RSS发布"。 适用于：将生成的播客音频自动发布到RSS.com，并通过RSS订阅同步到小宇宙，同时发送飞书通知。

- Skill: `majiayu000/podcast-publish-xiaoyuzhou` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/podcast-publish-xiaoyuzhou`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/podcast-publish-xiaoyuzhou/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/podcast-publish-xiaoyuzhou

---


# 播客发布到小宇宙 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: 手动发布指定日期

```bash
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: 仅发送飞书通知

```bash
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`：
   ```bash
   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. **配置环境变量**:
   ```bash
   FEISHU_APP_ID=cli_xxx
   FEISHU_APP_SECRET=xxx
   FEISHU_RECEIVER_OPEN_ID=ou_18b8063b232cbdec73ea1541dfb74890  # 王植萌
   ```

### 步骤4: 测试验证（2分钟）

```bash
# 测试发布
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分钟快速开始 |

### 环境变量清单

```bash
# 必需 - 播客生成
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`

**解决**: 自动查找并使用多速率版本
```python
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个可能的端点
```python
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文档 |

### 调试命令

```bash
# 查看最近的生成日志
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: 补发昨天的播客

```bash
# 用户说: "帮我重新发布昨天的播客到小宇宙"
python scripts/publish_to_rss.py --date 2026-01-14
```

### 场景3: 仅通知不发布

```bash
# 用户说: "通知植萌播客已发布"
python scripts/notify_feishu.py \
  --date 2026-01-14 \
  --rss-url "https://rss.com/podcasts/xxx/feed.xml" \
  --article-count 10
```

### 场景4: 生成但不发布

```bash
# 用户说: "生成今天的播客但先不发布"
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（卡片消息）

**卡片结构**:
```json
{
  "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    # 收集错误
```

### 关键日志搜索

```bash
# 查看最近5次发布状态
grep "Publication completed" logs/daily_run.log | tail -5

# 查看RSS发布错误
grep "RSS" logs/daily_error.log

# 查看飞书通知记录
grep "飞书通知" logs/daily_run.log | tail -5
```

### 数据清理

```bash
# 清理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获取统计数据：
```bash
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. 批量操作

```bash
# 批量发布最近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: 实时更新
   - 小宇宙: 每小时抓取（可配置）
   - 加速同步: 手动点击「立即同步」

---

## 相关资源

### 官方文档
- **RSS.com API**: https://api.rss.com/v4/docs
- **小宇宙创作者指南**: https://podcaster.xiaoyuzhoufm.com/help
- **飞书开放平台**: https://open.feishu.cn/document/

### 项目文档
- **完整集成指南**: [docs/XIAOYUZHOU_INTEGRATION.md](../../apps/daily-podcast-ai/docs/XIAOYUZHOU_INTEGRATION.md)
- **快速开始**: [QUICKSTART_XIAOYUZHOU.md](../../apps/daily-podcast-ai/QUICKSTART_XIAOYUZHOU.md)
- **主项目README**: [apps/daily-podcast-ai/README.md](../../apps/daily-podcast-ai/README.md)

### 工具链接
- **Feed验证**: https://validator.w3.org/feed/
- **卡片消息构建**: https://open.feishu.cn/tool/cardbuilder
- **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

