2

我正在尝试从 MusicBrainz API 检索曲目信息,仅使用艺术家和标题作为搜索查询:

http://musicbrainz.org/ws/2/recording/?query=artist:Coldplay+AND+recording:The+Scientist

这将返回艺术家发行的歌曲的每个版本,包括合辑、“最佳”专辑和现场录音。我想找到“原始”版本,它应该是第一个发布的版本。

如果不检索每一个结果(这在单个请求中可能不可能),那么明显的方法是让响应按发布日期升序排序,这样第一个结果总是我所追求的。

API文档似乎没有提到排序结果,所以这可能吗?

4

2 回答 2

4

我认为排序是不可能的。

它也可能无法解决所有问题。许多录音的日期只有一年。因此,发行日期为“1989”的录音将被视为比发行日期为“1989-01-01”的录音更早的版本,实际上可能是这样,也可能不是。

此外,许多版本具有相同的日期,特别是如果日期仅为一年,其中一些版本可能是“原始”版本,而其他版本则不是。这些版本的所有录音都将具有相同的发行日期(例如“1989”)

如果准确性很重要,您可能必须找到最早的未标记为 live 或编译的正式版本,然后从该版本中选择一个录音。

于 2016-12-30T11:29:55.423 回答
0

它可能不是您的解决方案,但以下 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才能正常工作。

我相信有更漂亮的解决方案。但这对我来说已经足够了。

于 2017-10-22T23:04:05.193 回答