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

最初的计划是把它写成一篇博客文章,题目是“Spotify Metadata API中的低效率:或者杰克逊5如何杀死我的浏览器”,但在最后一刻我改变了主意,因为我有一种习惯,文档,可能存在一个我没有记错的功能,或者其他人已经解决了这个问题 - 所以这个问题有一定的博客文章的口气!

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

我搜索了一个Javascript库以用于Spotify元数据API,并找到一个(https://github.com/palmerj3/SpotifyJS),尽管它基本上是一个包装,并且仍然需要您自己解析JSON。 思考我可以做得更好,并对最常见的领域(标题,艺术家,专辑,Spotify URI)进行一些基本解析。我开始研究自己的库/ JQuery插件。

按轨道搜索并不是问题,它是对Spotify元数据API的单一调用,结果可以轻松解析,将返回的艺术家与所需艺术家(如果有的话)进行匹配,可轻松搜索标题/艺术家。

然而,艺术家搜索(获得特定艺术家的所有歌曲的列表)似乎是一种痛苦的 - **! 尽我所知,从文档中可以看出,这是一个过程。

  • 搜索艺术家:这将返回匹配查询的艺术家列表
  • 对于每位艺术家,查找他们的专辑:这将返回一个列表专辑
  • 查找每个专辑并检索曲目列表
  • 如果匹配输出,则将每个曲目的艺术家与搜索艺术家进行比较
  • 第一步将返回一小部分艺术家的比赛,Foo Fighters有2,Silverchair 1,Jackson 5有4个。这个小名单变成了大量的专辑比赛 - 从Foo Fighters回忆112回来,然后变成甚至更多的曲目列表。 从Javascript / JQuery的角度来看,这导致了针对每个步骤的菊花链AJAX请求,并且在每一步都会对Spotify服务器发出大量几乎并发的GET请求。

    我写的初始版本被欺骗并使用同步AJAX,并且工作正常,因为每个请求必须在下一个开始之前完成,但这会锁定浏览器一段时间,并且删除了向用户反馈的可能性:系统正在运行。 然后,我转而采用异步请求,并且一切都彻底崩溃了! 您立即遇到了Spotify端的限速问题,它会返回与502错误网关(未在Spotify文档中列为状态的方式)或503(这两种JQuery都解释为状态代码0 - 这很有趣)的resoponses ,需要在Firebug中进行调试。 我在客户端扼杀了请求,我发现每秒1次都是正确的,以避免速率限制,并确保每次都得到包含数据的响应,但是,这会导致浏览器发生大规模锁定,因为它向上并发的30或40个GET请求,所有返回都几乎同时返回(尽管一些请求在15秒以上响应!),然后解析所有JSON响应。

    我研究了通过使用服务器端方法减轻负载的方法,虽然这也有缺点:1.您不能避免基本问题,因为API无法以有效的方式处理任务2.对于繁忙的站点,带宽使用将针对服务器,这也将呈现单个IP,对于多个用户,由于并行用户,您很快将达到速率限制

    虽然服务器端提供缓存可能是有益的,为此,我发现了一个PHP库 - metatune(https://github.com/mikaelbr/metatune),被称为“Spotify Metadata API的最终PHP包装器”,但不幸的是,它仅提供与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 for Javascript,但是性能仍然差劲! 任何人都有同样的感受吗?

    干杯! sockThief


    除非我错过了什么,这是否做你想要的?

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

    artist:前缀告诉搜索服务只匹配艺术家。 您可以在这里阅读关于高级搜索语法的更多信息(这也适用于客户端)。

    链接地址: http://www.djcxy.com/p/55559.html

    上一篇: Spotify Metadata API: Search By Artist

    下一篇: Spotify developer search