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>廣東愛情故事<\/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>廣東愛情故事<\/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>廣東愛情故事<\/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