一個在線音樂軟件的故事(三、音樂從哪裏來?)

音樂從哪裏來?

現在互聯網提供開放音樂API接口的平臺還是比較多的,比如:百度音樂API接口、騰訊音樂API接口、蝦米音樂API接口甚至中國移動都曾經有過音樂API接口,有興趣可以度娘一下,還有很多知名不知名的互聯網平臺都提供音樂API的接口。

經過音樂數量、音樂品質、用戶數量、開發複雜度等方面的比較,最終選擇了騰訊QQ音樂作爲音樂源。但是騰訊的API是在移動設備上對QQ音樂軟件的調用,對於我等開發桌面應用來說,依然沒有什麼用處,無奈之下只能直接分析QQ在線音樂的有關接口。

經過天(分)人(析)交(請)戰(求),得出以下幾個基本接口及其使用方法:

一、音樂信息搜索

主要是獲取音樂的基本信息,如:歌曲名稱、media_mid媒體ID(後面需要用到)、歌手信息、專輯信息、封面信息、歌詞信息等等,具體方法與過程如下:

音樂信息的搜索地址:

https://c.y.qq.com/soso/fcgi-bin/client_search_cp?t=0&aggr=1&cr=1&lossless=0&flag_qc=0&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&p={0}&n={1}&w={2}

上面的請求地址中有三個參數:

{0}表示頁碼。

{1}表示每頁顯示的記錄數量。

{2}表示要搜索的關鍵字,多個關鍵字可以用空格分開。

這個請求發出之後,服務器會響應一個包含搜索結果的JSON字符串,在這個字符串中包含了音樂的所有信息,格式和信息的含義這裏暫不逐一說明,只說我們需要用到的部分,基本信息如下:

Albumid:專輯ID編號。

Albummid:專輯MID編號,在獲取專輯封面圖片等信息時,都需要用這個參數。

Albumname:專輯名稱。

Songid:音樂ID編號。

Songmid:音樂MID編號,在獲取播放KEY和音樂數據時,需要用到這個參數。

Songname:音樂名稱。

Interval:音樂時間長度,單位是秒。

Pubtime:音樂發佈時間。

Songurl:音樂介紹頁面的地址,指向音樂信息的Web頁面。

Nt:不是非常清楚這個參數的含義和作用,我是用來作爲獲取音樂信息的GUID

Singer:歌手或表演者信息,是個數組,包含了歌手的姓名、MID等信息。

二、獲取音樂播放KEY信息

從騰訊搜索到的所有音樂信息中並沒有包含音樂的直接播放地址,真正的音樂地址需要通過獲取播放KEY之後才能組織出來,繼續分析獲取播放KEY的請求:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&cid=205361747&callback=MusicJsonCallback&uin=0&songmid={0}&filename=C400{0}.{1}&guid={2}

上面這個請求地址有四個參數,其中兩個參數相同,具體含義是:

{0}上一步獲得的音樂MID

{1}音樂的擴展名,默認是m4a

{2}GUID,一個隨機數,但是要保留,在下一步中還要使用,這個軟件中是使用上一步獲取的Nt參數作爲GUID

這個請求也是返回一個JSON字符串。但這個字符串會包含MusicJsonCallback()函數的回調,解析之前要先刪除這部分回調文本。

這個JSON對象的主要參數說明如下:

Code:響應碼,成功響應0,其他爲錯誤,同時會包含錯誤信息

Filename:文件名

Songmid:音樂MID,和上面請求參數中的MID相同

Vkey:播放碼,這是這次請求獲得的最重要的參數,它用於組織音樂源地址

三、組織音樂源地址

有了上面取得的FilenameVKEY信息之後,再結合上一步的GUID,就能組織出一個音樂源的請求地址,基本格式如下:

http://dl.stream.qqmusic.qq.com/{0}?vkey={1}&guid={2}&fromtag=66

音樂地址是固定的,裏面有三個參數,具體含義是:

{0}文件名,在上一步請求中獲得

{1}VKEY,播放KEY信息,在上一步請求中獲得

{2}GUID,必須與上一步發送給服務器的請求GUID相同

該請求直接返回可以播放的音頻數據,可以在支持HTML5的瀏覽器中直接播放。此地址也作爲音樂下載地址使用。

四、獲取專輯封面圖片

有了音樂源之後,音樂是可以播放了,但還要顯示專輯封面圖片,才能與主流播放器一樣,組織出完整的播放界面。騰訊音樂有專門的專輯封面圖片服務器,可以通過下面的請求獲得封面圖片數據:

https://y.gtimg.cn/music/photo_new/T002R{0}x{0}M000{1}.jpg?max_age=2592000

這個請求包含兩個參數:

{0}圖片的尺寸,騰訊提供的專輯封面圖片都是正方形,而且尺寸固定爲三種:90x90180x180300x300

{1}專輯MID,在第一步中已經獲得該信息

這個請求直接返回圖片數據,可以直接在瀏覽器中顯示。

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