SuperAPI AI Directory

podcast-publish-xiaoyuzhou

Marketing & growth

View repository

Updated 10-16 01:31

About this skill

Podcast Publishing to Xiaoyuzhou Skill

Overview

This Skill implements a fully automated publishing process for the daily tech morning briefing podcast: podcast generation → RSS.com publishing → Xiaoyuzhou sync → Feishu notification.

Project Path: /Users/qitmac001395/workspace/QAL/ideas/apps/daily-podcast-ai

Core Capabilities

Feature Status Required Configuration
Morning briefing podcast generation ✅ Available ELEVENLABS_API_KEY
RSS.com auto publishing ✅ Available RSS_COM_API_KEY + RSS_COM_PODCAST_ID
Xiaoyuzhou RSS subscription ✅ Available One-time manual configuration
Feishu message notification ✅ Available FEISHU_APP_ID + FEISHU_APP_SECRET + FEISHU_RECEIVER_OPEN_ID
Scheduled automatic execution ✅ Available macOS launchd (every day at 7 AM)

Usage

Method 1: Automatic execution (recommended)

No action required, it runs automatically every day at 7 AM:

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 - 小宇宙自动同步

Method 2: Manually publish for a specified date

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)

Method 3: Send Feishu notification only

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

First-Time Configuration Guide

Step 1: RSS.com configuration (5 minutes)

  1. Register an account: https://rss.com/ → Sign Up

  2. Create a podcast: Dashboard → Create New Podcast

    名称: 今日科技早报
    分类: Technology / News
    语言: Chinese (Simplified)
    
  3. Get credentials:

    • Settings → API Keys → Generate New API Key
    • Copy API Key: rss_com_sk_xxx
    • Get the Podcast ID from the podcast URL
  4. Configure environment variables: Edit apps/daily-podcast-ai/.env:

    RSS_COM_API_KEY=rss_com_sk_your_actual_key
    RSS_COM_PODCAST_ID=your-podcast-uuid
    

Step 2: Xiaoyuzhou subscription configuration (3 minutes, only once)

  1. Log in to the creator platform: https://podcaster.xiaoyuzhoufm.com/podcasts/695e1e64e0970c835fb2e784/home
  2. Add RSS subscription:
    • Settings → RSS Feed settings
    • Enter: https://rss.com/podcasts/{YOUR_ID}/feed.xml
    • Click "Verify and Import"
  3. First sync: Click "Sync Now"

Step 3: Feishu notification configuration (optional, 5 minutes)

  1. Create a Feishu app: https://open.feishu.cn/app
  2. Add permissions: im:message + im:message:send_as_bot
  3. Configure environment variables:
    FEISHU_APP_ID=cli_xxx
    FEISHU_APP_SECRET=xxx
    FEISHU_RECEIVER_OPEN_ID=ou_18b8063b232cbdec73ea1541dfb74890  # 王植萌
    

Step 4: Test and verify (2 minutes)

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

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

Technical Architecture

Integration Flowchart

┌─────────────┐
│ 早报生成     │  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

Key Files

File Lines Function
scripts/publish_to_rss.py 376 RSS.com publishing main script
scripts/notify_feishu.py 191 Feishu notification script
scripts/daily_generate.py 651 Podcast generation core logic
scripts/daily_automated_run.sh 100 Scheduled task execution script
docs/XIAOYUZHOU_INTEGRATION.md - Complete integration guide
QUICKSTART_XIAOYUZHOU.md - 5-minute quick start

Environment Variable List

# 必需 - 播客生成
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

Code Improvements (Implemented)

1. Smart filename recognition (publish_to_rss.py:258-269)

Problem: The project generates podcast-{date}-1.2x.mp3, but the script expects podcast-{date}.mp3

Solution: Automatically find and use the multi-bitrate version

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. Multi-endpoint retry mechanism (publish_to_rss.py:106-159)

Problem: RSS.com API endpoints may change

Solution: Try 3 possible endpoints in sequence

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. Feishu notification integration (publish_to_rss.py:343-362)

Features: Automatically called after successful publishing notify_feishu.py

Features:

  • Use check=False to prevent notification failures from interrupting the main process
  • Automatically extract article count
  • Pass RSS URL and episode URL

Feishu message effect

After successful publishing, the recipient will receive a blue card message:

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

Troubleshooting

FAQ

Issue Symptom Solution
RSS publishing failed 401 Unauthorized Check whether the API Key is correct/expired
File not found Missing required files Confirm the podcast has been generated and check the output directory
Xiaoyuzhou not synced RSS succeeds but the App has no episode Manually click "Sync Now"
Feishu notification failed Publishing succeeds but there is no message Check app permissions and verify open_id
API endpoint 404 Endpoint not found Check the latest RSS.com API documentation

Debugging commands

# 查看最近的生成日志
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')))"

Use cases

Scenario 1: Daily automatic publishing (default)

Trigger: Automatically executes every day at 07:00 Process: Complete generation → publishing → notification No action required: Takes effect permanently after configuring once

Scenario 2: Republish yesterday's podcast

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

Scenario 3: Notify only, do not publish

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

Scenario 4: Generate but do not publish

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

Technical details

RSS.com API integration

API version: v4 Base URL: https://api.rss.com/v4 Authentication method: Bearer Token

Core endpoints:

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

File upload:

  • Audio: maximum 100MB, supports MP3/M4A
  • Cover: maximum 5MB, 3000x3000px PNG recommended
  • Timeout: 120 seconds

Xiaoyuzhou integration method

Method: RSS subscription (not API upload)

Advantages:

  • ✅ Configure once, takes effect permanently
  • ✅ No need to reverse engineer the Xiaoyuzhou API
  • ✅ Officially supported, stable and reliable
  • ✅ Supports multi-platform distribution

Update frequency:

  • Default: hourly
  • Configurable: 30 minutes/2 hours/4 hours

Feishu notification implementation

Message type: Interactive (card message)

Card structure:

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

Dependencies: httpx>=0.27.0


Monitoring and maintenance

Log location

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

Key log search

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

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

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

Data cleanup

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

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

Cost estimate

Daily cost

Service Usage Cost
ElevenLabs TTS 3-5 minute audio ¥1-2
OpenAI GPT-4o-mini Summary + curation ¥0.5-1
RSS.com 3-5MB storage + traffic Free
Xiaoyuzhou RSS subscription Free
Feishu API 1 message/day Free

Monthly total: ¥45-90 (mainly ElevenLabs and OpenAI)

Free quota

  • ElevenLabs: 10,000 credits/month (about 10 minutes)
  • OpenAI: Paid, but gpt-4o-mini costs extremely little
  • RSS.com: The free version supports 5GB storage + traffic
  • Feishu: Free for enterprise self-built apps

Extended Features (Optional)

1. Multi-platform Distribution

Submit the same RSS Feed to:

  • Xiaoyuzhou (already supported)
  • Ximalaya
  • Lizhi FM
  • Apple Podcasts
  • Spotify Podcasts

2. Data Analysis

Get statistics from RSS.com:

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

3. Smart Push

Optimize based on playback data:

  • Adjust publishing time (currently 07:00)
  • Optimize the news selection strategy
  • A/B test different broadcast styles

4. Batch Operations

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

Notes

Important Reminders

  1. API Credential Security:

    • ✅ .env Already in .gitignore in
    • ❌ Do not commit API Keys to Git
    • ❌ Do not print the full API Key in logs
  2. File Naming Convention:

    • The project generates files with a rate suffix (-1.2x.mp3)
    • The publishing script will automatically recognize them
    • Prefer the 1.2x version (balances duration and audio quality)
  3. Error Handling Strategy:

    • RSS publishing failure → interrupt the process (manual intervention required)
    • Feishu notification failure → only log it (does not affect publishing)
    • Xiaoyuzhou sync delay → can be triggered manually
  4. RSS Feed Update Frequency:

    • RSS.com: real-time updates
    • Xiaoyuzhou: fetches hourly (configurable)
    • Speed up sync: manually click "Sync Now"

Related Resources

Official Documentation

Project Documentation

Tool Links


Update Log

  • 2026-01-15: Initial version, supports RSS.com automatic publishing and Xiaoyuzhou subscription
  • 2026-01-15: Added Feishu notification feature (Wang Zhimeng)
  • 2026-01-15: Fixed the issue of recognizing multi-rate audio file names
  • 2026-01-15: Enhanced API error handling, supports multi-endpoint retries

Skill Maintainer

  • Creator: Claude Code
  • Project: daily-podcast-ai
  • Version: v1.0.0
  • Last Updated: 2026-01-15