如何对 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查询专辑的完整信息

Musicbrainz 指纹识别

获取带有 MusicBrainz ID 的专辑曲目列表

Musicbrainz 艺术家形象和信息

python 从MusicBrainz获取/处理JSON数据

如何在全范围内平均减少 SQL 查询的结果行?