Skip to content

获取音乐 url ​

使用歌单详情接口后,能得到的音乐的 id, 但不能得到的音乐 url, 调用此接口, 传入的音乐 id( 可多个,用逗号隔开 ), 可以获取对应的音乐的 url,未登录状态或者非会员返回试听片段(返回字段包含被截取的正常歌曲的开始时间和结束时间)

接口信息 ​

项目值
接口地址/song/url
请求方式GET / POST
需要登录否
对应模块song_url
文档分类歌曲与播放

请求参数 ​

参数类型必填默认值说明
idstring✅-音乐 id
brnumber | string—999000码率,默认设置了 999000 即最大码率,如果要 320k 则可设置为 320000,其他类推

HTTP 示例 ​

bash
GET /song/url?id=33894312
GET /song/url?id=405998841,33894312

编程式调用 ​

ts
import { songUrl } from 'hana-music-api';

const result = await songUrl({
  id: '33894312',
});

console.log(result.body);

返回内容 ​

body 是 SDK 重排后的最终体,不是网易云原文:上游顶层 code 被模块忽略并合成 code: 200(301 等非特殊状态码仍会先被请求层拒绝),data 数组按请求里 id 的顺序排列,顶层重建为 { code: 200, data },网易云原文的其他顶层字段不会保留;data 缺失时最终体是空数组。

body.data 里每项是一首歌的播放地址。只有 code、data、data[].id、data[].url、data[].code 收紧;id 兼容字符串和数字编号,其余字段宽松。url 不替换;freeTrialInfo 不合并片段,内部坏字段按宽松字段丢弃:

  • 本批无版权录制:url 和 level 是 null,条目 code 是 404。
  • 只能试听:freeTrialInfo 是 { start, end },表示试听片段在整首里的起止秒数(本批匿名录制 35 秒,携带失效 Cookie 时 30 秒);url 是这段试听片段的地址。
  • 可完整播放:freeTrialInfo 是 null,url 是完整歌曲的地址。

上游码语义不稳定:同一请求在本次探测/重录中会从 200 翻转为 404。song_url.transient-404.json 与 song_url.anon-trial.json 是同一 query,仓库里前者是 404、后者是 200。url: null 时不能凭一次 code 判定无版权,先重试或交叉验证。

本批只保留匿名和失效 Cookie 录制;失效 Cookie 不是登录证据,没有登录对照,不对登录后的 freeTrialInfo 等字段作相同性断言。

结构定义和类型是 SongUrlBody,见 返回体结构。

补充说明 ​

说明 : 使用歌单详情接口后,能得到的音乐的 id, 但不能得到的音乐 url, 调用此接口, 传入的音乐 id( 可多个,用逗号隔开 ), 可以获取对应的音乐的 url,未登录状态或者非会员返回试听片段(返回字段包含被截取的正常歌曲的开始时间和结束时间)

遇到 403 错误时,请在 head 标签内加入 <meta name="referrer" content="no-referrer">

必选参数 : id : 音乐 id

可选参数 : br: 码率,默认设置了 999000 即最大码率,如果要 320k 则可设置为 320000,其他类推

接口地址 : /song/url

调用例子 : /song/url?id=33894312 /song/url?id=405998841,33894312

Released under the MIT License.