酷狗音乐、QQ音乐、网易云音乐API
写在前面
一开始现操期中课程设计想要做一个可以共享各大音乐平台的音乐播放器,而这些音乐平台都没有提供API接口(很正常ヾ(・ε・`*) ),所以研究了一下酷狗音乐、QQ音乐、网易云音乐的网页版,通过网页版来获取数据;然而最后因为时间的关系课程设计只使用了网易云音乐,emm。。。期中课程设计是团队合作完成的,项目链接,如果之后有空的话也会写篇博客简要介绍一下我们的期中课程设计(~ ̄▽ ̄)~
说回正题,这篇博客首先会分享一下那时候收集到的API,这里有的是大神已经找好的,有一些是自己解析网页版资源得到的,仅供学习研究(正经脸);然后会介绍一下是怎么解析网页版的数据的,不过涉及到解密的部分我就不会啦,逃。。。顺带一提,这个还是挺有用的,利用这个方法制作了一个自动签到的脚本,虽然最后只随机分到了四个钥匙扣(为毛分不到抱枕嘞,(ノДT))继续逃。。。
酷狗音乐
歌曲搜索
方法一:
url:http://songsearch.kugou.com/song_search_v2
必选参数:keyword(关键字)
可选参数:page(第几页),pagesize(一页的搜索结果数目)
eg:
http://songsearch.kugou.com/song_search_v2?keyword=%E5%86%8D%E9%A3%9E%E8%A1%8C&page=1&pagesize=30
方法二:
url: http://mobilecdn.kugou.com/api/v3/search/song
必选参数:keyword(关键字)
可选参数:page(第几页),pagesize(一页的搜索结果数目)
eg:
http://mobilecdn.kugou.com/api/v3/search/song?keyword=%E5%86%8D%E9%A3%9E%E8%A1%8C&page=1&pagesize=10
获取音乐下载地址
首先,我们需要上面方法二搜索结果的hash:
获取MV总共有两种方法
方法一:
url:http://trackercdn.kugou.com/i/v2/?cmd=25
必选参数:
hash:上面的hash全小写
key:对上面的hash加盐值(SALT)kgcloudv2,然后进行md5加密
behavior:download
eg:
http://trackercdn.kugou.com/i/v2/?cmd=25&key=49f701e8b36115d84c13d5d7decf2603&hash=d9887aecacd56ddc63786ea0028015b4&behavior=download
方法二:
url:http://trackercdn.kugou.com/i/v2/?cmd=26
必选参数:
mid:0(可以选其他值)
userid:0(可以选其他值)
appid:1005(必须为1005)
behavior:play
version:0
vipType:0
token:0
hash:上面的hash全小写
key:对上面的hash加盐值(SALT)kgcloudv2100500(kgcloudv2后面的值就是 appid+mid+userid),然后进行md5加密
eg:
http://trackercdn.kugou.com/i/v2/?cmd=26&key=6d40e212383d3c45633f8e8f1e332d76&hash=d9887aecacd56ddc63786ea0028015b4&behavior=play&mid=0&appid=1005&userid=0&version=0&vipType=0&token=0
MV搜索
url : http://mvsearch.kugou.com/mv_search
必选参数:keyword(关键字)
可选参数:page(第几页),pagesize(一页的搜索结果数目)
eg:
http://mvsearch.kugou.com/mv_search?&keyword=%E5%86%8D%E9%A3%9E%E8%A1%8C&pagesize=30&page=1
获取MV下载地址
首先,我们需要上面搜索MV返回结果的MvHash
如图:
获取MV总共有四种方法:
方法一:
url:http://trackermv.kugou.com/interface/index/cmd=4
必选参数:
hash:上面的MvHash全大写
key:对上面的MvHash加盐值(SALT)kgcloud,然后进行md5加密
ext:mp4
eg:
http://trackermv.kugou.com/interface/index/cmd=4&hash=4CFA5311D22BA49BAFCEA9B9E992FBF7&key=83dfaed92e992719954c37a97ccfce94&ext=mp4
方法二:
url:http://trackermv.kugou.com/interface/index/cmd=100
必选参数:
hash:上面的MvHash全大写
key:对上面的MvHash加盐值(SALT)kugoumvcloud,然后进行md5加密
ext:mp4
eg:
http://trackermv.kugou.com/interface/index/cmd=100&hash=4CFA5311D22BA49BAFCEA9B9E992FBF7&key=fe3dd52c9760c4d7cd25f28666556bd0&ext=mp4
这个可以返回所有的mv链接
方法三:
url:http://trackermv.kugou.com/interface/index/cmd=103
必选参数:
hash:上面的MvHash全大写
key:对上面的MvHash加盐值(SALT)kugoumvcloud,然后进行md5加密
ext:mp4
eg:
http://trackermv.kugou.com/interface/index/cmd=103&hash=4CFA5311D22BA49BAFCEA9B9E992FBF7&key=fe3dd52c9760c4d7cd25f28666556bd0&ext=mp4
方法四:
url:http://trackermv.kugou.com/interface/index/cmd=104
必选参数:
hash:上面的MvHash全大写
ext:mp4
eg:
http://trackermv.kugou.com/interface/index/cmd=104&hash=4CFA5311D22BA49BAFCEA9B9E992FBF7&ext=mp4
QQ音乐
获取最新音乐
url:
https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?uin=0¬ice=0&platform=h5&needNewCode=1&tpl=3&page=detail&type=top&topid=27
获取推荐歌曲
url:
https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?notice=0&platform=h5&tpl=3&page=detail&type=top&topid=36
歌曲搜索
url:
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0
必选参数:w(关键词)
可选参数:p(相当于上面的page),(相当于上面的pagesize)
eg:
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=20&w=%E5%86%8D%E9%A3%9E%E8%A1%8C
获取歌曲播放链接
首先,我们需要上面API提供的songmid
如图:
url:http://ws.stream.qqmusic.qq.com/songmid.m4a
(这里的songmid替换为上面的songmid)
必选参数:
fromtag:0
guid:一个随机的9位数
eg:
http://ws.stream.qqmusic.qq.com/C100000Fc2iQ4eBEei.m4a?fromtag=0&guid=126548448
获取歌词
获取歌词就比较麻烦了,emm,
首先,我们需要先获取一个vkey:
例如:
https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?format=json205361747&platform=yqq&cid=205361747&songmid=000Fc2iQ4eBEei&filename=C400000Fc2iQ4eBEei.m4a&guid=1684916857
上面链接中的songmid需要替换为对应的songmid,filename需要替换为对应的C400 + songmid + .m4a
上面的链接会返回一个json字符串文件,其中就有我们要的vkey:
因为QQ音乐还要验证我们的请求头信息,所以简单地在浏览器输入一个url是不能成功的,所以,我们需要使用代码伪装我们的请求头,这里使用python(py大法好)获取歌词信息:
def lrc_save(self, path=os.path.join(os.path.abspath(\'./\'), \'song\')): \'\'\' 保存歌词 \'\'\' headers = { "Referer": "https://y.qq.com/portal/1player.html", "Cookie": "skey=@LVJPZmJUX;p", } url = \'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?g_tk=753738303&songmid=\' + self.song_mid; lrc_data = requests.get(url, headers=headers) if lrc_data.status_code != 200: print(\'歌词不存在或网络错误\') return False lrc_dict = json.loads(lrc_data.text[18:-1]) lrc_data = base64.b64decode(lrc_dict[\'lyric\']) with open(os.path.join(path, self.save_title + \'.lrc\'), \'w\') as fr: try: fr.write(lrc_data) except TypeError: fr.write(bytes.decode(lrc_data)) # 若有翻译歌词 if lrc_dict.get(\'trans\'): lrc_data = base64.b64decode(lrc_dict[\'trans\']) with open(os.path.join(path, self.save_title + \'-trans.lrc\'), \'w\') as fr: try: fr.write(lrc_data) except TypeError: fr.write(bytes.decode(lrc_data)) print(\'歌词下载完成\') print(os.path.join(path, self.save_title + \'.lrc\')) return True
网易云音乐
网易云音乐的API算是最全的了,感谢@Binaryify大神提供的API:NeteaseCloudMusicApi
解析网页数据初尝试
以酷狗音乐为例(因为酷狗音乐的搜索不涉及加密,最简单(~ ̄▽ ̄)~ );打开浏览器开发者工具(DevTools),之后打开Network选项卡,在这里我们可以看到接收到的所有数据;
进行搜索,我们就可以看到Network选项卡中同步更新着接收的数据。
从接收的数据项中我们可以找到含有搜索结果的数据项,此时我们可以查看Header
这里包含了请求的信息,各参数的意思看一下就知道了,可以看到Request URL为:
http://songsearch.kugou.com/song_search_v2?callback=jQuery112409228444210604791_1532860990338&keyword=%E5%86%8D%E9%A3%9E%E8%A1%8C&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0
删除一些可选项,最后的结果就是:
http://songsearch.kugou.com/song_search_v2?keyword=%E5%86%8D%E9%A3%9E%E8%A1%8C&page=1&pagesize=30
这和我们上面酷狗音乐搜索歌曲的API一致
有一些网站还有对请求头进行验证,这时候就需要伪造请求头了,如上面QQ音乐的歌词获取
而且大部分网站都是对请求进行加密的,这就需要查看代码(或解密,这个真的不会)了,在Network选项卡里包含了一些代码文件,有时候需要看代码才能知道怎么弄了。