由于最近比较清闲,所以来研究下网易云音乐
看了其他音乐的api,原以为最麻烦的是TX的,没想到却是网易云的。
所以下面给出网易云的api流程,希望可以帮到道友。
首先说下搜索,打开主页搜索一个歌曲,如搜索大海
F12 可以很明显的看到
1.post发送
2.url里面没有数据,能找到这,估计早就已经了解了,他的数据在params和encSecKey
那么下面就说明下这个params和encSecKey里面的内容
首先 params:
根据网易云音乐API分析(附C#版教程源码) - 只为小站的流程,我追到了这里
我说明下几个值的含义
1.那个i是个随机数 16位的 用来生成AES(CBC)加密
2.那个01020304050607是AES加密的偏移IV
3.那个d是加密前的串
{"hlpretag":"<span class=\"s-fc7\">","hlposttag":"</span>","s":"大海","type":"1","offset":"0","total":"true","limit":"30","csrf_token":""}
这样就很容易看懂了吧,total表示是否是第一次
limit表示返回多少
offset表示偏移数量 也就是第几页*limit
s 就是内容 这里注意不要格式化成百分号直接传汉字
从上面应该也已经知道了,这个加密就是AES加密两次
第一次密码是固定值:0CoJUm6Qyw8W8jud
第二次密码是随机数 我这次是 9cxqkYv1WsSmRWZ1
在线AES加密解密、AES在线加密解密、AES encryption and decryption使用AES加密
配置如下图
CBC pkcs7 密码和偏移在上面 编码一定要选择utf8不然不一样
这里都可以看出来 加密结果跟网页上的一样了
然后进行第二次加密(好像大图会看不清楚,所以我尽量截取的小一点)
第二轮记得写那个随机值作为密码
这里也能看到跟浏览器的一样
然后说encSecKey
这个呢 其实就是一个验证,是用来解密刚刚那个随机数的。所以这个key和随机数是一一对应的。不然服务器怎么知道你上面的那个串第二次使用的什么数字
所以记住一个就够用了。使用的rsa 有兴趣的自己摸索吧,我这用不到 哈哈。
这里的串是
96082b986b9f636e80c4de5868d9798cd4f5008d09d19c39c21817d36b3df39719a9c6d367e249eedba216ce536e839265edc6e1cc5486db3f9545e5c560f329476cf9bb962a3ef63c4ae48c08df1aac1244f056aa1a356becc10bd475bd95b80442d17515070f50b7730d43c9db00a151a0d530786d336767df354ab9189e50
返回值是json 刚刚的limit是30 所以返回了30个
至于url的拼接就简单了
https://music.163.com/weapi/cloudsearch/get/web?csrf_token=¶ms=MtS5wM1%2Bmp%2F4tgXuJWzGT9vH9jVa0XfYXkmxE552cHaP6yGj27YWkvocI5I5xtKdWYZMXCxOizD4udP4BdTkY%2BjJi8dyj5aqPznXg7SdpKEQBPcw1Vw%2BWu9oW5CfsYVAKsFc8lhUEFirOxZNj%2Bd56UQ6oGUlSk2%2FGkieBm1CMrEw0XkrUoKLOrFn5V3fsB4py3T%2BCRCC3LqPQ%2BJUuOuOKy2k4AERk0vMClGsTerZWC3O478kL82YxRk9otzgWC9v8ugUQHPlpbeL556x1HJo%2Fw%3D%3D&encSecKey=96082b986b9f636e80c4de5868d9798cd4f5008d09d19c39c21817d36b3df39719a9c6d367e249eedba216ce536e839265edc6e1cc5486db3f9545e5c560f329476cf9bb962a3ef63c4ae48c08df1aac1244f056aa1a356becc10bd475bd95b80442d17515070f50b7730d43c9db00a151a0d530786d336767df354ab9189e50
只有用post 访问才可以。
未完待续。。。
下面还需要做的是获取歌曲播放url
歌词获取的url
再次感谢这位大神网页解析。
网易云音乐API分析(附C#版教程源码) - 只为小站第二天了,继续昨天没完成的
播放url :
百度了好久,以前的都不能用了,最终找到了这个,就是不知道能坚持多久了
http://music.163.com/api/song/enhance/player/url?id=85580&ids=[85580]&br=3200000
id和ids都写上面获取的那个id
返回是json
{"data":[{"id":85580,"url":"http://m10.music.126.net/20180727131055/a6214204392c946bda3e7530e30467c7/ymusic/ed62/ce1e/9bec/34b619c75813bc0dd97fc84520476838.mp3","br":128000,"size":3920501,"md5":"34b619c75813bc0dd97fc84520476838","code":200,"expi":1200,"type":"mp3","gain":-3.58,"fee":8,"uf":null,"payed":0,"flag":0,"canExtend":false}],"code":200}
这就很明显了直接用就可以了大小播放啥都有了
歌词:
http://music.163.com/api/song/lyric?os=pc&id=85580&lv=-1&kv=-1&tv=-1
很明显 有一个id 后面的lv kv tv
应该lv是获取普通的歌词
kv是那种带着时间戳的很详细的歌词 类似(0,606)忘(0,305)了(0,459)有(0,661)多(0,1624)久
lv应该是翻译的歌词
到这里就可以很轻松的完成一个音乐播放器了。
最后,如果有需要C++版本的AES_CBC加密的,请关注并私聊我。要求不高,伸手党,至少点个关注吧。