记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器
1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除。
2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/p/8448126.html,谢谢
小八这几天正在学习微信小程序的开发,于是想在学的同时能开发出来一个关于音乐的项目,但是问题在于音乐这东西。一方面是数据量太大,第二个方面就是牵扯到很多的版权的问题,所以笔者就想着借助于目前市面上的音乐播放器上的音乐文件,鉴于酷狗音乐上边的歌多而且比较的全面,在此就以酷狗音乐为示例,其它的什么QQ音乐和网易之类的也一样。
建议:用Chrome或者Firefox来进行抓取。
1.打开Chrome地址栏输入酷狗音乐的官网,进入官网后随便搜索一首歌曲,这里以最近比较火的一首歌曲广东爱情故事为例,搜索后按下键盘的F12或者鼠标右键选择检查来打开开发者神器,然后点击Network(用来调试浏览器和服务器交互的工具)随后再次刷新搜索结果页面,会发现工具中出现很多的链接,其链接都是服务器返回给浏览器的数据,如下图。
2.分析:既然是服务器返回给浏览器的数据,其中必有歌曲的相关信息,我们来查看这些链接来看哪个返回了与歌曲相关的数据。当我们查看到一个song_search的链接后发现它callback了一个jQuery的数据对象,我们点击这个song_search这个链接,然后点击Response这个选项卡来看看它返回了 什么数据,如图:它返回了和歌曲相关的信息
点击Headers来来查看它详细的信息。如图:
3.我们发现这个URL很像搜索歌曲的,然后我们复制其到浏览器打开如图:
然后我们多替换keyword为不同的歌曲名称发现它都返回的是歌曲的搜索列表,在此我们已经找到搜索歌曲的链接:http://songsearch.kugou.com/song_search_v2?callback=jQuery1124006980366032059648_1518578518932&keyword=这里是歌曲名称&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1518578518934
4.我们来继续播放歌曲,就拿搜索结果的第一个歌来看,地址栏中一个hash就打开了歌曲的所有信息,所以在这我们分析到只要拿到这个hash值就拿到了歌曲的所有播放信息
5.分析刚才搜索返回的数据,我们删除搜索返回数据的最外边的小括号后它其实就是一个json数据,我们来格式化这个json数据,如下:
{ "status": 1, "error_code": 0, "data": { "page": 1, "tab": "全部", "lists": [{ "SongName": "广东爱情故事<\/em>", "OwnerCount": 628451, "MvType": 2, "TopicRemark": "", "SQFailProcess": 0, "Source": "", "Bitrate": 128, "HQExtName": "mp3", "SQFileSize": 0, "ResFileSize": 0, "Duration": 214, "MvTrac": 3, "SQDuration": 0, "ExtName": "mp3", "Auxiliary": "", "SongLabel": "", "Scid": 29199917, "OriSongName": "广东爱情故事<\/em>", "FailProcess": 0, "SQBitrate": 0, "HQBitrate": 320, "Audioid": 29199917, "HiFiQuality": 1, "Grp": {}, "OriOtherName": "", "AlbumPrivilege": 0, "TopicUrl": "", "SuperFileHash": "", "ASQPrivilege": 0, "M4aSize": 878148, "AlbumName": "广东爱情故事", "IsOriginal": 1, "Privilege": 0, "ResBitrate": 0, "HQFailProcess": 0, "SQPayType": 0, "HQPrice": 0, "Type": "audio", "SourceID": 0, "Publish": 1, "ID": "89975939", "SuperFileSize": 0, "QualityLevel": 2, "SQFileHash": "00000000000000000000000000000000", "A320Privilege": 0, "HQPrivilege": 0, "SuperBitrate": 0, "SuperDuration": 0, "AlbumID": "4162049", "ResFileHash": "", "FileSize": 3429399, "MixSongID": "89975939", "HQFileHash": "0127995D50833821451408D8A7F90E15", "SuperExtName": "", "FileHash": "2A25AAFF4B6C84B859B4D77F944DE57A", "AudioCdn": 100, "OtherName": "", "SQPkgPrice": 0, "PkgPrice": 0, "HQFileSize": 8658421, "mvTotal": 4, "OldCpy": 1, "HQPayType": 0, "SQPrice": 0, "ResDuration": 0, "PublishAge": 255, "Price": 0, "HQPkgPrice": 0, "SingerName": "广东雨神", "SQExtName": "", "MvHash": "421FD51941758456539B5C1EA10A7E2E", "SQPrivilege": 0, "HQDuration": 214, "PayType": 0, "HasAlbum": 1, "Accompany": 1, "FileName": "广东雨神 - 广东爱情故事<\/em>" },
我们在里边找到了歌曲的FileHash和播放页面的hash值是一样的,在这我们就会拿到歌曲的hash值。
6.用同样的方法在Network中分析播放页面,会发现一个index的链接根据歌曲的hash值返回了歌曲的所有信息,如图:
url:https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash="这是歌曲的FileHash"
我们点击Header来查看具体的URL,如图:
我们复制URL在浏览器地址栏打开,如图
发现其返回的就是一个json数据,格式化后代码如下:
{ "status": 1, "err_code": 0, "data": { "hash": "2A25AAFF4B6C84B859B4D77F944DE57A", "timelength": 214000, "filesize": 3429399, "audio_name": "广东雨神 - 广东爱情故事", "have_album": 0, "album_name": "未知专辑", "album_id": 0, "img": "http:\/\/singerimg.kugou.com\/uploadpic\/softhead\/400\/20171222\/20171222112942494.jpg", "have_mv": 1, "video_id": "635812", "author_name": "广东雨神", "song_name": "广东爱情故事", "lyrics": "[00:00.03]广东雨神 - 广东爱情故事\r\n[00:02.61]词:广东雨神\r\n[00:03.83]曲:广东雨神\r\n[00:18.87]安静地离去\r\n[00:21.66]和孤单一起\r\n[00:26.47]拥挤的回忆时间抹去\r\n[00:33.26]人在广东已经漂泊十年\r\n[00:36.32]有时也怀念当初一起\r\n[00:38.41]经已改变\r\n[00:40.88]让这天空将你我相连\r\n[00:44.00]怀念你走了云的天空还任性\r\n[00:51.48]是否它相信在乎\r\n[00:53.10]反而容易放弃\r\n[00:55.92]非要最后一无所有\r\n[00:59.01]才无所畏惧\r\n[01:08.94]我知道好多时候\r\n[01:11.88]爱一个人是没任何理由的\r\n[01:15.92]你同其他女子不一样的\r\n[01:18.54]你从来都不问我钟意你什么\r\n[01:21.49]反而我成日都问你\r\n[01:24.96]你究竟钟意我什么\r\n[01:33.79]笑的多一些改变要彻底\r\n[01:41.34]直面这世界真假游戏\r\n[01:48.24]人在广东已经漂泊十年\r\n[01:51.34]有时也怀念当初一起\r\n[01:53.55]经已改变\r\n[01:55.81]让这天空将你我相连\r\n[01:59.23]怀念你走了云的天空还任性\r\n[02:06.41]是否它相信下一次的相遇\r\n[02:10.83]就算最后一无所有\r\n[02:13.83]也无所畏惧\r\n[02:18.78]相信你就如当初一起\r\n[02:22.24]行过广东这十年幸福走了\r\n[02:28.14]唏嘘感慨那当初\r\n[02:33.76]相信你哪怕坚强\r\n[02:36.44]是假装出勇敢的面具\r\n[02:41.33]也不能少活得精彩的勇气\r\n[02:48.34]人在广东已经漂泊十年\r\n[02:51.30]有时也怀念当初一起\r\n[02:53.48]经已改变\r\n[02:55.83]让这天空将你我相连\r\n[02:59.22]怀念你走了云的天空\r\n[03:04.72]还任性是否它相信\r\n[03:07.50]下一次的相遇\r\n[03:10.84]就算最后一无所有\r\n[03:13.78]也无所畏惧\r\n[03:18.50]就算最后一无所有\r\n[03:21.08]我都无所畏惧\r\n", "author_id": "721812", "privilege": 0, "privilege2": "0", "play_url": "http:\/\/fs.w.kugou.com\/201802141035\/e668b72ad68914612e8aacf363a34b22\/G114\/M0B\/00\/13\/UpQEAFnocumANGxzADRUF4h4Zks442.mp3", "authors": [{ "is_publish": "1", "author_id": "721812", "avatar": "20171222112942494.jpg", "author_name": "广东雨神" }], "bitrate": 128 }
我们发现歌曲的所有信息都在,包括图片,歌词,歌曲等等,我们来验证下歌曲的url,复制play_url后边的链接,注意去掉转义字符的反斜杠,在浏览器地址栏打开后,如图:熟悉的歌播放。
总结:
1.首先要根据歌曲的名字获取其在酷狗数据库中的唯一索引hash值。
2.根据hash值来获取歌曲的所有信息
示例::简易酷狗音乐播放器:music.xqbmall.top