2017-06-18 84 views
1

我一直在使用Spotify的API由给定的艺术家来查询一个确切的轨道,使得像这样一个GET请求:导致相同的查询在不同的Web客户端

https://api.spotify.com/v1/search?q=track:"track+title"+artist:"artist+name"&type=track 

(带授权头承载[的access_token]

这就像预期在大多数情况下,但对于一个轨道我有一个问题:我试图找到轨道I Might Just Stay Home, with Shannon Lyon

调整到这个我以前成功的GET请求跟踪标题和艺术家,这是它应该是什么样子:

https://api.spotify.com/v1/search?q=track:"I+Might+Just+Stay+Home"+artist:"Shannon+Lyon"&type=track 

然而,这产生结果为零。而真正奇怪的是:如果我将相同的搜索查询(曲目:“I + Might + Just + Stay + Home”+歌手:“Shannon + Lyon”)复制到Spotify Web player中,我会得到一个搜索结果我期待着。我还可以在Spotify桌面播放器中使用相同的查询,给我一个结果。

所以,问题是:为什么我不能从API获得结果,而我在Web和桌面客户端使用完全相同的查询得到结果的原因是什么?

+0

客户端似乎不使用公共API,相反,他们似乎使用某种形式的私有API,因为这不仅与轨道发生。 – Potray

回答

1

Potray已经给出了一个可能的原因。您在客户端看到的东西来自内部API。它们与公共Web API略有不同。

另一个更可能的原因是在不同国家/地区的不同可用性,而您的两个查询适用于不同的国家/地区,但您可能没有意识到这一点。

当您在客户端进行搜索时,它始终是搜索的用户。用户连接到一个国家。您只能播放您所在国家/地区提供的内容,因此在客户端进行搜索只会返回您可以播放的内容。

当您使用Web API进行搜索时,无需指定Spotify用户正在搜索哪个。您也无需指定您希望搜索结果的国家/地区。

从一开始,没有指定国家,搜索结果会列出至少一个国家/地区可用的曲目。自去年以来,由于一个错误,它默认为美国。您可以更改国家/地区,但无法在所有国家/地区进行搜索。

https://github.com/spotify/web-api/issues/194

+0

你绝对正确!如果我将* market = NO *添加到请求中,我会得到预期的响应。我猜这个bug也解释了为什么我看到一个搜索结果的例子,根据API,应该只在美国有售,但我仍然在网络播放器中找到了这首歌曲:特定的歌曲可能存在于不同的版本中不同的市场可用性,但由于搜索默认为*市场=美国*它出现,因为它没有在没有。 – Nailuj

+0

我也会争辩说,文档(https://developer.spotify.com/web-api/search-item/)是误导性的:对于查询参数*市场*它说“*可选(...)**如果给出**国家代码,则只有艺术家,专辑和可在该市场播放的内容的曲目将被退回*“。如果市场被忽略,我会因此预期任何*市场被返还的结果。 – Nailuj

相关问题