① 解析qq音樂歌詞
以獲取的某首歌的歌詞為例:
找到response數據,然後執行以下操作:
第一步 : 利用正則去掉多餘信息
let json = 'response數據 '.replace(/jsonp1((.*))/,'$1')
第二步 :
json = JSON.parse(json)
第三步 :
let lyric = json.lyric
第四步 :
再查看 : div.firstChild.nodeValue
② c# 調用QQ音樂、酷狗音樂API
直接上例子,最後拼得的url可以用MediaElement控制項在線播放
QQ音樂
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=2&w=九張機
//songmid可以從歌曲信息中取到,filename根據songmid生成。比如,songmid是003lghpv0jfFXG,則filename就是前綴加上C400,後綴加上.m4a,即C400003lghpv0jfFXG.m4a。其他欄位format、platform、cid、guid可以寫死,但都是必須的。
string response = HttpGet(url, postData);
//請求地址:https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg
//請求參數:?format=json205361747&platform=yqq&cid=205361747&songmid=001hwLQi3sUBnL&filename=C400001hwLQi3sUBnL.m4a&guid=4942741185
Get請求後解析json,保存獲取的vkey
//url的path就是上文中用到的filename。參數中的幾個欄位都是必須的:guid要和請求token時使用的guid保持一致,vkey即token中的vkey欄位,fromtag隨意指定一個整數,可以寫死為0。
//我拼的url:http://dl.stream.qqmusic.qq.com/C400001hwLQi3sUBnL.m4a?guid=4942741185&vkey=&fromtag=66
string url= "http://dl.stream.qqmusic.qq.com/" + filename + "?guid=" + guid + "&vkey=" + vkey + "&fromtag=66";
酷狗音樂-搜索歌曲
//必選參數:keyword(關鍵字)歌手或者歌曲名,這里需要轉換urldecode
//可選參數:page(第幾頁),pagesize(一頁的搜索結果數目)
//請求地址:http://songsearch.kugou.com/song_search_v2
//請求參數:keyword=%e5%91%8a%e7%99%bd%e6%b0%94%e7%90%83&page=1&pagesize=1&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0
string kgresponse = HttpGet(kgUrl, kgParmas);
Get請求後解析json,保存獲取的FileHash 、AlbumID
//請求地址:http://www.kugou.com/yy/index.php
//請求參數 :r=play/getdata&hash=" + FileHash + "&album_id=" + AlbumID
Get請求後解析json,這里獲取的play_url貼到瀏覽器可以直接播放
}
③ QQ音樂播放鏈接獲取(2020-04-27)
哈哈之前對接過QQ音樂的可能還在用之前的,例如 http://tsmusic24.tc.qq.com/{$song_id}.mp3 這個就不能使用了,廢物不多說,我們直接進入正題。
第一種方法:
搜索歌曲和歌手:
請求地址:https://c.y.qq.com
請求實例: https://c.y.qq.com/soso/fcgi-bin/music_search_new_platform?searchid=53806572956004615&t=1&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=2&w=沒那麼簡單
參數說明是否必須默認值
p分頁否默認為1
n請求數量否默認為10
w關鍵字是無
format格式化否如果用Retrofit的Json解析的話記得一定要format=json
這個請求返回的數據,我們會發現有一個f的:
"f":"649069|沒那麼簡單|4740|黃小琥|55176|簡單不簡單|2492289|307|8|1|1|12327908|4931284|0|0|0|32998268|6570790|7425738|0|003Ue6Ia32q4gl|0003Aksc3Iisgq|002Gbc9W0oOAS3|0|4009",
f屬性中以「|」為分隔符索引為0位置為歌曲id用來獲取歌曲和歌詞,索引為1是歌曲名稱,索引為3是歌手名稱,索引為4位置為圖片id取對應的專輯圖片。
獲取歌曲圖片:
Image_id:55176
請求模板:"http://imgcache.qq.com/music/photo/album_300/" + (Image_id% 100) + "/300_albumpic_" + Image_id + "_0.jpg";
請求實例: http://imgcache.qq.com/music/photo/album_300/76/300_albumpic_55176_0.jpg
獲取歌曲播放鏈接:
Song_id :649069
首先獲取Songmid:
請求模板:"https://c.y.qq.com/v8/fcg-bin/fcg_play_single_song.fcg?songid=" +Song_id + "&tpl=yqq_song_detail&format=jsonp&callback=getOneSongInfoCallback";
請示實例: https://c.y.qq.com/v8/fcg-bin/fcg_play_single_song.fcg?songid=649069&tpl=yqq_song_detail&format=jsonp&callback=getOneSongInfoCallback
返回的數據中,Songmid=mid ==》Songmid=003Ue6Ia32q4gl
然後我們還得獲取歌曲文件名:
請求模板:」https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22mole%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22358840384%22%2C%22songmid%22%3A%5B%22"+Songmid+"%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221443481947%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A%2218585073516%22%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D";
請求實例: https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22mole%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22358840384%22%2C%22songmid%22%3A%5B%22003Ue6Ia32q4gl%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221443481947%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A%2218585073516%22%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D
返回的數據我們可以拿到filename;
請求模板:」http://ws.stream.qqmusic.qq.com/「+filename;
請求實例: http://ws.stream.qqmusic.qq.com/C400001pNZFJ4Luwsm.m4a
獲取歌曲歌詞:
Songmid和歌曲播放一樣的獲取,Songmid=003Ue6Ia32q4gl
請求模板:"https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid="+Songmid+"&format=json&nobase64=1"
請求實例: https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=003Ue6Ia32q4gl&format=json&nobase64=1
如果請求返回-1310,那麼請求頭要加上Referer:https://y.qq.com/portal/player.html這個就可以了,因為請求歌詞有點特殊,API加了限制,
Referer 作用是代表你請求的來源是那裡,https://y.qq.com/portal/player.html 代表QQ音樂的播放網址,所以只能通過他特定來源,才能
請求到數據。
第二種方法:
1.搜索歌曲和歌手:
請求地址:https://c.y.qq.com
請求示例: https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=2&w=沒那麼簡單&format=json
說明:
參數說明是否必須默認值
p分頁否默認為1
n請求數量否默認為10
w關鍵字是無
format格式化否如果用Retrofit的Json解析的話記得一定要format=json
2.搜索專輯:
請求地址:https://c.y.qq.com
請求示例: https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=2&w=沒那麼簡單&format=json&t=8
說明:相對於搜索歌詞來說,加了t參數:沒有默認值,如果為搜索專輯,則t為8。如果是搜索mv,t=12。
3.獲取歌手圖片:
請求地址:http://music.163.com
請求示例: http://music.163.com/api/search/get/web?s=黃小琥&type=100
說明:請求後將有歌手圖片的欄位,請求後的picUrl和img1v1Url就是圖片地址
注意:如果請求沒數據,就在請求頭加上:「User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36」
4.根本albnumMID獲取專輯圖片:
請求地址:http://y.gtimg.cn
請求示例: http://y.gtimg.cn/music/photo_new/.jpg
說明:請求示例其實有兩部分組成,即固定地址(http://y.gtimg.cn/music/photo_new/T002R180x180M000)+albumMid。
5.獲取播放地址:
請求地址:https://u.y.qq.com
請求示例: https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22mole%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22358840384%22%2C%22songmid%22%3A%5B%22003Ue6Ia32q4gl%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221443481947%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A%2218585073516%22%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D
說明:更換請求的話,只需要更換songmid後的003Ue6Ia32q4gl即可。
請求後得到數據,再次請求:
播放地址:
方式(1)purl為空時:sip[0]+purl
http://ws.stream.qqmusic.qq.com/C400000HjG8v1DTWRO.m4a?guid=358840384&vkey=&uin=0&fromtag=66
方式(2)purl為不空時,使用filename :sip[0]+filename
http://ws.stream.qqmusic.qq.com/C400001pNZFJ4Luwsm.m4a
6.獲取歌詞:
請求地址:https://c.y.qq.com
請求示例: https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=003aAYrm3GE0Ac&format=json&nobase64=1
注意:如果請求返回-1310,那麼請求頭要加上Referer:https://y.qq.com/portal/player.html這個就可以了,因為請求歌詞有點特殊,API加了限制,
Referer 作用是代表你請求的來源是那裡,https://y.qq.com/portal/player.html 代表QQ音樂的播放網址,所以只能通過他特定來源,才能
請求到數據。