qiaomu-music-player-spotify by joeseesun/qiaomu-music-player-spotify
npx skills add https://github.com/joeseesun/qiaomu-music-player-spotify --skill qiaomu-music-player-spotify统一的音乐播放 + 风格查询 Skill。通过自包含的 Python 脚本直接调用 Spotify Web API,集成 RateYourMusic 5947 个音乐风格数据库。
~/.claude/skills/qiaomu-music-player-spotify/spotify.py
~/.claude/skills/qiaomu-music-player-spotify/spotify.py <command> [args...]
| 命令 | 参数 | 说明 |
|---|---|---|
search | <query> [type] [limit] | 搜索 (type: track/artist/album/playlist,默认 track) |
play |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
<uri或track_id> |
| 播放指定曲目/专辑/播放列表 |
pause | 暂停 |
resume | 继续播放 |
next | 下一首 |
prev | 上一首 |
queue | <uri或track_id> | 加入队列 |
now | 当前播放信息 |
show-queue | [limit] | 显示队列 |
volume | <0-100> | 设置音量 |
devices | 列出可用设备 |
recent | [limit] | 最近播放 |
playlists | [limit] | 我的播放列表 |
batch-play | <id1> <id2> ... | 批量播放(播第一首 + 其余加队列) |
shuffle | `<on | off>` |
repeat | `<track | context |
b21721f49276638d9fddb0946f9d5936fa7a91fb(MacBook Pro)~/.claude/skills/qiaomu-music-player-spotify/.spotify_tokens.json(自动刷新)auth_setup.py~/.claude/skills/qiaomu-music-player-spotify/references/ 目录下的分层数据:
references/
├── _index.json # 49个主分类概览(必读,13KB)
├── _meta.json # 元数据和使用说明
├── main/ # 49个文件,每个主分类的直接子分类
│ ├── ambient.json
│ ├── rock.json
│ └── ...
└── detailed/ # 578个文件,有孙分类的子分类详情
├── dark-ambient.json
├── shoegaze.json
└── ...
数据统计 :
每个风格的数据字段 :
{
"name": "Dark Ambient",
"url": "https://rateyourmusic.com/genre/dark-ambient/",
"description": "Emphasizes an ominous, gloomy, and dissonant atmosphere.",
"level": "sub",
"parent": "Ambient"
}
用户说"播放/想听 XX"
│
├── 路径B(优先!):XX 能匹配下方播放列表映射?(风格名/场景关键词)
│ → 直接用缓存 ID:spotify.py play spotify:playlist:<id>(无需确认)
│
├── 路径A:XX 是具体歌手/专辑/歌曲?(如"播放涅槃的专辑"、"听 Bohemian Rhapsody")
│ → spotify.py search "<query>" track 1 → 拿 ID → spotify.py play <id>
│
├── 路径D:用户要求播放多首特定歌曲?(如"最好听的3首冲浪乐"、"来5首经典爵士")
│ → AI 选出 N 首代表作 → 并行 search 获取所有 ID
│ → spotify.py batch-play <id1> <id2> <id3> ...
│ → 列出完整播放清单给用户看
│
└── 路径C:XX 是模糊需求/场景描述?(如"雨天的歌"、"适合写代码"、"心情不好")
→ 必须走【模糊需求完整流程】,见下方 3c
路径 D 触发词 :"最经典的3首XX"、"来几首XX"、"推荐5首XX的歌直接放"、"XX 风格的代表作来几首"
# 1. 搜索
spotify.py search "Bohemian Rhapsody" track 1
# → 拿到 ID
# 2. 播放
spotify.py play <track_id>
# 3. 验证(可选)
spotify.py now
# 1. 搜索多首(可以并行多次调用 search)
spotify.py search "Miserlou Dick Dale" track 1
spotify.py search "Wipe Out Surfaris" track 1
spotify.py search "Pipeline Chantays" track 1
# 2. 一次性批量播放(播第一首 + 其余加队列)
spotify.py batch-play <id1> <id2> <id3>
当用户描述的是场景、心情、氛围 而非具体歌手/风格时,必须走此流程:
Step 1: 风格库查询
_index.json 扫描49个主分类main/*.json 获取子分类详情Step 2: 结合 AI 推荐具体音乐
Step 3: 呈现方案,等待用户确认
Step 4: 用户确认后,搜索并播放
spotify.py search → 拿 ID → spotify.py play 播放spotify.py now 确认播放信息示例对话 :
User: 适合雨天听的歌
AI: 🌧️ 根据风格库匹配,雨天推荐这几个方向:
1. 🎹 Bossa Nova — João Gilberto《Getz/Gilberto》
慵懒的巴西爵士,雨天咖啡馆标配
2. 🌫️ Ambient Pop — Sigur Rós《( )》
冰岛氛围,空灵织体像雨幕一样包裹你
3. 🎸 Contemporary Folk — Iron & Wine《Our Endless Numbered Days》
原声吉他低语,安静雨夜的陪伴
4. 🎷 Cool Jazz — Chet Baker《Chet Baker Sings》
内敛克制的小号,配雨声刚刚好
5. 🌑 Dark Jazz — Bohren & der Club of Gore《Sunset Mission》
黑色电影质感,阴雨天的完美配乐
想听哪个?说序号就行。
User: 2
AI: [spotify.py search "Sigur Rós ( )" album 1 → spotify.py play <album_id>]
🌧️ 正在播放 Sigur Rós —《( )》
不喜欢说"换一个",我从其他选项里挑。
关键原则 :
当用户说"想听 Jazz"等风格关键词时,直接用内置映射播放,无需搜索。
| 风格/场景 | Playlist ID | 播放列表名 |
|---|---|---|
| Jazz | 37i9dQZF1DXbITWG1ZJKYt | Jazz Vibes |
| Lo-fi / 写代码 | 37i9dQZF1DWWQRwui0ExPn | lofi beats |
| Ambient | 37i9dQZF1DX3Ogo9pFvBkY | Ambient Relaxation |
| Classical | 37i9dQZF1DWWEJlAGA9gs0 | Classical Essentials |
| Electronic | 37i9dQZF1DX4dyzvuaRJ0n | mint |
| Rock | 37i9dQZF1DXcF6B6QPhFDv | Rock This |
| R&B | 37i9dQZF1DX4SBhb3fqCJd | Are & Be |
| Hip Hop | 37i9dQZF1DX0XUsuxWHRQd | RapCaviar |
| Pop | 37i9dQZF1DXcBWIGoYBM5M | Today's Top Hits |
| Chill / 放松 | 37i9dQZF1DX4WYpdgoIcn6 | Chill Hits |
| Focus / 专注 | 37i9dQZF1DX8NTLI2TtZa6 | Deep Focus |
| Sleep / 睡眠 | 37i9dQZF1DWZd79rJ6a7lp | Sleep |
| Workout / 运动 | 37i9dQZF1DX76Wlfdnj7AP | Beast Mode |
| Indie | 37i9dQZF1DX2Nc3B70tvx0 | Indie Pop |
| Blues | 37i9dQZF1DXd9rSDyQguIk | Blues Classics |
| Country | 37i9dQZF1DX1lVhptIYRda | Hot Country |
| Latin | 37i9dQZF1DX10zKzsJ2jva | Viva Latino |
| K-Pop | 37i9dQZF1DX9tPFwDMOaN1 | K-Pop ON! |
| Punk | 37i9dQZF1DX0KpeLYR2IHH | Punk Essentials |
| Metal | 37i9dQZF1DWTcqUzwhNmKv | Kickass Metal |
| Synthwave | 37i9dQZF1DX6GJXiuZRisr | Synthwave from Space |
| Bossa Nova | 37i9dQZF1DX4AyFl3yqHeK | Bossa Nova |
| Surf Rock | 37i9dQZF1DX5hR0J49CmXC | Surf Rock Sunshine |
| Reggae | 37i9dQZF1DXbSbnqxMTGx9 | Reggae Classics |
| Soul | 37i9dQZF1DWULEW2JjEkIS | Soul Classics |
| Funk | 37i9dQZF1DWWvhKV4FBciw | Funk Outta Here |
| Disco | 37i9dQZF1DX1MUPbVKMBel | Disco Forever |
| Grunge | 37i9dQZF1DX0FOF1IUWK1W | Grunge Forever |
| Post-Rock | 37i9dQZF1DX9bubh97wEfA | Post-Rock |
| Shoegaze | 37i9dQZF1DX6ujZpAN0v9r | Shoegaze is Dead |
兜底 :如果播放列表 ID 失效,用
spotify.py search "<genre>" playlist 1搜索替代。
当用户描述场景/氛围时,AI 应该自动映射到合适的搜索关键词:
| 用户描述 | 匹配关键词 | 推荐方向 | 搜索词 |
|---|---|---|---|
| 深夜、放松、冥想 | ambient, atmospheric, calm, soothing | Ambient, Drone, Space Ambient | ambient relaxing |
| 有活力、激烈 | energetic, fast, aggressive, intense | Punk, Hardcore, Drum and Bass | energetic upbeat |
| 暗黑、压抑 | dark, gloomy, ominous, dissonant | Dark Ambient, Black Metal, Industrial | dark ambient |
| 空灵、梦幻 | ethereal, dreamy, atmospheric, reverb | Dream Pop, Shoegaze, Ambient Pop | dream pop ethereal |
| 电子、科技感 | electronic, synthetic, futuristic, digital | Techno, IDM, Ambient Techno | electronic techno |
| 复古、怀旧 | vintage, retro, nostalgic, classic | Synthwave, Vaporwave, Chillwave | synthwave retro |
| 实验、前卫 | experimental, avant-garde, unconventional | Noise, Free Jazz, Musique Concrete | experimental |
| 写代码、工作、专注 | focus, concentration, productivity | Lo-fi Hip Hop, Post-Rock, Downtempo | lofi hip hop focus |
| 开车、路上 | driving, road trip, upbeat | Indie Rock, Synthwave, AOR | driving music road trip |
| 运动、健身 | workout, gym, energetic | EDM, Drum and Bass, Trap | workout music |
| 古典、优雅 | classical, elegant, orchestral | Classical, Chamber Music, Baroque | classical music |
| 爵士、慵懒 | jazz, laid back, smooth | Jazz, Bossa Nova, Smooth Jazz | jazz smooth |
| 抽烟、放松 | trip-hop, chill, jazz lounge, atmospheric | Trip-Hop, Jazz Lounge, Atmospheric | trip-hop chill |
| 做饭、家务 | jazz cooking, bossa nova, feel good | Jazz, Bossa Nova, Feel Good Pop | jazz cooking bossa nova |
| 伤感、雨天 | melancholy, sad, rainy day | Melancholy Piano, Sad Indie | melancholy piano rainy day |
| 派对、嗨 | party, dance, festival | EDM, Hip Hop Party | party dance edm |
用户说 :"查一下 Shoegaze"
执行流程 :
Step 1: 读取 _index.json,检查是否为主分类
Step 2: 如果不是,用 Grep 在 main/*.json 中搜索
Step 3: 找到后,显示风格信息 + 链接 + 子分类(如果有)
示例输出 :
🎵 Shoegaze
📝 Characterized by ethereal vocals buried beneath walls of distorted guitars...
🔗 https://rateyourmusic.com/genre/shoegaze/
📂 属于:Alternative Rock > Noise Pop > Shoegaze
💡 Shoegaze 有 3 个子分类:
- Blackgaze(融合黑金属元素)
- Nu-Gaze(现代复兴)
- Dream Pop(更柔和的变体)
用户说 :"推荐一些适合深夜、有点空灵的风格"
执行流程 :
Step 1: 读取 _index.json,扫描所有49个主分类的描述
Step 2: 用关键词匹配(参考 Part 5 关键词映射表)
Step 3: 找到候选主分类后,读取对应的 main/*.json
Step 4: 根据描述进一步筛选子分类
Step 5: 返回 Top 3-5 推荐,带简短说明
用户说 :"给我看看 Ambient 下面都有什么"
执行流程 :
Step 1: 读取 main/ambient.json
Step 2: 列出所有直接子分类(level: sub)
Step 3: 如果用户进一步询问某个子分类,读取 detailed/{subgenre}.json
Step 4: 显示完整的层级树
| 用户说 | 执行命令 |
|---|---|
| "暂停" / "停" | spotify.py pause |
| "继续" / "播放" | spotify.py resume |
| "下一首" / "切歌" | spotify.py next |
| "上一首" | spotify.py prev |
| "音量设为50" | spotify.py volume 50 |
| "现在放的什么" | spotify.py now |
| "播放队列" / "接下来放什么" | spotify.py show-queue |
| "最近听了什么" | spotify.py recent |
| "加入队列" | spotify.py queue <id> |
| "随机播放" | spotify.py shuffle on |
| "单曲循环" | spotify.py repeat track |
当用户要用 Suno 生成音乐但没指定风格时,主动触发风格推荐:
执行流程 :
Step 1: 询问用户想要什么氛围/场景(或直接推荐热门风格)
Step 2: 使用智能推荐功能,给出 3-5 个风格
Step 3: 用户选择后,将风格名称传递给 suno-music-creator
Step 4: Suno 生成时,在 tags 参数中包含风格名称
原则 :渐进式加载,最小化上下文消耗
_index.json(13KB)- 每次风格查询都要读❌ 没有找到 "Qiaomu Style" 这个风格。
💡 可能的原因:
- 风格名称拼写错误?
- RateYourMusic 数据库中没有此风格
🔍 你可以:
1. 描述一下这个风格的特点,我帮你找相似的
2. 直接访问 https://rateyourmusic.com/genres/ 浏览完整列表
# 用搜索替代缓存
spotify.py search "jazz" playlist 1
# → 拿到新的 playlist ID → spotify.py play spotify:playlist:<new_id>
_index.json 建立索引batch-play 是批量播放核心:播第一首 + 其余加队列spotify.py)music-genre-finder 全部内容(5947 风格数据库、播放列表映射、决策流程)batch-play 命令一次性批量播放Created by 乔帮主 with Claude Code Genre data source: https://rateyourmusic.com/genres/
Weekly Installs
218
Repository
GitHub Stars
19
First Seen
Mar 4, 2026
Security Audits
Installed on
codex210
kimi-cli209
gemini-cli209
github-copilot209
amp209
opencode209
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
31,600 周安装