Skip to content

获取歌曲详情

调用此接口,传入音乐 id(支持多个 id, 用 , 隔开), 可获得歌曲详情(dt为歌曲时长)

接口信息

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

请求参数

参数类型必填默认值说明
idsstring-音乐 id, 如 ids=347230

HTTP 示例

bash
GET /song/detail?ids=347230
GET /song/detail?ids=347230,347231

编程式调用

ts
import { songDetail } from 'hana-music-api'

const result = await songDetail({
  ids: '347230',
})

console.log(result.body)

补充说明

说明 : 调用此接口,传入音乐 id(支持多个 id, 用 , 隔开), 可获得歌曲详情(dt为歌曲时长)

必选参数 : ids: 音乐 id, 如 ids=347230

接口地址 : /song/detail

调用例子 : /song/detail?ids=347230,/song/detail?ids=347230,347231

返回字段说明(感谢 @tuxzz 整理):

text
name: String, 歌曲标题
id: u64, 歌曲ID
pst: 0,功能未知
t: enum,
  0: 一般类型
  1: 通过云盘上传的音乐,网易云不存在公开对应
    如果没有权限将不可用,除了歌曲长度以外大部分信息都为null。
    可以通过 `/api/v1/playlist/manipulate/tracks` 接口添加到播放列表。
    如果添加到“我喜欢的音乐”,则仅自己可见,除了长度以外各种信息均为未知,且无法播放。
    如果添加到一般播放列表,虽然返回code 200,但是并没有效果。
    网页端打开会看到404画面。
    属于这种歌曲的例子: https://music.163.com/song/1345937107
  2: 通过云盘上传的音乐,网易云存在公开对应
    如果没有权限则只能看到信息,但无法直接获取到文件。
    可以通过 `/api/v1/playlist/manipulate/tracks` 接口添加到播放列表。
    如果添加到“我喜欢的音乐”,则仅自己可见,且无法播放。
    如果添加到一般播放列表,则自己会看到显示“云盘文件”,且云盘会多出其对应的网易云公开歌曲。其他人看到的是其对应的网易云公开歌曲。
    网页端打开会看到404画面。
    属于这种歌曲的例子: https://music.163.com/song/435005015
ar: Vec<Artist>, 歌手列表
alia: Vec<String>,
  别名列表,第一个别名会被显示作副标题
  例子: https://music.163.com/song/536623501
pop: 小数,常取[0.0, 100.0]中离散的几个数值, 表示歌曲热度
st: 0: 功能未知
rt: Option<String>, None、空白字串、或者类似`600902000007902089`的字符串,功能未知
fee: enum,
  0: 免费或无版权
  1: VIP 歌曲
  4: 购买专辑
  8: 非会员可免费播放低音质,会员可播放高音质及下载
  fee 为 1 或 8 的歌曲均可单独购买 2 元单曲
v: u64, 常为[1, ?]任意数字, 代表歌曲当前信息版本
version: u64, 常为[1, ?]任意数字, 代表歌曲当前信息版本
crbt: Option<String>, None或字符串表示的十六进制,功能未知
cf: Option<String>, 空白字串或者None,功能未知
al: Album, 专辑,如果是DJ节目(dj_type != 0)或者无专辑信息(single == 1),则专辑id为0
dt: u64, 歌曲时长
hr: Option<Quality>, Hi-Res质量文件信息
sq: Option<Quality>, 无损质量文件信息
h: Option<Quality>, 高质量文件信息
m: Option<Quality>, 中质量文件信息
l: Option<Quality>, 低质量文件信息
a: Option<未知>, 常为None, 功能未知
cd: Option<String>, None或如"04", "1/2", "3", "null"的字符串,表示歌曲属于专辑中第几张CD,对应音频文件的Tag
no: u32, 表示歌曲属于CD中第几曲,0表示没有这个字段,对应音频文件的Tag
rtUrl: Option<String(?)>, 常为None, 功能未知
rtUrls: Vec<String(?)>, 常为空列表, 功能未知
djId: u64,
  0: 不是DJ节目
  其他:是DJ节目,表示DJ ID
copyright: u32, 0, 1, 2: 功能未知
s_id: u64, 对于t == 2的歌曲,表示匹配到的公开版本歌曲ID
mark: u64, 一些歌曲属性,用按位与操作获取对应位置的值
  8192 立体声?(不是很确定)
  131072 纯音乐
  262144 支持 杜比全景声(Dolby Atmos)
  1048576 脏标 🅴
  17179869184 支持 Hi-Res
  其他未知,理论上有从1到2^63共64种不同的信息
  专辑信息的mark字段也同理
  例子:id 1859245776 和 1859306637 为同一首歌,前者 mark & 1048576 == 1048576,后者 mark & 1048576 == 0,因此前者是脏版。

originCoverType: enum
  0: 未知
  1: 原曲
  2: 翻唱
originSongSimpleData: Option<SongSimpleData>, 对于翻唱曲,可选提供原曲简单格式的信息
single: enum,
  0: 有专辑信息或者是DJ节目
  1: 未知专辑
noCopyrightRcmd: Option<NoCopyrightRcmd>, 不能判断出歌曲有无版权
mv: u64, 非零表示有MV ID
rtype: 常为0,功能未知
rurl: Option<String(?)>, 常为None,功能未知
mst: u32, 偶尔为0, 常为9,功能未知
cp: u64, 功能未知
publishTime: i64, 毫秒为单位的Unix时间戳
pc: 云盘歌曲信息,如果不存在该字段,则为非云盘歌曲
privilege:权限相关信息
  cs:bool,是否为云盘歌曲
  st:小于0时为灰色歌曲, 使用上传云盘的方法解灰后 st == 0
  toast:bool,是否「由于版权保护,您所在的地区暂时无法使用。」
  flLevel:免费用户的该歌曲播放音质
  plLevel:当前用户的该歌曲最高试听音质
  dlLevel:当前用户的该歌曲最高下载音质
  maxBrLevel;歌曲最高音质

Released under the MIT License.