2014-11-21 67 views
0

我正在嘗試搜索Spotify以獲取曲目的元數據。我試圖查看Spotify是否有YouTube視頻中的歌曲。這是我使用,使搜索URL的模板:Spotify搜索API - 需要多少空間來清理搜索查詢?

https://api.spotify.com/v1/search?q="MY SEARCH QUERY"&type=artist,track. 

由於很難確定哪些搜索查詢的一部分是藝術家或曲目,我添加這些2的類型我的搜索查詢。

但是,當我看到一個標題爲「Katy Perry - 我們這樣做(官方視頻)[LetraEspañol - 歌詞英語]」的YouTube視頻並將其用作我的搜索字詞時,我會得到0個結果。

https://api.spotify.com/v1/search?q=Katy%20Perry%20-%20This%20How%20We%20Do%20(Official%20Video)%20[Letra%20Espa%C3%B1ol%20-%20Lyrics%20English]&type=artist,track

如果我手動「清除」它和我的搜索查詢是不是:「凱蒂·佩裏 - 這一點,我們怎麼辦?」,我得到我正在尋找的結果。

https://api.spotify.com/v1/search?q=Katy%20Perry%20-%20This%20How%20We%20Do&type=artist,track

鑑於這種例子有任何方法,其中所述第一查詢(如沒有任何清洗)將從Spotify的API產生結果?如果不是,那麼在將它們發送到Spotify搜索API之前,我需要對搜索條件做些什麼,以便更有機會獲得結果?

回答

0

您可能可以使用NOT運算符減輕任何可能會給您帶來不良結果的情況。

但是,您必須檢查搜索字符串以將NOT運算符添加到正確的位置,因此您最好不要將任何不是軌道「正常」部分的東西去掉。

可以使用一個正則表達式(JS):

// evil search string 
var search = "Katy Perry - This How We Do (Official Video) [Letra Español - Lyrics English]"; 

// good search string --> Katy Perry - This How We Do 
var cleaned = search.replace(/\(.*?\)|\[.*?\]/g, ""); 
+0

我已經做了這樣的事情,但它不夠普遍。我認爲它可以適用於這種特殊情況,但有很多可能的方式可以編寫YouTube標題,這種解決方案不太可能足夠。我想知道Spotify的某個人是否可以在這裏給出更一般的答案,因爲他們知道他們的搜索後端的工作原理。 – Dan 2014-11-21 19:12:41

+0

是的,我害怕這一點。如果有關於如何在spotify上命名軌道的規則,是否更容易編寫更好的正則表達式。對不起,我忍不住。 – theoperatore 2014-11-21 19:18:24

+0

無論如何感謝! – Dan 2014-11-21 19:26:13

0

我認爲最簡單的方法就是從YouTube獲得一個乾淨的藝術家姓名和曲目名稱,而不是試圖瞭解軌道是如何規定在Spotify上命名。

此信息顯示在Youtube上的音樂視頻中,視頻下方的面板中(請參見<div id="action-panel-details"></div>)。

此信息似乎可以使用Youtube API進行訪問。假設我們在視頻https://www.youtube.com/watch?v=VhUrCrR4yiw搜索關於軌道Spotify的信息:

1)首先,使用取有關視頻信息的id(在這種情況下VhUrCrR4yiw),並要求其topicDetails。你可以試試這個去https://developers.google.com/youtube/v3/docs/videos/list。在id字段中輸入以前的ID,在part字段中輸入topicDetails

2)閱讀項目的topicDetails.topicIds:)

... 
"topicDetails": { 
    "topicIds": [ 
     "/m/03y82t6", 
     "/m/0y87l_h" 
    ], 
... 

3使用它們查詢的遊離鹼數據庫,以獲取有關主題的信息。要進行快速測試,您可以使用他們的網站。從Youtube API返回的主題指向http://www.freebase.com/m/03y82t6(Katy Perry)和http://www.freebase.com/m/0y87l_h(這是我們的工作方式)。實際上,曲目本身包含有關藝術家的信息。

+0

我想我的問題更多的是如何更加自由地搜索Spotify的API,這樣我就不用擔心對搜索條件做任何預處理。 – Dan 2014-12-06 07:26:58

+0

丹,因爲Spotify搜索和過濾的工作方式會顯着改善您的搜索結果,所以預先處理信息是最有意義的(如下面的答案)。 – 2015-03-17 02:31:24

0

這是一個建議,希望有所幫助。在YouTube上

大多數音樂錄影帶有以下命名約定:ARTIST_NAME - SONG_NAME

例子:
凱蒂·佩裏 - 黑馬(官方)英尺多汁Ĵ
伊基杜鵑花 - Fancy(Explicit)ft。Charli XCX

另一方面,Spotify搜索使用以下約定( see reference):

 
q=SONG_NAME+artist:ARTIST_NAME&type=track 

的「清洗過程」取決於你使用來處理你的數據的語言,而只是涉及通過重新排列信息「解析」 YouTube的標題這樣可以更好地建立適當的Spotify的搜索查詢。例如在PHP中,這將大致是這個樣子:

 
$youtube_title = "Katy Perry - Dark Horse (Official) ft. Juicy J"; 
$arr = explode (" - ",$youtube_title); // split title and artist 
$spotify_search = "https://api.spotify.com/v1/search?q="+$arr[1]." artist:".$arr[0]."&type=track"; 

這就是如何讓這個在PHP做了一個粗略的(我離開了引號並且爲簡化起見編碼)。如果您分享您正在使用的語言,則某人可能會提供特定於您的編程語言的示例。您可以查看Spotify Web API Search Reference