如何查询1720年后出生并在https://musicbrainz.org之前在1900年之前去世的所有艺术家?
我需要检索他们的ID和一些有关它们的信息。 是否有可能以JSON格式获取数据?
答案 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
字段只会让您获得在特定年份死亡的艺术家。