网易云音乐常用api剖析

Author Avatar
五折 10月 04, 2015

话不多说

PC客户端抓包而来

说明

关于头部信息

Cookie: os=pc; deviceId=B55AC773505E5606F9D355A1A15553CE78B89FC7D8CB8A157B84; osver=Microsoft-Windows-8-Professional-build-9200-64bit; appver=1.5.0.75771; usertrack=ezq0alR0yqJMJC0dr9tEAg==; MUSIC_A=088a57b553bd8cef58487f9d01ae
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36\r\n
上面是抓到的信息,其中必要的只有cookie中的appver。而且如果要调用api,必须加上Referer,只要是music.163.com的就可以

Cookie: appver=1.5.0.75771;
Referer: http://music.163.com/
以上两条即可

返回的格式均为json

搜索

抓取到的信息如下

Full request URI:http://music.163.com/api/search/pc
Key: hlpretag
Value:
Key: hlposttag
Value:

Key: s
Value: \345\226\234\346\254\242\344\275\240
Key: offset
Value: 0
Key: total
Value: true
Key: limit
Value: 100
Key: type
Value: 1
URL:
POST http://music.163.com/api/search/pc

必要参数:

s:搜索的内容

offset:偏移量(分页用)

limit:获取的数量

type:搜索的类型

歌曲 1

专辑 10

歌手 100

歌单 1000

用户 1002

mv 1004

歌词 1006

主播电台 1009

歌曲信息

Full request URI: http://music.163.com/api/song/detail/?id=28377211&ids=%5B28377211%5D
URL:
GET http://music.163.com/api/song/detail/

必要参数:

id:歌曲ID

ids:不知道干什么用的,用[]括起来的歌曲ID

歌手专辑

Full request URI: http://music.163.com/api/artist/albums/166009?id=166009&offset=0&total=true&limit=5
URL:
GET http://music.163.com/api/artist/albums/歌手ID

必要参数:

limit:获取的数量(不知道为什么这个必须加上)

专辑信息

Full request URI: http://music.163.com/api/album/2457012?ext=true&id=2457012&offset=0&total=true&limit=10
URL:
GET http://music.163.com/api/album/专辑ID

歌单

Full request URI: http://music.163.com/api/playlist/detail?id=37880978&updateTime=-1
URL:
GET http://music.163.com/api/playlist/detail

必要参数:

id:歌单ID

歌词

Full request URI: http://music.163.com/api/song/lyric?os=pc&id=93920&lv=-1&kv=-1&tv=-1
URL:
GET http://music.163.com/api/song/lyric

必要参数:

id:歌曲ID

lv:值为-1,我猜测应该是判断是否搜索lyric格式

kv:值为-1,这个值貌似并不影响结果,意义不明

tv:值为-1,是否搜索tlyric格式

MV

Full request URI: http://music.163.com/api/mv/detail?id=319104&type=mp4
URL:
GET http://music.163.com/api/mv/detail

必要参数:

id:mvid

type:值为mp4,视频格式,不清楚还有没有别的格式

PHP版使用示例

<?php
/**

  • Created by PhpStorm.
  • User: Moon
  • Date: 2014/11/26 0026
  • Time: 2:06
    */
    function curl_get($url)
    {
    $refer = “http://music.163.com/";
    $header[] = “Cookie: “ . “appver=1.5.0.75771;”;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_REFERER, $refer);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
    }
    function music_search($word, $type)
    {
    $url = “http://music.163.com/api/search/pc";
    $post_date = array(
    's' => $word,
    'offset' => '0',
    'limit' => '20',
    'type' => $type,
    
    );
    $referrer = “http://music.163.com/";
    $URL_Info = parse_url($url);
    $values = [];
    $result = ‘’;
    $request = ‘’;
    foreach ($post_date as $key => $value) {
    $values[] = "$key=" . urlencode($value);
    
    }
    $date_string = implode(“&”, $values);
    if (!isset($URL_Info[“port”])) {
    $URL_Info["port"] = 80;
    
    }
    $request .= “POST “ . $URL_Info[“path”] . “ HTTP/1.1\n”;
    $request .= “Host: “ . $URL_Info[“host”] . “\n”;
    $request .= “Referer: $referrer\n”;
    $request .= “Content-type: application/x-www-form-urlencoded\n”;
    $request .= “Content-length: “ . strlen($date_string) . “\n”;
    $request .= “Connection: close\n”;
    $request .= “Cookie: “ . “appver=1.5.0.75771;\n”;
    $request .= “\n”;
    $request .= $date_string . “\n”;
    $fp = fsockopen($URL_Info[“host”], $URL_Info[“port”]);
    fputs($fp, $request);
    $i = 1;
    while (!feof($fp)) {
    if ($i >= 15) {
        $result .= fgets($fp);
    } else {
        fgets($fp);
        $i++;
    }
    
    }
    fclose($fp);
    return $result;
    }
    function get_music_info($music_id)
    {
    $url = “http://music.163.com/api/song/detail/?id=" . $music_id . “&ids=%5B” . $music_id . “%5D”;
    return curl_get($url);
    }
    function get_artist_album($artist_id, $limit)
    {
    $url = “http://music.163.com/api/artist/albums/" . $artist_id . “?limit=” . $limit;
    return curl_get($url);
    }
    function get_album_info($album_id)
    {
    $url = “http://music.163.com/api/album/" . $album_id;
    return curl_get($url);
    }
    function get_playlist_info($playlist_id)
    {
    $url = “http://music.163.com/api/playlist/detail?id=" . $playlist_id;
    return curl_get($url);
    }
    function get_music_lyric($music_id)
    {
    $url = “http://music.163.com/api/song/lyric?os=pc&id=" . $music_id . “&lv=-1&kv=-1&tv=-1”;
    return curl_get($url);
    }
    function get_mv_info()
    {
    $url = “http://music.163.com/api/mv/detail?id=319104&type=mp4";
    return curl_get($url);
    }
    #echo music_search(“Moon Without The Stars”, “1”);
    #get_music_info(“28949444”);
    #echo get_artist_album(“166009”, “5”);
    #echo get_album_info(“3021064”);
    #echo get_playlist_info(“22320356”);
    #echo get_music_lyric(“29567020”);
    #echo get_mv_info();
    PS:搜索的接口我用CURL调用失败,原因未知,于是搜索是用文件操作实现的