使用ws.spotify.com/search与桌面客户端相比时,搜索结果会有所不同

时间:2014-01-24 10:39:37

标签: php web-services api spotify

在我未来的网站上,我尝试将作为字符串“Artist - TrackTitle”的曲目转换为相应的“spotify:track:trackCode”。

由于我编写PHP的速度比javaScript快(随意嘲笑),我会做以下事情:

  1. 清除spotify搜索发现令人困惑的一些事情的字符串,例如括号中的内容,符号如“`”,“/”,“ - ”等。
  2. 将空格转换为html实体“%20”
  3. 检索spotify xml-page“http://ws.spotify.com/search/1/track?q=”的结果以及附加的字符串。
  4. 如果有结果,请检索该页面中与正则表达式匹配的第一个匹配项“(spotify:track :)(。*)(\”>)“
  5. 有趣的是,这只适用于所有字符串的80%。尽管字符串相当标准化(它们来自广播网站,瑞典语“Digilistan P3”),但有些搜索结果为0。

    可能的解决方案:

    • A)Spotify上没有该曲目。
    • B)赛道IS在spotify上可用,但ws.spotify.com/search上的搜索算法与桌面客户端不同。
    • C)搜索字符串没有为url版本或桌面客户端
    • 做好充分准备

    属于B组或C组的两条曲目(从不合适的角色中删除后):

    1. teddybears sthlm - rock'n'roll highschool
    2. bomfunk mc's - b-boys& flygirls
    3. christina aguilera,mya,pink& lil'kin - 女士果酱
    4. macklemore&瑞安刘易斯壮举。 wanz - 节俭商店(我的意思是:真的吗?你在跟我开玩笑吗?甚至没有ws.spotify.com/search/1/track?q=macklemore%20&thrift%20shop给 任何 结果!)
    5. 现在问题

      任何人都可以提出更好的转换或想法,以提高我找到合适的赛道匹配成功率吗?

      当前算法can be found here

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

客户端和Web API中的搜索算法确实略有不同,但您可能也发现了一个错误。

Web API使用全局流行度对搜索结果进行排名(使用实际搜索查询加权)。它还返回任何国家/地区可用的内容。

客户端仅返回登录用户的国家/地区可用实体。它还使用登录用户所在国家/地区的受欢迎程度对搜索结果进行排名。

根据这一点以及标签经常为具有不同权限的不同国家/地区发送完全相同相册的不同副本这一事实将使搜索结果不同。我们最近在一些国家的客户中看到了一个错误。 https://twitter.com/swemoph/status/426260017847623680

因此,根据设计,它应该略有不同,但在您的情况下,它应该只是意味着更多的搜索结果,顺序略有不同,但永远不会为零。

2-4可能解释为没有逃避&。

1号更有趣。看看Web API中的轨道的实际uri以及开放站点,我们看到它被错误归因于Teddybears(而不是Teddybears Sthlm):

$ curl -s 'http://ws.spotify.com/lookup/1/.json?uri=spotify:track:1JdC88rtMAwebQVFOcAg0D' | jq .track.artists
[
  {
    "name": "Teddybears",
    "href": "spotify:artist:3gqv1kgivAc92KnUm4elKv"
  },
  {
    "name": "Thomas Rusiak",
    "href": "spotify:artist:7amcWVAeY8e6YwgV9bXlKH"
  }
]

http://open.spotify.com/track/1JdC88rtMAwebQVFOcAg0D显示了Teddybears的Rock'n'Roll Highschool

这清楚地解释了为什么您在Web API中找不到它。通过添加搜索词sthlm,您可以从结果中排除此曲目。查询引擎似乎按预期工作(虽然如果我们允许在这里进行更模糊的搜索,我会更喜欢,但这是一个不同的问题)。你没有做错任何事,但我们需要找出数据看起来不同的原因。