为所有艺术家查询https://musicbrainz.org

时间:2017-03-02 13:55:28

标签: json fetch musicbrainz

如何查询1720年后出生并在https://musicbrainz.org之前在1900年之前去世的所有艺术家?

我需要检索他们的ID和一些有关它们的信息。 是否有可能以JSON格式获取数据?

2 个答案:

答案 0 :(得分:1)

对于那些不想阅读长篇文章的人来说,这里只是一个查询中OP要求的所有内容:

http://musicbrainz.org/ws/2/artist/?query=begin:[1720 TO 1900] AND end:[1720 TO 1900] AND type:"person"&fmt=json

这应该会返回完美的结果,并且必须是最好的答案。 - 所有艺术家,出生于1720年之后,1900年之前死亡,以json格式,检索他们的身份证,以及有关他们的大量信息......

解释和思考过程:

由于Brian当前接受的答案包含API文档的链接,我可以说它在技术上已经完成,但我不认为指向规范是最好的答案,并且可以大大改进

首先,通过添加json格式参数很容易返回json。

  

&安培; FMT = JSON

其次,虽然我不知道那里有许多男孩乐队,但鉴于OP询问出生和死亡,我们可能会认为他们只对人而不是其他类型的艺术家感兴趣。

  

AND键入:" person"

此时布莱恩建议对每个结束日期再次呼叫,然后过滤结果,只考虑那些死于1900年的人。

如果你这样做,你需要做超过180次搜索的最佳答案建议,而是每次出生和每个死亡年份组合一次,所以技术上1720到1720,一直到1900-1900,我的数学很臭,但这是成千上万的搜索。

但是,这仍然是一个如此可怕的搜索是因为有时候日期要么只写一年,有时候写的是月份日期和年份,所以例如如果你搜索开始1929年和1900年结束

因此,如果日期不仅包括年份而是包含月份/日期,那么由于生日已满,您将无法获得该艺术家的任何结果:

例如:

  

id" 2b8a16a9-468f-49b0-93ea-5e6726f41643"类型"人"寿命
  开始" 1929-11-10"        结束" 1990"        结束了

因此,为了仅使用年份获得任何好结果,您需要添加模糊搜索语法

  

musicbrainz.org/ws/2/artist/?query=begin:1960〜AND end:1990~AND   类型:"人"&安培; FMT = JSON

但这没有解决建议的搜索量的大问题,所以知道它的LUCENS我决定学习一些LUCENS,并意识到有范围语法:

因此,您可以通过一个查询完成上述所有操作:

  

http://musicbrainz.org/ws/2/artist/?query=begin:[1720至1900年]和   结束:[1720至1900]并输入:" person"& fmt = json

PS我建议开始添加引号甚至url编码参数值以防止破坏。 例如,在上面的示例中保留引号关闭开头和结尾数字没有问题,但关闭类型值将失败。

答案 1 :(得分:0)

首先,就我所知,Musicbrainz只返回XML,所以你必须将结果转换为JSON。

要回答您的问题,您似乎无法在一次通话中获得所需的数据。 (以下内容基于XML Web Service Search documentation。)

此电话会检索所有在某一年出生的艺术家:

http://musicbrainz.org/ws/2/artist/?query=begin:1720

我相信你需要写180个电话(1720年到1900年之间每年一个)来获取你需要的数据。您还需要通过查看<end>中的<life-span>节点,手动过滤掉1900年后死亡的艺术家。这是因为end字段只会让您获得在特定年份死亡的艺术家。