音乐API测试

更新:2026-09-08 · 全平台结构审计 94 项 0 异常(先 node server.js,再运行 node test-structure.js 等回归脚本)。

接口索引(路由 × 支持平台)

路由                   支持的 source
/api/search             tx,wy,kg,kw,qianqian,5sing,bodian,mg,soda,streetvoice,apple,xm(单集),lizhi(声音),qingting(节目)
/api/album/search       tx,wy,kg,kw,qianqian,mg,soda,apple,xm,lrts(书/专辑),qingting(频道)
/api/singer/search      tx,wy,kg,kw,qianqian,5sing(精确),mg,soda,apple
/api/playlist/search    tx,wy,kg,kw,5sing,mg,xm
/api/playlist/recommend tx,wy,kg,kw,qianqian,5sing(首页推荐15),xm
/api/playlist/tags      tx,wy,kg,kw,qianqian,xm,lrts(书籍分类),qingting(频道分类)
/api/playlist/list      tx,wy,kg,kw,qianqian,xm,lrts(分类下书),qingting(分类下频道)
/api/playlist/detail    tx,wy,kg,kw,qianqian,5sing,bodian,mg,xm,lrts(kind=book/album),lizhi(kind=user),qingting(kind=channel)
/api/leaderboard/list   真实: tx,wy,kg,kw,qianqian(7榜),5sing(3榜),mg(9榜),xm,lrts(书城6榜×3周期) / 200空stub: soda,streetvoice,apple,bodian,lizhi,qingting
/api/leaderboard/detail 同上(真实源返回行;stub 返回 200 空结构)
/api/lyric              tx,wy,kg,kw,qianqian(词文件),5sing(LRC),bodian(复用酷我),mg(LRC),streetvoice(纯文本)
/api/hotsearch          tx,wy,kg,kw,mg(运营词),xm/lrts/lizhi/qingting(平台内容词兜底) / 其余平台为空占位
/api/url                tx..kw(音源聚合) qianqian,5sing,bodian,soda,streetvoice,apple,xm,lrts,lizhi,qingting(需配置) / mg 返回 null(受限)
评论/MV/专辑详情/歌手详情/图片:仅 tx,wy,kg,kw(新平台上游无公开源)

QQ音乐

GET 推荐歌单 GET 搜索单曲 GET 歌单标签 GET 歌单TAG列表 GET 搜索歌单 GET 歌单详情 GET 搜索专辑 GET 专辑详情 GET 搜索歌手 GET 歌手详情 GET 搜索MV GET MV详情 GET 排行榜列表 GET 排行榜详情 GET 歌词 GET 热搜 GET 评论 GET 热门评论 GET 导入歌单 GET 获取歌曲播放URL

网易云音乐

GET 推荐歌单 GET 搜索单曲 GET 歌单标签 GET 歌单TAG列表 GET 搜索歌单 GET 歌单详情 GET 搜索专辑 GET 专辑详情 GET 搜索歌手 GET 歌手详情 GET 搜索MV GET MV详情 GET 排行榜列表 GET 排行榜详情 GET 歌词 GET 热搜 GET 评论 GET 热门评论 GET 导入歌单 GET 获取歌曲播放URL

酷狗音乐

GET 酷狗推荐歌单 GET 搜索单曲 GET 歌单标签 GET 歌单TAG列表 GET 搜索歌单 GET 歌单详情 GET 搜索专辑 GET 专辑详情 GET 搜索歌手 GET 歌手详情 GET 搜索MV GET MV详情 GET 排行榜列表 GET 排行榜详情 GET 歌词 GET 热搜 GET 评论 GET 热门评论 GET 导入歌单 GET 获取歌曲播放URL

酷我音乐

GET 推荐歌单 GET 搜索歌曲 GET 歌单标签 GET 歌单TAG列表 GET 搜索歌单 GET 歌单详情 GET 搜索专辑 GET 专辑详情 GET 搜索歌手 GET 歌手详情 GET 搜索MV GET MV详情 GET 排行榜列表 GET 排行榜详情 GET 歌词 GET 热搜 GET 评论 GET 热门评论 GET 导入歌单 GET 获取歌曲播放URL

喜马拉雅(有声/音频)

GET 搜索单集(keyword=小王子) GET 搜索专辑(歌单=专辑) GET 专辑内曲目分页(id=3058952 小王子) GET 获取单集播放URL(免费集可播) GET 搜索建议 GET 分类标签 GET 分类下专辑列表(tagId=6) GET 排行榜(动态 133 榜,分类×tab 树) GET 排行榜详情(bangid=100006 全站热播榜,100 专辑行/页) GET 导入专辑(分享链接)

说明:喜马拉雅为音频节目,无 128k/320k/flac 档位概念;单集 ID 即搜索结果中的 id。 免费集可正常取播放地址,付费/未授权集 /api/url 返回 null。官方高音质(官方v1)需登录态, 当前按 musicdl 顺序自动降级:电信镜像 → 官方v1 → 官方v2 → cgg。 排行榜(2026-09 恢复为真实数据):榜单列表=官网 revision/rank v4 rankTabs(匿名,133 榜动态); 榜单详情=element 接口,一次返回全榜 100 个专辑行(含主播/封面/播放量/集数/付费态),需 xm-sign 请求头—— 签名有效期分钟级且无法本地生成,本服务会自动启动本机无头 Edge/Chrome 抓取并缓存 5 分钟(约 8s 冷启动/次); 无浏览器环境时可手动抓取并设环境变量 XM_SIGN:node scripts/xm-fetch-sign.mjs(签名过期时返回 400 提示)。

懒人听书(有声书 lrts)

GET 搜索书 type=book(keyword=三体) GET 搜索专辑/节目 type=album(keyword=相声) GET 书目录分页 kind=book(id=32562784 球状闪电) GET 书城榜单(6 榜×3 周期=18 个) GET 榜单详情(bangid=hot_week 热播·周榜,返回前 20) GET 专辑集数分页 kind=album(id=626161 鬼吹灯) GET 书籍分类标签(17 类:小说/评书/名著/儿童…) GET 分类下书列表(tagId=1 小说,20/页,行=有声书专辑) GET 获取书单集播放URL(containerId+section) GET 获取专辑单集播放URL(containerId+songId=audioId)

说明:懒人听书分「书」(有声书/广播剧,kind=book)与「专辑/节目」(kind=album)两类, 均按现有专辑语义返回:集数行含 id/name/duration/durationText/section 等,播放地址返回 m4a 直链。 书单集播放需 containerId(书ID)+section(第几集,从1起)+songId(章节ID);专辑单集需 containerId(专辑ID)+songId(audioId)。 免费内容可直接播放;付费整本/整辑(VIP)目录或地址返回 null,行为与喜马拉雅付费集一致。 分类标签/分类列表(分类页无 JSON 接口)由官网 www.lrts.me 静态页解析:分类下书列表行=有声书专辑(kind=book), 行含 id/name/author(主播)/img/desc,与书搜索行结构一致,可直接进书目录详情;页面上限 20/页。 站点边缘缓存偶发返回空行版页面,接口内部自动带时间戳重试(test-tags.js 回归)。

荔枝FM(播客 lizhi)

GET 搜索声音/单集(keyword=小说,歌曲行语义) GET 主播主页声音列表 kind=user(id=437472) GET 获取单集播放URL(songId=voiceId)

说明:荔枝为播客/声音平台,单集=声音(voice)。搜索返回歌曲行(id/songmid=voiceId、singer=主播名); 单集直接由 voiceId 取播(详情接口 trackUrl,缺失时按封面日期拼 CDN);容器=主播主页(kind=user)。 接口页大小站点固定,total 为 0(未知),hasMore 布尔字段指示是否还有下一页。 回归测试:cd api/music && node test-lizhi.js。

千千音乐(qianqian,太合)

GET 搜索歌曲(歌曲行语义) GET 获取播放URL(songId=TSID,自动按 无损/320/128/64 降级) GET 歌词(搜索行带 lyricUrl,直接取词文件)

说明:musicdl qianqian 语义,MD5 自签(secret 静态)免登录;搜索行 name/singer/img 等字段与其它平台一致; 个别无版权歌曲 tracklink 返回 null。回归测试:cd api/music && node test-extra.js。

5sing 原创音乐(5sing)

GET 搜索歌曲(含原唱yc/翻唱fc/伴奏bz) GET 获取播放URL(songId+songtype) GET 歌词(LRC,songtype 默认 yc)

说明:纯明文免登录;URL 按 无损(sq)→高品(hq)→低品(lq) 含 *_backup 兜底; 搜索行额外带 songtype 字段(yc/fc/bz),播放时随 URL 请求回传。

波点音乐(bodian,酷我系)

GET 搜索单曲 GET 播放URL(免费歌=整曲,VIP=29s试听) GET 歌单详情(1669719,466 首) GET 歌词(复用酷我词库)

说明:免登录;VIP 歌曲播放自动降级 29s 试听。

咪咕音乐(mg)

GET 搜索单曲 GET 歌手搜索 GET 专辑搜索 GET 榜单列表(9榜) GET 全网热歌榜详情 GET 歌单搜索 GET 热搜(运营词) GET 歌词示例(搜索行带 lyricUrl 直取 LRC)

说明:浏览能力全量;播放因官方免签收紧返回结构化 null(不报错)。

汽水音乐(soda)

GET 搜索单曲 GET 专辑搜索 GET 歌手搜索 GET 播放URL(免登录整曲 ~126kbps m4a)

说明:歌单/榜单需登录态未提供;播放走 share 双入口(music.douyin 与 douyin.com/qishui/song)加固解析。

街声(streetvoice)

GET 搜索(官方 JSON /api/v5/search) GET 播放URL(HLS m3u8 96k) GET 歌词(纯文本)

说明:全链路免登录免 cookie;固定 96kbps MP3-HLS。

蜻蜓FM(qingting,听书)

GET 单集(节目)搜索(keyword=红楼梦,单集行语义) GET 频道搜索(容器) GET 频道集数(kind=channel) GET 频道分类标签(27 类:小说/评书/相声小品/广播剧/音乐…) GET 分类下频道列表(tagId=545 头条,行=专辑型频道) GET 播放URL(未配置账号→needConfig 提示)

说明:搜索/频道/集数匿名可用;播放需环境变量 QINGTING_ACCESS_TOKEN / QINGTING_ID(见下方统一账号配置)。 分类标签/分类列表(App m-bff 无公开分类 JSON,实测 400)由 www.qingting.fm 网页解析: 列表行=专辑型频道(kind=channel,与频道搜索行结构一致,可进频道集数详情);直播/电台行无节目分页故不返回。 页面为华为云 WAF 防护,高频请求会出 Access Verification 校验页,接口自动退避重试(test-tags.js 回归)。

平台接入现状与规划(musicdl 对照)

已接入:歌曲 10(tx/wy/kg/kw/qianqian/5sing/bodian/mg(浏览)/soda/streetvoice + apple 预览档)+ 听书 4(xm/lrts/lizhi/qingting(浏览+配置播放))。
播放受限说明:咪咕(官方免签收紧,返回 null)、蜻蜓(需账号配置)、Apple 整曲(需配置 token,未配置自动 30s 预览)。
番茄畅听(fanqiechangting):主域已死且无公开音频接口(App 私有签名网关),服务端不可接入,已做调研记录。
B站(bilibili):按需移除,暂不接入。
海外平台(YouTube/Spotify/Apple Music 整曲/JOOX/TIDAL 等):暂不接入,与现有国内服务器架构不匹配。
常态化更新:各平台模块位于 api/music/src/<平台>/;回归脚本 api/music/test-*.js(真实网络);结构审计 node test-structure.js。

对齐度总表(基准:QQ / 喜马拉雅)

口径:接口路由、行为与输出结构对齐基准;✓=真实数据,stub=上游无公开源但返回 200 空结构(不伪造数据),—=上游无且语义不适用。

【音乐类 vs QQ(tx)】
接口              tx   qianqian 5sing bodian mg  soda streetvoice apple
单曲搜索          ✓    ✓       ✓     ✓    ✓   ✓    ✓         ✓(iTunes)
播放URL           ✓    ✓       ✓     ✓(整曲/试听) —(受限null) ✓(126k) ✓(HLS) ✓(30s预览)
歌词              ✓    ✓(词文件) ✓(LRC) ✓(复用酷我) ✓(LRC)   —(无公开) ✓(纯文本) —(无公开)
歌手搜索          ✓    ✓       ✓(精确) —   ✓   ✓    —        ✓(iTunes)
专辑搜索          ✓    ✓       —     —   ✓   ✓    —        ✓(iTunes)
歌单搜索/详情/分类/推荐 ✓(全) qianqian(推荐/详情/分类/列表,无关键词搜索) 5sing(搜索/详情/首页推荐) bodian(详情) mg(搜索/详情) — — —
榜单/详情          ✓    ✓(7榜)  ✓(原创榜) stub  ✓(9榜) stub  stub   stub
热搜              ✓    stub    stub  stub ✓(运营词) stub stub  stub
歌单标签/列表      ✓    ✓(分类)  —     —   —(分类树真,列表无公开)  —    —     —
评论/MV/歌手详情/专辑详情/图片/导入  ✓(tx真实)  其余:上游无公开接口 → 不提供(客户端按平台降级),文档记录
注:咪咕标签维度实测分类树为真实数据,但「分类→歌单列表」上游仅返回模板占位/需签名(无公开 JSON),
    标签与列表必须成对可用才提供,故 /api/playlist/tags?source=mg 返回 400 不支持的源。
【听书类 vs 喜马拉雅(xm)】
接口           xm          lrts(懒人)   lizhi(荔枝)   qingting(蜻蜓)
单集搜索       ✓           —(容器语义) ✓(声音)       ✓(节目)
专辑/书搜索    ✓           ✓(书/专辑)  —(无合集)     ✓(频道)
集数列表(详情) ✓           ✓(书目录/专辑) ✓(主播主页)  ✓(频道)
单集播放URL    ✓           ✓(m4a)      ✓(直链)       ○(需token配置)
分类标签/列表   ✓           ✓(17类网页) —            ✓(27类网页)
榜单/榜单详情   ✓(133,自动签) ✓(6榜×3周期,前20) —    —
热搜           ✓           ✓(词兜底)   ✓(词兜底)     ✓(词兜底)
付费解锁       ○(XM_COOKIE) —           —            ○(QINGTING_ACCESS_TOKEN)
说明:行内字段已统一(durationText/paid/source/kind 等);无上游接口的维度返回 200 空占位不报错。
喜马拉雅榜单详情签名(xm-sign)有效期分钟级:服务有 Edge/Chrome 时自动无头抓取并缓存 5 分钟(约 8s 冷启动/次);
无浏览器环境可设环境变量 XM_SIGN(node scripts/xm-fetch-sign.mjs 抓取),过期返回 400 提示。
懒人听书榜单深页对游客为空(站点仅 SSR 第 1 页 20 行),p≥2 返回空列表不伪造。

平台能力总表

★=完整可用;○=可用但受限;—=该平台无此维度(上游无公开稳定接口)。所有新平台输出字段与四主流/喜马拉雅同构。

【歌曲类】
平台        单曲搜索  播放URL  歌词   歌单详情  榜单/热搜  评论  MV/歌手/专辑
QQ(tx)      ★        ★       ★     ★        ★        ★   ★
网易云(wy)   ★        ★       ★     ★        ★        ★   ★
酷狗(kg)     ★        ★       ★     ★        ★        ★   ★
酷我(kw)     ★        ★       ★     ★        ★        ★   ★
千千(qianqian)★       ★       ★(词文件) ★(推荐/分类/详情)   ★(7榜单)  —  ★(歌手/专辑搜索)
5sing        ★        ★(sq/hq/lq) ★(LRC)  ★(搜索/详情)        ★(原创榜JSON50/翻唱榜/伴奏榜HTML100)  —  ★(音乐人精确搜索)
咪咕(mg)     ★        —(官方免签播放收紧,返回null) —  ★(搜索/分类/详情)  ★(9榜单/热搜)  —  ★(歌手/专辑搜索)
汽水(soda)     ★        ★(整曲126k m4a,免登录)  —  —  —  —  ★(专辑/歌手搜索)
街声(streetvoice) ★(官方JSON) ★(HLS m3u8 96k)  ★(纯文本)  —  —  —  —
Apple(apple)    ★(iTunes)  ★(30s预览;整曲需配置token)  —  —  —  —  —

【听书/有声类】
平台           单集搜索   专辑/书搜索  集数列表(详情)  单集播放URL  分类/榜  其他
喜马拉雅(xm)    ★         ★          ★             ★           ★(分类/榜/热搜) 评论(有) 歌词(无)
懒人听书(lrts)  —(按容器)  ★(书/专辑)   ★(书目录/专辑集数)  ★(m4a)   —      说明:字段与xm同构,付费返回null
荔枝(lizhi)     ★(声音)   —          ★(主播主页 kind=user) ★(直链)  —      —
蜻蜓(qingting)  ★(节目搜索) ★(频道搜索) ★(频道集数)  ○(需配置QINGTING_ACCESS_TOKEN/QINGTING_ID;未配置needConfig)
Apple Music    暂缓(延后档: preview 免费 / 整曲需 media-user-token)

Apple Music(apple)

GET 搜索(iTunes Search,全球曲库,无需账号) GET 播放(30s 官方预览;整曲需账号配置)

说明:当前档位=官方 30 秒预览(audio/x-m4p,免账号)。整曲解锁:设置环境变量 APPLE_MEDIA_USER_TOKEN (Apple Music 登录态 cookie 中的 media-user-token)后重启;未配置自动走预览,接口永不报错。

统一账号配置(登录一次 / 填写一次,自动持久化+巡检)

凭据默认只写入本地 data/credentials.json(不入库)。两种注入方式: ① 环境变量(首次注入,服务启动时自动导入存储);② 账号助手(推荐)——在 api/music 目录运行:

node scripts/account-login.mjs --status                   查看各平台凭据状态与有效期提示
node scripts/account-login.mjs --platform=xm               弹出浏览器 → 登录喜马拉雅网页账号一次
                                                           登录成功后自动导出 Cookie 入库(免 F12 抓包)
node scripts/account-login.mjs --platform=qingting --token=xxx --id=yyy [--refresh=zzz] [--device=ddd]
                                                           蜻蜓凭据填写一次(App 长期 token)
node scripts/account-login.mjs --platform=apple --token=xxx  Apple Music 整曲解锁 token(预留)
node scripts/account-login.mjs --platform=kg --cookie=...   酷狗 Cookie(预留)
平台        解锁内容                                            自动续签现状(2026-09 实测)
蜻蜓FM      单集播放(QINGTING_ACCESS_TOKEN/QINGTING_ID)        App 长期 token;oauth 续签端点已下线不可自动续,失效时重填
喜马拉雅    付费/VIP 集播放(XM_COOKIE)                         网页 Cookie 无 refresh 协议;服务每 6h 巡检,失效提示重登一次
喜马拉雅    排行榜详情(XM_SIGN)                                自动无头抓签缓存 5 分钟(需本机 Edge/Chrome)
Apple Music 整曲播放(APPLE_MEDIA_USER_TOKEN)                 预留(当前档位=30s 预览免凭据)
(预留)      KG_COOKIE / MG_TOKEN / SODA_COOKIE                 后续按需启用

说明:服务启动时导入环境变量到存储,此后运行时读写 data/credentials.json(热加载无需重启); 凭据守卫(api/music/src/credential_guard.js)启动时与每 6 小时巡检一次有效性,结果见启动日志与 /health(accounts 字段)。需要新增平台时在 src/accounts.js 登记字段与环境变量即可。

健康检查

GET 健康检查