The*_*ter 3 search metadata spotify
最初的计划是将其写成一篇博客文章,标题为“Spotify 元数据 API 中的低效率:或者,Jackson 5 如何杀死我的浏览器”,但在最后一刻改变了我的想法,因为我习惯于错过文档,也许我遗漏了一个未记录的功能,或者其他人已经解决了这个问题 - 因此这个问题有一定的博客文章语气!
我正在开发一个小型网络应用程序,主要面向一小群人,它允许任何人更新 Spotify 播放列表。由于不是每个人都有 Spotify(虽然我不知道为什么!),该页面将更新包含歌曲的数据库,因为在我的笔记本电脑上的 Spotify 中运行的应用程序轮询数据库以获取更新,然后使用 Spotify 应用程序 API,更新播放列表,订阅播放列表的任何人都会收到更新。没关系,虽然我想使用推送而不是投票,但这是另一天的话题。
我四处寻找与 Spotify 元数据 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 次是正确的,以避免速率限制并确保我每次都收到包含数据的响应,但是,
我研究了通过使用服务器端方法来减轻负载,尽管这也有缺点: 1. 你没有避免基本问题,因为 API 无法以有效的方式处理任务 2. 对于繁忙的站点, 带宽使用将针对服务器,服务器也会显示单个 IP,对于多个用户,由于并行用户,您很快就会达到速率限制
服务器端确实提供缓存虽然这可能是有益的,为此我找到了一个 PHP 库 - metatune ( https://github.com/mikaelbr/metatune ) 宣传为“Spotify 元数据 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 换成了 Javascript 但性能仍然很差!其他人有同感吗?
干杯! 袜子小偷
除非我遗漏了什么,否则这会做你想要的吗?
http://ws.spotify.com/search/1/track.json?q=artist:foo+fighters
Run Code Online (Sandbox Code Playgroud)
该artist:前缀告诉搜索服务只匹配上的艺术家。您可以在此处阅读有关高级搜索语法(也适用于客户端)的更多信息。
| 归档时间: |
|
| 查看次数: |
4288 次 |
| 最近记录: |