返回 Skill 列表
extension
分类: 数据与分析无需 API Key

music-chart-aggregator

Music Chart Aggregator 是一个 Claude Code 技能(Skill),每月自动搜索全球 8 大音乐平台的热门歌曲排行数据,整合排名、播放量、销量等多维指标,通过加权评分算法产出跨平台综合排名报告和专业乐评分析。 ✨ 核心特性: 🔍 8 平台覆盖(Billboard / Spotify / QQ音乐 / YouTube / UK Charts / Oricon / Apple Music / 网易云) 📊 智能评分算法(排名归一化 + 流量归一化 + 平台权重 + 跨平台加成) 📝 AI 撰写月度市场分析、流派趋势、跨文化现象解读 ⏰ 首跑后自动创建月度 cron 调度,链式自动运行 🐍 Python 脚本保证评分可复现

person作者: user_3ccab0a8hubcommunity

Music Chart Aggregator:全球音乐榜单聚合器

每月自动检索全球 8 大音乐平台的热门歌曲,收集排名、播放量、销量等数据,进行跨平台综合排名和专业评价。


Phase 0: 前置准备

0.1 确定报告周期

报告覆盖刚结束的日历月,而非当前月:

  • 如果今天是当月 1-3 日 → 覆盖上个月(因为上月数据刚刚完整)
  • 如果今天是当月 4 日以后 → 也覆盖上个月(做上月月度总结)
  • 用户手动运行时可能指定任意月份
report_year = 年份
report_month = 月份数字 (1-12)
report_month_name = 英文月份名 (如 "June 2026")
report_month_zh = 中文月份名 (如 "6月")
period_start = "{year}-{month:02d}-01"
period_end = "{year}-{month:02d}-{last_day}"  # 该月最后一天
output_label = "{year}-{month:02d}"  # 如 "2026-06"

0.2 创建输出目录

mkdir -p "C:\Users\asus\Music-Charts\{output_label}"

输出路径:

  • 原始数据: C:\Users\asus\Music-Charts\{output_label}\raw_data.json
  • 归一化数据: C:\Users\asus\Music-Charts\{output_label}\normalized_data.json
  • 聚合评分: C:\Users\asus\Music-Charts\{output_label}\aggregate_scores.json
  • 最终报告: C:\Users\asus\Music-Charts\{output_label}\report.md

Phase 1: 并行收集 8 个平台数据

核心原则

  • 每个平台尽可能用 1 次 WebSearch 完成(数据不足时追加 1 次补充查询)
  • 独立平台之间并行执行 WebSearch 调用
  • 搜索关键词模板见 references/source-catalog.md
  • <target_month> 替换为 {report_month_name} {report_year}
  • <target_month_zh> 替换为 {report_month_zh}

1.1 执行搜索

references/source-catalog.md 中定义的搜索查询模板,对以下 8 个平台依次执行 WebSearch:

| # | 平台 key | 平台名 | 搜索查询 | |---|----------|--------|----------| | 1 | billboard | Billboard Hot 100 | "Billboard Hot 100 top 10 {month} {year}" | | 2 | spotify | Spotify Global | "spotify global top 50 {month} {year} songs" | | 3 | qq_music | QQ音乐 热歌榜 | "QQ音乐热歌榜 TOP10 {中文月份}" | | 4 | youtube | YouTube Music | "YouTube Music top songs global {month} {year}" | | 5 | uk_charts | UK Official Charts | "UK Official Singles Chart top 10 {month} {year}" | | 6 | oricon | Oricon Japan | "Oricon Japan weekly singles top 10 {month} {year}" | | 7 | apple_music | Apple Music | "Apple Music top songs global {month} {year}" | | 8 | netease | 网易云音乐 | "网易云音乐热歌榜 TOP10 {中文月份}" |

1.2 解析搜索结果

从每个平台的搜索片段中提取数据。详细解析规则见 references/source-catalog.md

每条记录必须提取的字段:

  • rank: 整数排名
  • artist: 艺人名(原始格式)
  • title: 歌曲名(原始格式)

尽可能提取的字段:

  • movement: 走势(+N / -N / 0 / NEW / RE
  • weeks: 在榜周数
  • peak: 最高排名
  • streams / views / sales: 流量/销量数字(解析为原始数字)
  • chart_score: 榜单指数(QQ Music 专用)
  • notes: 任何额外上下文

1.3 写原始数据

将所有 8 个平台的解析结果写入 raw_data.json

{
  "report_period": "2026-06",
  "generated_at": "2026-07-01T09:03:00Z",
  "sources": {
    "billboard": {
      "status": "ok",
      "entries": [
        {"rank": 1, "artist": "...", "title": "...", "movement": "+2", "weeks": 12}
      ]
    }
  }
}

status 取值:

  • "ok" — 数据完整
  • "partial" — 部分数据(搜索返回了结果但不完整)
  • "stale" — 搜索返回了错误时间段的数据
  • "no_data" — 完全搜不到数据

1.4 针对缺失数据的策略

如果某平台的搜索未返回目标月数据:

  1. 追加一次针对性更强的查询(见 source-catalog.md 中每个源的"补充查询")
  2. 若仍无结果 → 该源 status 标记为 "no_data""stale"
  3. 该源从当月评分中排除(aggregate.py 会自动重新分配权重)

Phase 2: 归一化 & 评分

2.1 运行归一化脚本

python "C:\Users\asus\.claude\skills\music-chart-aggregator\scripts\normalize.py" \
  "C:\Users\asus\Music-Charts\{output_label}\raw_data.json" \
  "C:\Users\asus\Music-Charts\{output_label}\normalized_data.json"

该脚本为每条记录附加:

  • chart_position_score: 排名分(#1=100, #2=90, ... #10=10)
  • volume_score: 流量分(有 volume 数据的平台 min-max 归一化到 0-100)
  • composite_score: 综合分(0.6×排名分 + 0.4×流量分

2.2 运行聚合脚本

python "C:\Users\asus\.claude\skills\music-chart-aggregator\scripts\aggregate.py" \
  "C:\Users\asus\Music-Charts\{output_label}\normalized_data.json" \
  "C:\Users\asus\Music-Charts\{output_label}\aggregate_scores.json"

该脚本:

  • 跨平台去重(同艺人+同歌曲名合并,英文统一小写比较)
  • 按平台权重计算加权总分
  • 应用跨平台加成(1平台×1.0 → 5+平台×1.6)
  • 输出 Top 20 综合排名表

2.3 读取评分结果

Read aggregate_scores.json 获取最终排名数据,用于填充报告。

2.4 脚本失败时的降级方案

如果 Python 脚本因任何原因无法运行:

  1. 打印错误信息,标注 "脚本执行失败,降级为手动评分"
  2. 手动按 references/scoring-formula.md 中的公式计算
  3. 在报告的数据质量部分注明 "Manual scoring — scripts unavailable"

Phase 3: 生成报告

3.1 读取报告模板

Read templates/report-template.md 了解报告结构。

3.2 填充数据

aggregate_scores.json 中提取数据填充模板中的 {{PLACEHOLDER}} 变量。

需要 AI 撰写的内容(不可模板化):

  • 执行摘要 2-3 段:本月市场整体趋势、流派主导情况、东西方市场差异、值得关注的跨市场现象
  • 每个平台分榜的开头段落:该平台本月的特色和变化
  • 市场分析 4.1-4.5:美国/中国/日本市场深度分析 + 跨市场趋势 + 流派趋势
    • 对比中美日三国榜单差异(哪些歌手只在某个市场火?)
    • K-pop / Latin / Afrobeats / C-pop 等流派的全球渗透情况
    • 是否有独立音乐人突围?
    • 是否有"短视频带火老歌"现象?
  • 每首歌的简短评价(在综合排名表中添加"点评"列,一句话即可)

撰写风格要求:

  • 像专业乐评人一样写,有观点,不干巴巴列数据
  • 指出有趣的规律和反常现象
  • 中英混合自然(艺人名/歌名保留原文,分析用中文)
  • 语气轻松但专业,类似 Billboard 官方 recaps 的风格

3.3 写入报告文件

Write 最终报告到 C:\Users\asus\Music-Charts\{output_label}\report.md


Phase 4: 自调度下一轮

4.1 计算下月执行时间

当前日期 = today
如果 today.month == 12:
    next_month = 1, next_year = today.year + 1
否则:
    next_month = today.month + 1, next_year = today.year

cron_expression = "3 9 1 {next_month} *"
# 使用分钟 3 而不是 0/30,避开整点半点的高峰期
# 举例: next_month=8 → "3 9 1 8 *"

4.2 调用 CronCreate

一次性 cron(recurring: false),持久保存(durable: true):

CronCreate({
  "cron": "{cron_expression}",
  "prompt": "SKILL: music-chart-aggregator — 执行 {report_month_name} {report_year} 月度音乐榜单聚合。从 8 个平台收集数据,生成跨平台综合排名报告并保存到 C:\\Users\\asus\\Music-Charts\\。",
  "recurring": false,
  "durable": true
})

4.3 告知用户

在 Phase 5 的摘要中展示:

⏰ 下次自动运行: {next_run_date} ⚠️ cron 任务约 7 天后过期。如果下月未自动触发,手动运行 /music-chart-aggregator 即可恢复链路。


Phase 5: 验证 & 摘要

5.1 结构完整性检查

  • [ ] 报告包含全部 8 个平台分榜章节
  • [ ] 综合 Top 20 至少包含 10 条有效记录
  • [ ] Sources 章节列出了所有使用的搜索 URL
  • [ ] 报告无 {{PLACEHOLDER}} 残留
  • [ ] 无 [TODO][FILL] 标记

5.2 数据合理性检查

  • [ ] 第一名统一评分在 55-95 之间
  • [ ] Top 20 末尾评分在 3-25 之间
  • [ ] 至少 1 首歌出现在 2+ 平台(跨平台验证通过)
  • [ ] 无同名歌曲重复(去重失败检查)

5.3 调度确认

  • [ ] CronCreate 返回成功
  • [ ] 下月运行时间已记录在报告页脚

5.4 如果检查失败

  • 记录具体失败项
  • 在报告"数据质量说明"中添加备注
  • 不阻塞报告生成 — 部分报告比没有报告好

5.5 向用户展示摘要

📊 月度音乐榜单报告生成完成!

🏆 Top 3:
  1. Artist - Title (XX.X 分 | 覆盖 X/8 平台)
  2. Artist - Title (XX.X 分 | 覆盖 X/8 平台)
  3. Artist - Title (XX.X 分 | 覆盖 X/8 平台)

📈 统计:
  - 追踪歌曲: N 首(跨平台热歌: M 首)
  - 可用数据源: X/8
  - 不可用数据源: [列表](如有)

📁 报告位置: C:\Users\asus\Music-Charts\{YYYY-MM}\report.md
⏰ 下次运行: {next_run_date}

手动运行

用户可以通过以下方式手动触发:

  • 直接说 "运行音乐榜单" / "生成月度音乐报告" / "music chart report" / "全球音乐排行"
  • 或输入 /music-chart-aggregator

指定月份运行

如果用户想指定特定月份(非当前月):

用户: "生成 2026 年 5 月的音乐榜单"
→ 将 Phase 0 中的 report_month 设为用户指定的月份
→ 其余流程不变

恢复断开链路

如果自动调度链路断开(例如上月的 cron 过期未触发):

  1. 用户手动运行一次本技能
  2. Phase 4 会重新创建下月的 cron
  3. 链路恢复

用户可随时通过 CronList 查看当前是否有待执行的 cron 任务。


技能文件索引

| 文件 | 用途 | |------|------| | SKILL.md | 本文件 — 完整执行指令 | | references/source-catalog.md | 8 个平台的搜索模板和数据解析规则 | | references/scoring-formula.md | 评分公式完整推导 | | templates/report-template.md | 月度报告骨架模板 | | scripts/normalize.py | 排名/流量归一化脚本 | | scripts/aggregate.py | 跨平台聚合排名脚本 |