歡迎大家來到我的博客,這是我在博客園寫的第一篇文章,但不會是最後一篇,希望大家多多關註我,支持我哦!正文開始,今天我們要講的是QQ音樂的API,都是來源於官方的地址,以前我也想寫一個,但百度谷歌之後都是一些很久以前的,而今天的是我從QQ音樂客戶端抓包而來,希望大家喜歡。 本教程的示例代碼為C# WP ...
歡迎大家來到我的博客,這是我在博客園寫的第一篇文章,但不會是最後一篇,希望大家多多關註我,支持我哦!
正文開始,今天我們要講的是QQ音樂的API,都是來源於官方的地址,以前我也想寫一個,但百度谷歌之後都是一些很久以前的,而今天的是我從QQ音樂客戶端抓包而來,希望大家喜歡。
本教程的示例代碼為C# WPF,其他語言也可以,最關鍵的還是API嘛。
首先我們需要搜索到音樂,取出他的各類值,才能進行播放
http://59.37.96.220/soso/fcgi-bin/client_search_cp?format=json&t=0&inCharset=GB2312&outCharset=utf-8&qqmusic_ver=1302&catZhida=0&p={0}&n={1}&w={2}&flag_qc=0&remoteplace=sizer.newclient.song&new_json=1&lossless=0&aggr=1&cr=1&sem=0&force_zonghe=0
{0} :當前頁碼數,從1開始
{1} :每次請求返回的數量
{2} :搜索關鍵詞
我們就能得到一些json,在C#中 我熟悉使用Newtonsoft.Json來操作JSON.
例如這樣:
C#示例代碼:
1 Music m = new Music(); 2 3 m.MusicName = o["data"]["song"]["list"][i]["name"].ToString(); 4 5 string Singer = ""; 6 7 for (int osxc = 0; osxc != o["data"]["song"]["list"][i]["singer"].Count(); osxc++) 8 9 { Singer += o["data"]["song"]["list"][i]["singer"][osxc]["name"] + "/"; } 10 11 m.Singer = Singer.Substring(0, Singer.LastIndexOf("/"));//歌手 12 13 m.ZJ = o["data"]["song"]["list"][i]["album"]["name"].ToString();//專輯 14 15 m.MusicID = o["data"]["song"]["list"][i]["mid"].ToString();//音樂ID 16 17 m.ImageID = o["data"]["song"]["list"][i]["album"]["mid"].ToString();//專輯圖ID 18 19 m.GC = o["data"]["song"]["list"][i]["id"].ToString();//歌詞ID 20 21 m.Fotmat = o["data"]["song"]["list"][i]["file"]["size_flac"].ToString();//是否為FLAC,其實沒有多大用 22 23 m.HQFOTmat = o["data"]["song"]["list"][i]["file"]["size_ogg"].ToString();//HQ 24 25 m.MV = o["data"]["song"]["list"][i]["mv"]["id"].ToString();//MV iD 26 27 string Q = ""; 28 29 if (m.Fotmat != "0") 30 31 Q = "SQ"; 32 33 if (m.HQFOTmat != "0") 34 35 if (m.Fotmat == "0") 36 37 Q = "HQ"; 38 39 //判斷最高品質(SQ,HQ,標準)
其中,Music是我的一個自定義類,你可以直接儲存到string中。
獲取到了音樂信息,接下來就是使用了。
專輯圖 API:
https://y.gtimg.cn/music/photo_new/T002R300x300M000{0}.jpg
{0} :從上面獲取到的專輯圖ID
接下來就是獲取歌曲的步驟了,分別有3個品質,這要看歌曲是否支持(HQ,標準,經濟),由於SQ的API加入了綠鑽檢測和QQ登陸檢測,所以就無法破解SQ品質的歌曲。
經濟品質,大小最小,品質最低的,並且獲取最簡單:
http://cc.stream.qqmusic.qq.com/C100{0}.m4a?fromtag=52
{0} :上面獲取到的音樂ID
怎麼樣,很簡單把~
標準品質,大小一般,品質一般,由於需要KEY所以獲取有點難:
首先需要一下幾樣東西:
Guid:20D919A4D7700FBC424740E8CED80C5F,用於獲取KEY
地址:
{guid} :就是上面那一串
我們可以用一個笨方法將key取出,就是取出中間文本:
前面: "key=\"" 後面:"\" speedrpttype"
這樣我們獲取到了key就可以請求歌曲文件啦:
http://182.247.250.19/streamoc.music.tc.qq.com/M500{musicid}.mp3?vkey={vkey}&guid={guid}
{musicid} :上面獲取的音樂ID
{vkey} :上面獲取的KEY
{guid}: 上面獲取的Guid
這樣就完成了標準品質的播放
HQ品質,也就是高品質,獲取難度同上,但一些歌曲不支持HQ。
首先準備一隻GUID:"20D919A4D7700FBC424740E8CED80C5F"
再次發送請求:http://59.37.96.220/base/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=92&key=19914AA57A96A9135541562F16DAD6B885AC8B8B5420AC567A0561D04540172E&guid={guid}
這些步驟其實和標準的獲取方法是一樣的。
接著取出key
取出中間文本:前面: "key=\"" 後面:"\" speedrpttype"
獲取KEY我們就能拿到歌曲鏈接了:
http://182.247.250.19/streamoc.music.tc.qq.com/O600{musicid}.ogg?vkey={vkey}&guid={guid}
參數同上,其實就是M5和O6變了,其他都一樣。
其他的API,是我在y.qq.com抓包得來的
獲取個人歌單API,必須是開放的歌單才行.
https://y.qq.com/n/yqq/playlist/{0}.html#stat=y_new.profile.create_playlist.click&dirid=6
{0}:歌單ID ,從官網點進去就能看到
接著取出JSON解析處理
"{\"list\":" + 取出文本(s, "var getSongInfo = ", ";", 0) + "}"
熱搜關鍵詞API:
http://59.37.96.220/soso/fcgi-bin/dynamic_content?format=json&outCharset=utf-8
沒有任何需要更改的參數,盡情解析JSON就可以
它位於JSON的["data"]["search_content"]處
最終API--歌詞+翻譯
這是我研究了很久的API,原先我是從QQ音樂客戶端抓包,可是太複雜,於是又從y.qq.com下手,終於找到了夢寐以求的API。
它是以BESE64加密的,不算太麻煩
請求連接:
由於設置了防盜鏈,你需要做些手腳,偽裝自己。
一下以C#代碼為示例解說:
1 WebClient c = new WebClient(); 2 3 .Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"); 4 5 c.Headers.Add("Accept", "*/*"); 6 7 c.Headers.Add("Referer", "https://y.qq.com/portal/player.html"); 8 9 c.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); 10 11 c.Headers.Add("Cookie", "tvfe_boss_uuid=c3db0dcc4d677c60; pac_uid=1_2728578956; qq_slist_autoplay=on; ts_refer=ADTAGh5_playsong; RK=pKOOKi2f1O; pgv_pvi=8927113216; o_cookie=2728578956; pgv_pvid=5107924810; ptui_loginuin=2728578956; ptcz=897c17d7e17ae9009e018ebf3f818355147a3a26c6c67a63ae949e24758baa2d; pt2gguin=o2728578956; pgv_si=s5715204096; qqmusic_fromtag=66; yplayer_open=1; ts_last=y.qq.com/portal/player.html; ts_uid=996779984; yq_index=0"); 12 13 c.Headers.Add("Host", "c.y.qq.com");
加入一大串標頭,哈哈
https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?callback=MusicJsonCallback_lrc&pcachetime=1494070301711&songmid={McMind}&g_tk=5381&jsonpCallback=MusicJsonCallback_lrc&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0
{McMind} :音樂ID
首先用JSON的方法取出lyric和trans兩個數據。
接下來使用BASE64解密就可以得到歌詞啦!
示例代碼:https://github.com/TwilightLemon/Lemon-App/tree/master/Lemon%20App/Music
本次教程到這裡就結束啦,希望大家喜歡,多多支持我!