网易云音乐API分析 api(废弃) - zousandian/NeteaseCloudMusicApi GitHub Wiki

0. 状态

本 API 目前只使用在外链播放器上。
该 API 已经开始逐渐淘汰,目前已经无法正常解析非中英语种曲目。

1. 总览

所有交互需要指定两个参数:

key value
cookie appver=2.0.2
referer http://music.163.com

2. 搜索

POST http://music.163.com/api/search/get/
有网友指出将 get 替换为 pc 可以获取更多参数

参数

s: 关键字

limit: 返回数据条数限制

type: 搜索类型

  • 1 单曲
  • 10 专辑
  • 100 歌手
  • 1000 歌单
  • 1002 用户
  • 1009 电台
  • NULL 推荐(实测失效)

offset: 偏移数量,用于分页

3. 专辑

GET http://music.163.com/api/album/{album_id}

参数

album_id: 专辑 ID

4. 歌单

GET http://music.163.com/api/playlist/detail?id={playlist_id}&updateTime=-1

参数

playlist_id: 歌单 ID

updateTime: 更新时间

  • -1 最新
  • 否则使用时间戳

5. 单曲

POST http://music.163.com/api/song/detail

参数

id: 歌曲 ID

ids: [歌曲 ID] 不要省略外面的中括号

6. URL 分析

http://[CDN].music.126.net/[encrypted]/[dfsId].mp3

参数

CDN: 可选 m1-3|p1-4,通常选取 m2 最佳,部分下架歌曲可以通过 p4 获得

dfsId: 每个歌曲的不同音质都有自己一个独立的 ID,在后续新的 API 中被更名为 fid

encrypted: 对 dfsId 的加密校验码,其算法如下

function get_encrypted($id){
    $byte1[]=$this->Str2Arr('3go8&$8*3*3h0k(2)2');
    $byte2[]=$this->Str2Arr($id);
    $magic=$byte1[0];
    $song_id=$byte2[0];
    for($i=0;$i<count($song_id);$i++){
        $song_id[$i]=$song_id[$i]^$magic[$i%count($magic)];
    }
    $result=base64_encode(md5($this->Arr2Str($song_id),1));
    $result=str_replace('/','_',$result);
    $result=str_replace('+','-',$result);
    return $result;
}
function Str2Arr($string){
    $bytes=[];
    for($i=0;$i<strlen($string);$i++){
        $bytes[]=ord($string[$i]);
    }
    return $bytes;
}
function Arr2Str($bytes){
    $str='';
    for($i=0;$i<count($bytes);$i++){
        $str.=chr($bytes[$i]);
    }
    return $str;
}