如何对 MusicBrainz 搜索 API 的结果进行排序
Posted
技术标签:
【中文标题】如何对 MusicBrainz 搜索 API 的结果进行排序【英文标题】:How to sort results from the MusicBrainz search API 【发布时间】:2017-05-14 16:26:39 【问题描述】:我正在尝试从 MusicBrainz API 检索曲目信息,仅使用艺术家和标题作为搜索查询:
http://musicbrainz.org/ws/2/recording/?query=artist:Coldplay+AND+recording:The+Scientist
这将返回艺术家发行的歌曲的每个版本,包括合辑、“最佳”专辑和现场录音。我想找到“原始”版本,应该是第一个发布的版本。
如果不检索每一个结果(这在单个请求中可能不可能),那么明显的方法是让响应按发布日期升序排序,这样第一个结果始终是我想要的结果.
API documentation 好像没有提到排序结果,这可能吗?
【问题讨论】:
【参考方案1】:我认为排序是不可能的。
它也可能无法解决所有问题。许多录音的日期只有一年。因此,发行日期为“1989”的录音将被视为比发行日期为“1989-01-01”的录音更早的版本,实际上可能是这样,也可能不是。 p>
此外,许多版本都有相同的日期,尤其是当日期仅为一年时,其中一些版本可能是“原创”,而其他版本则不是。这些版本的所有录音都将具有相同的发行日期(例如“1989”)
如果准确性很重要,您可能必须找到最早的未标记为现场或合辑的正式版本,然后从该版本中选择录音。
【讨论】:
【参考方案2】:这可能不是你的解决方案,但以下 bash 单行代码对我有用,可以获取专辑中最古老的年份:
curl -s 'http://musicbrainz.org/ws/2/release/?query=artist:%22The%20Beatles%22%20AND%20release:%22Abbey%20Road%22%20AND%20status:Official&fmt=json' | jq -r '.releases[] | .date' | sort | head -n 1 | sed 's/-.*//'
它将查询并获取所有日期字段,对它们进行排序并获得最低的。最后,它会删除一年后可能的日期值。
对于您的具体问题,这还不够。但也许这个答案可以帮助一些人。
您需要安装 jq 才能正常工作。
我相信有更漂亮的解决方案。不过这个对我来说已经足够了。
【讨论】:
以上是关于如何对 MusicBrainz 搜索 API 的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章
Use MusicBrainz in iOS查询专辑的完整信息