2019最新QQ音樂Api

下面的請求中如果參數有songmid,都是得經過搜索歌曲或歌手後才能獲得songmid,然後進行請求。不能獲取到qq音樂的vip或者付費歌曲的播放地址,Api是通過fiddler4爬取網頁端qq音樂獲取的,如失效,請在評論指出

前言

最近重構了自己的安卓版的音樂播放器,主要是因爲之前使用的音樂相關Api都失效了,索性自己來找Api,於是利用fiddler4爬取網頁端qq音樂獲取到了項目所需要的Api,途中也遇到了許多坑,但是通過自己的努力解決了問題,所以在這裏分享一波!

一、 搜索

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

參數 說明 是否必須 默認值
p 分頁 默認爲1
n 請求數量 默認爲10
w 關鍵字
format 格式化 如果用Retrofit的Json解析的話記得一定要format=json
t 類別 沒有默認值,如果爲搜索專輯,則t爲8。如果是搜索mv,t=12。

二、 獲取圖片

1.根據歌手獲取圖片

請求地址:http://music.163.com

請求示例:http://music.163.com/api/search/get/web?s=鄧紫棋&type=100

說明:請求後將有歌手圖片的字段,請求後的picUrl和img1v1Url就是圖片地址

參數 說明 是否必須 默認值
s 歌手
type 類別 無,但必須爲100

!!!注意:有可能在網上能夠請求到數據,但在實際代碼中請求時卻不能返回的情況(自己在開發中碰到),這時候彆着急,只需要在網絡請求時加上請求頭**“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”**就能解決問題!

2. 根據albumMID獲取專輯圖片

請求地址:http://y.gtimg.cn

請求示例:http://y.gtimg.cn/music/photo_new/T002R180x180M000003c616O2Zlswm.jpg

說明:請求示例其實有兩部分組成,即固定地址+albumMid。

組成 說明
固定地址 http://y.gtimg.cn/music/photo_new/T002R180x180M000 固定值,不需要改變
albumMid 在搜索專輯後,或者搜索歌曲會有albumMid這個字段 需要先搜索後得到albumMid

三、 獲取播放地址

如果用的是Retrofit請求,則需要在請求時加上encoded = true的參數,不然請求時會出現-500001的錯誤。代碼示例:

@GET(Api.SONG_URL)
Observable<SongUrl> getSongUrl(@Query(value = "data",encoded = true) >String data);

請求地址:https://u.y.qq.com

請求示例:https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22module%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%22001X0PDf0W4lBq%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來獲得音樂播放地址的,請求示例很長,在經過多次嘗試後,很遺憾的並不能縮減,要想獲取播放地址,只需要更改上面藍色字體的songmid後的001X0PDf0W4lBq即可,至於更改方法很多,比如直接用Java的字符串拼接。請求成功後請注意兩個字段purl和sip(爲數組),歌曲的播放地址就是sip數組裏的其中一個加上pur,即sip[0]+purl(vip音樂或者版權音樂的purl爲空)。

1. 請求時的參數說明

參數 說明
songmid 歌曲的songmid怎麼得到,必須通過上面搜索歌曲後得到,然後更改上面示例的001X0PDf0W4lBq(泡沫的songmid)即可,示例的其它地方都不能做更改,也不能刪減

2.請求後重要字段解釋

播放地址:sip[0]+purl

示例:http://ws.stream.qqmusic.qq.com/C400000HjG8v1DTWRO.m4a?guid=358840384&vkey=852D30CD2DEA9E0AFF9CF700977FAFB413A06486CFE8F72502918665277C5407D8D5AD42039F02329401300003A2853B10816B83C3145159&uin=0&fromtag=66(泡沫)

字段 說明 示例
sip 播放接口地址,目前來說有兩個地址,但是很有可能會改變 “sip”: [
“http://ws.stream.qqmusic.qq.com/”,
“http://isure.stream.qqmusic.qq.com/”
]
purl 裏面最重要的就是vkey的值,這個值每次請求都不一樣 C400000HjG8v1DTWRO.m4a?guid=358840384&
vkey=852D30CD2DEA9E0AFF9CF700977FAFB413A06486CFE8F7250
2918665277C5407D8D5AD42039F02329401300003A2853B10816B83C3145159
&uin=0&fromtag=66

四、 獲取歌詞

請求地址:https://c.y.qq.com

請求示例:https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=000wocYU11tSzS&format=json&nobase64=1

說明:如果你點擊了上面的鏈接的話,你會發現返回的是-1310的錯誤碼,這時候請彆着急,並不是這個請求Api是無效的,只是因爲這個獲取歌詞的Api有點特殊,在請求時需要在請求的header上加上Referer地址就可以了

參數 說明
songmid 歌曲songmid,需要在搜索歌曲後獲取
format 格式,建議加上format=json
nobase64 敲重點!!!,一定要等於1,默認是0,如果沒加上的話,返回的歌詞將會是亂碼,加上後就可以得到歌曲的動態歌詞,即帶有時間的歌詞

!!!敲重點:記得在請求頭上加上Referer:https://y.qq.com/portal/player.html,不然請求會返回-1310

加Header(安卓)

1. OkHttp

Request request = new Request.Builder()
                            .url(baseUrl)
                            .addHeader("Referer","https://y.qq.com/portal/player.html")
                            .build();

2. Retrofit
直接在@GET上面加上Headers註解

@Headers(Referer:https://y.qq.com/portal/player.html)

另外對音樂播放器自定義View歌詞實現有興趣的話可以看看這篇博客
Android自定義View-簡約風歌詞控件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章