网易云音乐常用API浅析

话不多说

PC客户端抓包而来

0.说明

关于头部信息

上面是抓到的信息,其中必要的只有cookie中的appver。而且如果要调用api,必须加上Referer,只要是music.163.com的就可以

以上两条即可

返回的格式均为json

 

1.搜索

抓取到的信息如下

URL:

POST http://music.163.com/api/search/pc

必要参数:

s:搜索的内容

offset:偏移量(分页用)

limit:获取的数量

type:搜索的类型

歌曲 1

专辑 10

歌手 100

歌单 1000

用户 1002

mv 1004

歌词 1006

主播电台 1009

 

2.歌曲信息

URL:

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

必要参数:

id:歌曲ID

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

 

3.歌手专辑

URL:

GET http://music.163.com/api/artist/albums/歌手ID

必要参数:

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

 

4.专辑信息

URL:

GET http://music.163.com/api/album/专辑ID

 

5.歌单

URL:

GET http://music.163.com/api/playlist/detail

必要参数:

id:歌单ID

 

6.歌词

URL:

GET http://music.163.com/api/song/lyric

必要参数:

id:歌曲ID

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

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

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

 

7.MV

URL:

GET http://music.163.com/api/mv/detail

必要参数:

id:mvid

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

 

 

PHP版使用示例

 

PS:搜索的接口我用CURL调用失败,原因未知,于是搜索是用文件操作实现的

发布者

Moon

一只月月

《网易云音乐常用API浅析》有120个想法

      1. 请问这个请求地址是什么呢?我网站上的音乐现在全部都播放不了了。之前都是好的,现在音乐地址都是404。大神有了解么,跪求解决方案。86568284@qq.com

        1. 解决是解决了,用的http://music.163.com/api/song/enhance/player/url接口,但还是有部分歌曲获取不到,比如陈奕迅的很多都不能播放。但我看到别人用token方式获取的是能播放部分的。

  1. 博主,,你这略屌啊,我想拿个歌单的全部歌词来分析下,对歌词的json文件请求,看的头都大了,完全看不出个所以然。。谢谢了

  2. 博主,你的这个代码高亮插件是哪种,我试了好几种,都显示的有问题,能麻烦你指导一下嘛?这是新文章地址:http://www.telstatic.xyz/wordpress/?p=40

    1. 你好,我在 Github 上的一个项目参考了 Moon 于这篇文章中的 API ,并对 json 进行了解析,你可以参考一下
      PS.在rm中把 Moon 打错了…下一次顺便改下。正在对代码进行重构,欢迎交流😀.

  3. 我在本地php环境调用获取歌曲信息的API 能正常, 但是放上服务器之后, 请求API返回的结果中经常mp3Url字段是空的, 请问下可能是什么原因?

  4. 塞班的PYS60无法正常使用搜索API。使用WLAN很正常,而使用移动3G接入点就无法正常返回;联通3G倒是正常得很!请楼主指点一下,谢谢。

  5. 请问,歌曲对应的ID是通过抓包获取来的吗?如“小酒窝”对应“XXXXXXX”.WireShark怎样来抓取网易云音乐的歌曲信息?请楼主赐教

  6. mp3Url:”http://m2.music.126.net/rAHYkPwy0V4OZKooI4pUOg==/3125911557777504.mp3″

    这是我用node做服务器 搜素来获取到的音乐地址 怎么打不开啊

  7. 楼主,请问,关于搜索歌名的部分怎么弄?为什么我没有数据的。。。使用歌曲ID作为搜索条件,这个太苛刻了。

      1. – -我的博客噗。。树莓派搭建的。ip经常变,而且是手改没用DDNS。而且树莓派基本上每天早上醒来基本都会发现”惊喜”

  8. 首先感谢博主的分享,很有用!!
    但是我发现了一个问题,就是获取的到的mp3url没办法播放,好像是国外的音乐都这样?(反正我歌单里面的日文歌都不能播放)。博主有什么办法吗?

    1. 亲 我目前做一个iOS的类似网易云的播放器项目,用网易云接口,但是就是这个搜索的API搞不定 能否指点一二

  9. 请教一下,当时抓包的时候,post请求的参数是怎么看的?不是加密 了吗,怎么能看到请求参数的真实值?

  10. 我搜索内容s用的URLencode编码成%E5%B0%8F%E8%8B%B9%E6%9E%9C(小苹果)这样搜出来的是其它的歌,但是英文歌没问题。不知道是为什么

  11. 哎网易那个搜索接口真是坑爹啊,又出问题了。
    发送POST如下(就是博主那个PHP)

    POST http://music.163.com/api/search/pc HTTP/1.1
    Host: music.163.com
    Referer: http://music.163.com/
    Content-type: application/x-www-form-urlencoded
    Content-length: 45
    Connection: close
    Cookie: appver=1.5.0.75771;

    s=%E7%BA%A2%E8%B1%86&offset=0&limit=20&type=1

    没啥问题,正确返回了结果,但是用博主那个PHP程序,页面显示为空白…… 我拦截了HTTPD的请求,看到返回结果正常啊,但是为啥PHP就是没有获取到数据呢?

  12. 对了还有件事情要麻烦博主一下,不知道为什么,我自己写程序抓的时候总是出现403错误:
    {"message":"illegal request!","code":403}
    然后我用你的代码就是正确的。我抓包得到两者的请求如下:
    https://dn-tfp.qbox.me/@/tmp/1.png
    https://dn-tfp.qbox.me/@/tmp/2.png
    基本没有大的差别啊,为啥第一个不可以第二个却可以呢,这接口到底是采用什么来判定是否是合法请求呢。。。

    PS,本来想直接用博主的示例脚本的,但我写的是ASP:)

  13. 感谢博主,但是发现一个奇怪的问题,就是搜索的接口居然会根据不同的地区IP相应不同的结果。。。 比如完全相同的请求:
    POST /api/search/pc HTTP/1.1
    Host: music.163.com
    Referer: http://music.163.com/
    Content-type: application/x-www-form-urlencoded
    Content-length: 45
    Connection: close
    Cookie: appver=1.5.0.75771;
    s=%E7%BA%A2%E8%B1%86&offset=0&limit=20&type=1

    在我自己的机器上就是正确搜索出《红豆》(%E7%BA%A2%E8%B1%86)的结果,但是放到VPS(日本)上面就是乱七八糟的结果。我开始以为是环境差异,但是我把本机的全局代理设到VPS上面,居然也是那个错误的结果。

    更诡异的事情在后面,我在请求头添加了
    $request .= "X-FORWARDED-FOR: ***我的本机外网IP***;\n";
    $request .= "CLIENT-IP: ***我的本机外网IP***;\n";

    然后网易的服务器就一直不返回结果了,但是连接也没有关闭,最后导致PHP执行超时,更可怕的是,就算是我把这两行去掉服务器依旧没有相应了,这到底都是什么鬼……

  14. 网易API的最近好像从http://music.163.com/api/变成了http://music.163.com/weapi/并且还用aes和rsa进行了加密。
    至少目前登录的原api是挂了,估计其他的也命不久已。

发表评论

电子邮件地址不会被公开。 必填项已用*标注