在需求徹底明朗化,外加從musicfans轉到gracenote,再從gracenote的gnsdk轉到ios sdk後,終于完成了在ios上通過音樂的部分資訊擷取完整資訊的功能了。(好吧,我承認是相對完整。。。)
首先介紹下在項目中配置gracenote的ios sdk。
sdk的下載下傳位址:
注意要先登入才能見到檔案的下載下傳連結。另外官網還給出來一個,完全跟着走在xcode 5是走不通的,不過也具有一定的指導作用,建議看一看。
下載下傳解壓後,建立一個工程,添加gracenotemusicid.framework到工程中:

建立一個頭檔案gracenote.h,導入該架構中的頭檔案(在本工程中已經導入全部需要使用到的頭檔案了):
然後配置工程環境,依次在build phases中加入下列系統庫檔案:
配置完成。
其實這個sdk的使用非常的簡單。
第一步,通過你的gracenote帳号配置gnconfig類(我直接放在了appdelegate中,這樣可以配置可以全局使用):
client id就是申請應用時的id,不清楚的可以參考。然後設定content.coverart屬性打開,否則傳回的資料中将不會有專輯封面。
第二步,通過下面的方法發起查詢請求:
在demo中,就是一個button中的方法:
注意resultready參數設定為一個遵守gnsearchresultready協定的對象,也就是self。
config參數設定為全局的配置。
artist,albumtitle,tracktitle分别為藝術家,專輯名稱,音樂名等,這些是搜尋的key,三個參數最多可以預設兩個。
第三步,在查詢成功後,我們可以從gnresultready:方法中擷取伺服器傳回的資料,從中剝離出我們需要的資訊。但是,非常奇怪的是,對于傳回結果中的每一個gnsearchresponse對象,其albumcoverart均為nil。如下圖所示,注意是10個對象中的每一個對象的m_coverart的值都是nil。
替代的方法是,記錄下gnsearchresponse對象的id資訊,然後通過albumid發起二次請求,從伺服器中擷取完整的專輯資訊(這樣做确實不好,但是目前我隻找到這個解決方法)
在下一個視圖中通過albumid發起二次請求:
上幾張運作結果圖:
這個demo通過音樂名/專輯名/藝術家擷取到專輯封面,歌曲風格,完整的歌曲名,完整的藝術家清單,歌曲風格,發行資訊等相對較為完整的資訊,重點是拿到了專輯的封面。真機調試過,沒什麼問題,看來我可以交差了。
完整的代碼我就不貼出來了,有興趣的下載下傳看看。
說明:由于gracenote的sdk有71m,在demo中我将其移除,是以demo是無法運作的。請自行到gracenote網站中下載下傳gracenotemusicid.framework并添加到工程中。