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