search - Spotify元数据API:按艺术家搜索

标签 search metadata spotify

最初的计划是将其写为博客文章,标题为“ Spotify元数据API中的低效率:或者,杰克逊5如何杀死我的浏览器”,但由于在最后一刻我习惯于丢失明显的内容,因此改变了主意。文档,也许我可能错过了一个未记录的功能,或者其他人已经解决了该问题-因此,此问题对此具有一定的博客帖子基调!

我正在开发一个小型网络应用程序,主要是针对一小部分人的,它允许任何人更新Spotify播放列表。由于不是每个人都拥有Spotify(尽管我不知道为什么!),该页面将使用歌曲更新数据库,因为笔记本电脑上在Spotify中运行的应用会轮询数据库以获取更新,然后使用Spotify Apps API来更新播放列表,任何订阅该播放列表的人都可以获取更新。可以,虽然我想使用推而不是轮询,但这是另一天的话题。

我到处搜索了一个与Spotify Metadata API一起使用的Javascript库,并发现了一个(https://github.com/palmerj3/SpotifyJS),尽管它基本上是包装器,但仍然需要您自己解析JSON。认为我可以做得更好,并为最常见的字段(标题,艺术家,专辑,Spotify URI)进行一些基本解析,因此我开始研究自己的库/ JQuery插件。

按曲目搜索不是问题,这是对Spotify元数据API的一次调用,可以轻松解析结果,将返回的艺术家与请求的艺术家(如果有)进行匹配,可以轻松按标题/艺术家进行搜索。

按歌手搜索(获取特定歌手的所有歌曲列表)似乎是一件令人痛苦的事情!尽我所能从文档中得知,这就是过程。


搜索艺术家:这将返回与查询匹配的艺术家列表
为每个艺术家查找他们的专辑:这将返回一个列表专辑
查找每个专辑并检索曲目列表
如果每个曲目的艺术家与输出艺术家匹配,则将其与搜索艺术家进行比较


第一步将返回一小部分艺术家比赛,Foo Fighters有2个,Silverchair 1,The Jackson 5有4个。这个小清单变成了大量的专辑匹配-从记忆中Foo Fighters返回112,然后变成甚至更多的曲目列表。从Javascript / JQuery的角度来看,这会导致菊花链式AJAX请求,每一步,以及每一步,针对Spotify服务器的大量并发GET请求。

我编写的初始版本作弊并使用了同步AJAX,并且工作正常,因为每个请求都必须在下一个请求开始之前完成,但是,这会使浏览器锁定一段时间,并消除了使用向用户提供反馈的可能性系统正在运行。然后,我切换到异步请求,然后一切都变得糟透了!您立即在Spotify端遇到速率限制问题,该错误返回带有502错误网关(顺便说一句,未在Spotify文档中列为状态)或503(这两个JQuery解释为状态码0)的响应-这很有趣,需要在Firebug中进行调试。我在客户端降低了请求的速度,发现每秒1个是正确的,以避免速率限制并确保每次得到的响应都包含数据,但是,这会导致浏览器大量向上锁定并行处理30或40个GET请求,所有请求几乎都同时返回(尽管有些请求在15秒以上才响应!),然后解析所有JSON响应。

我研究了使用服务器端方法来减轻负载,尽管这样做也有缺点:
1.您无法避免API无法有效处理任务这一基本问题
2.对于繁忙的站点,带宽使用将取决于服务器,该服务器还将显示一个IP,对于多个用户,由于并行用户,您很快就会达到速率限制

服务器端确实提供了缓存,尽管这样做可能是有好处的,为此,我发现了一个PHP库-metatune(https://github.com/mikaelbr/metatune)标榜为“ Spotify Metadata API的终极PHP包装器”,但不幸的是,它仅提供相同的基本查找/ search作为Spotify元数据API-即:歌手没有列出所有歌曲。

因此,我现在禁止按艺术家搜索,直到找到合适的解决方案为止。

假设我没有错过任何东西,至少对我而言,这似乎不是一个有效的API设计,因为它鼓励您向Spotify服务器发出大量请求,这对我作为客户端不利,并且对适用于Spotify作为服务器。我不禁想到,如果有这样的要求:

ws.spotify.com/search/1/artist.json?q=foo+fighters&extras=tracks

然后,这里讨论的问题将得到缓解,单个请求将覆盖目前需要3套多个请求的内容;速率限制不会成为大问题;大大减少了客户端处理数据的开销。 Spotify处理的开销将减少,整个服务将更加高效。请求将返回非常大的数据集这一事实不是问题,因为API已将数据拆分为“页面”。

所以,我对人群的问题:
1.我是否错过了文档中明显的内容,还是有秘密要求?
2.在没有API请求的情况下,是否有人对如何提高我的系统效率提出建议?
3.有人解决过这个问题吗?

谢谢阅读!花了很长时间解决问题,但我觉得有必要提供尽可能多的理由来找到最佳解决方案,并且它还说明了API的不足,我希望Spotify的人会注意到这一点!

最后,顺便说一句,像这样的项目使我感到我们已经将Flash替换为Javascript,但是性能仍然很差!其他人也有同样的感觉吗?

干杯!
袜子小偷

最佳答案

除非我缺少任何东西,这会满足您的要求吗?

http://ws.spotify.com/search/1/track.json?q=artist:foo+fighters


artist:前缀告诉搜索服务仅匹配艺术家。您可以阅读有关高级搜索语法(在客户端中也可以使用)here的更多信息。

关于search - Spotify元数据API:按艺术家搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16081068/

相关文章:

search - Elasticsearch 中的全局搜索

java - 如何在文本中找到复合字符串

python - 如何在 AppEngine 中获取所有实体类型

c# - 在 Azure 中添加、编辑元数据

ios - iOS 项目中架构 x86_64 的 undefined symbol

string - 在 Inno Setup 中使用 Pascal 脚本从配置文件中查找和读取特定字符串

android - 如何禁用 SearchView 中的搜索对话框

seo - 开放图数据 Facebook

c# - 请求 Spotify 访问 token 时遇到问题 [错误请求]

ios - 将 Spotify SDK 与其他框架集成