查询所有艺术家的 https://musicbrainz.org
Querying https://musicbrainz.org for all artists
如何查询 https://musicbrainz.org 上所有出生于 1720 年之后死亡于 1900 年之前的艺术家?
我需要检索他们的 ID 和一些关于他们的信息。
是否可以获取 JSON 格式的数据?
首先,据我所知,Musicbrainz 仅 returns XML,因此您必须将结果转换为 JSON。
为了回答您的问题,您似乎无法在一次通话中获得所需的数据。 (以下内容取自XML Web Service Search documentation。)
此调用将检索在给定年份出生的所有艺术家:
http://musicbrainz.org/ws/2/artist/?query=begin:1720
我认为您需要编写 180 次调用(1720 年到 1900 年之间每年一次)来获取所需的数据。您还需要通过查看 <life-span>
中的 <end>
节点手动过滤掉 1900 年后去世的艺术家。这是因为 end
字段只会显示在特定年份去世的艺术家。
对于那些不想阅读长篇文章的人 post,以下是 OP 在一次查询中要求的所有内容:
http://musicbrainz.org/ws/2/artist/?query=begin:[1720 TO 1900] AND end:[1720 TO 1900] AND type:"person"&fmt=json
这应该 return 完美的结果,并且必须是最佳答案。
- 所有艺术家,出生于 1720 年之后,死于 1900 年之前,采用 json 格式,检索他们的 ID 以及关于他们的大量信息...
解释和思考过程:
由于 Brian 目前接受的答案包括 API 文档的 link,我可以说它在技术上是完整的,但我不认为指向规范是最佳答案,并且可以大大提高。
首先通过添加json格式参数很容易returnjson。
&fmt=json
其次,虽然我不认为当时有很多男孩乐队,但考虑到 OP 正在询问出生和死亡,我们可能会得出结论,他们只对人感兴趣,而不是对其他类型的艺术家群体感兴趣。
AND type:"person"
正如布赖恩建议的那样,每个结束日期都需要再次调用,然后过滤结果,只选取那些在 1900 年之前去世的人。
如果您这样做,您将需要进行超过 180 次搜索(最佳答案建议),而是针对每个出生年份和每个死亡年份组合进行一次搜索,因此从技术上讲,从 1720 年到 1720 年,一直到 1900-1900 年,我的数学很糟糕,但那是数千次搜索。
但是,这仍然是一个如此可怕的搜索的原因是,有时日期要么只写年份,有时写月日期和年份,例如,如果您搜索 begin 1929 and end 1900
因此,如果写入的日期不仅包括年份,还包括 month/date,您将不会得到关于这位艺术家的任何结果,因为生日是完整的:
例如:
id "2b8a16a9-468f-49b0-93ea-5e6726f41643" type "Person" life-span
begin "1929-11-10"
end "1990"
ended true
因此,为了仅使用年份获得任何好的结果,您需要添加模糊搜索语法
musicbrainz.org/ws/2/artist/?query=begin:1960~ AND end:1990~ AND
type:"person"&fmt=json
但这并不能解决建议搜索量的大问题,所以知道它基于 LUCENS 我决定学习一些 LUCENS,并意识到有范围语法:
因此,您可以通过一个查询完成上述所有操作:
http://musicbrainz.org/ws/2/artist/?query=begin:[1720 TO 1900] AND
end:[1720 TO 1900] AND type:"person"&fmt=json
PS 我建议开始添加引号甚至 url 编码您的参数值以防止损坏。
例如,在上面的示例中,将引号从开始和结束数字中去掉是没有问题的,但是从类型值中去掉引号将失败。
如何查询 https://musicbrainz.org 上所有出生于 1720 年之后死亡于 1900 年之前的艺术家?
我需要检索他们的 ID 和一些关于他们的信息。 是否可以获取 JSON 格式的数据?
首先,据我所知,Musicbrainz 仅 returns XML,因此您必须将结果转换为 JSON。
为了回答您的问题,您似乎无法在一次通话中获得所需的数据。 (以下内容取自XML Web Service Search documentation。)
此调用将检索在给定年份出生的所有艺术家:
http://musicbrainz.org/ws/2/artist/?query=begin:1720
我认为您需要编写 180 次调用(1720 年到 1900 年之间每年一次)来获取所需的数据。您还需要通过查看 <life-span>
中的 <end>
节点手动过滤掉 1900 年后去世的艺术家。这是因为 end
字段只会显示在特定年份去世的艺术家。
对于那些不想阅读长篇文章的人 post,以下是 OP 在一次查询中要求的所有内容:
http://musicbrainz.org/ws/2/artist/?query=begin:[1720 TO 1900] AND end:[1720 TO 1900] AND type:"person"&fmt=json
这应该 return 完美的结果,并且必须是最佳答案。 - 所有艺术家,出生于 1720 年之后,死于 1900 年之前,采用 json 格式,检索他们的 ID 以及关于他们的大量信息...
解释和思考过程:
由于 Brian 目前接受的答案包括 API 文档的 link,我可以说它在技术上是完整的,但我不认为指向规范是最佳答案,并且可以大大提高。
首先通过添加json格式参数很容易returnjson。
&fmt=json
其次,虽然我不认为当时有很多男孩乐队,但考虑到 OP 正在询问出生和死亡,我们可能会得出结论,他们只对人感兴趣,而不是对其他类型的艺术家群体感兴趣。
AND type:"person"
正如布赖恩建议的那样,每个结束日期都需要再次调用,然后过滤结果,只选取那些在 1900 年之前去世的人。
如果您这样做,您将需要进行超过 180 次搜索(最佳答案建议),而是针对每个出生年份和每个死亡年份组合进行一次搜索,因此从技术上讲,从 1720 年到 1720 年,一直到 1900-1900 年,我的数学很糟糕,但那是数千次搜索。
但是,这仍然是一个如此可怕的搜索的原因是,有时日期要么只写年份,有时写月日期和年份,例如,如果您搜索 begin 1929 and end 1900
因此,如果写入的日期不仅包括年份,还包括 month/date,您将不会得到关于这位艺术家的任何结果,因为生日是完整的:
例如:
id "2b8a16a9-468f-49b0-93ea-5e6726f41643" type "Person" life-span
begin "1929-11-10" end "1990" ended true
因此,为了仅使用年份获得任何好的结果,您需要添加模糊搜索语法
musicbrainz.org/ws/2/artist/?query=begin:1960~ AND end:1990~ AND type:"person"&fmt=json
但这并不能解决建议搜索量的大问题,所以知道它基于 LUCENS 我决定学习一些 LUCENS,并意识到有范围语法:
因此,您可以通过一个查询完成上述所有操作:
http://musicbrainz.org/ws/2/artist/?query=begin:[1720 TO 1900] AND end:[1720 TO 1900] AND type:"person"&fmt=json
PS 我建议开始添加引号甚至 url 编码您的参数值以防止损坏。 例如,在上面的示例中,将引号从开始和结束数字中去掉是没有问题的,但是从类型值中去掉引号将失败。