音樂從哪裏來?
現在互聯網提供開放音樂API接口的平臺還是比較多的,比如:百度音樂API接口、騰訊音樂API接口、蝦米音樂API接口甚至中國移動都曾經有過音樂API接口,有興趣可以度娘一下,還有很多知名不知名的互聯網平臺都提供音樂API的接口。
經過音樂數量、音樂品質、用戶數量、開發複雜度等方面的比較,最終選擇了騰訊QQ音樂作爲音樂源。但是騰訊的API是在移動設備上對QQ音樂軟件的調用,對於我等開發桌面應用來說,依然沒有什麼用處,無奈之下只能直接分析QQ在線音樂的有關接口。
經過天(分)人(析)交(請)戰(求),得出以下幾個基本接口及其使用方法:
一、音樂信息搜索
主要是獲取音樂的基本信息,如:歌曲名稱、media_mid媒體ID(後面需要用到)、歌手信息、專輯信息、封面信息、歌詞信息等等,具體方法與過程如下:
音樂信息的搜索地址:
上面的請求地址中有三個參數:
{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的請求:
上面這個請求地址有四個參數,其中兩個參數相同,具體含義是:
{0}上一步獲得的音樂MID。
{1}音樂的擴展名,默認是m4a。
{2}GUID,一個隨機數,但是要保留,在下一步中還要使用,這個軟件中是使用上一步獲取的Nt參數作爲GUID。
這個請求也是返回一個JSON字符串。但這個字符串會包含MusicJsonCallback()函數的回調,解析之前要先刪除這部分回調文本。
這個JSON對象的主要參數說明如下:
Code:響應碼,成功響應0,其他爲錯誤,同時會包含錯誤信息
Filename:文件名
Songmid:音樂MID,和上面請求參數中的MID相同
Vkey:播放碼,這是這次請求獲得的最重要的參數,它用於組織音樂源地址
三、組織音樂源地址
有了上面取得的Filename、VKEY信息之後,再結合上一步的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}圖片的尺寸,騰訊提供的專輯封面圖片都是正方形,而且尺寸固定爲三種:90x90、180x180、300x300。
{1}專輯MID,在第一步中已經獲得該信息
這個請求直接返回圖片數據,可以直接在瀏覽器中顯示。