从维基数据中获取可读的结果
Getting readable results from Wikidata
好的,我正在尝试从维基数据中获取有关电影的信息,以这部电影为例:https://www.wikidata.org/wiki/Q24871
在页面上,数据以可读的格式清楚地显示,但是当您尝试通过 API 提取它时,您会得到:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q24871
这是它的一部分:
"P272": [
{
"id": "q2487121C959-0FCF-49D4-9265-E4FAC217CB6E",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 775450
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871777445-1068-4C38-9B4B-96362577C442",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 3041294
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871009F7A-8E54-48C3-92D9-75DEF4CF3E8D",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 646968
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871$CA53B5EB-1041-4701-A36E-7C348FAC984E",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 434841
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal",
"references": [
{
"hash": "50f57a3dbac4708ce4ae4a827c0afac7fcdb4a5c",
"snaks": {
"P143": [
{
"snaktype": "value",
"property": "P143",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 11920
},
"type": "wikibase-entityid"
}
}
]
},
"snaks-order": [
"P143"
]
}
]
}
],
问题是我不确定如何将这样的部分转换成可读的文本。我得到 API 正在使用唯一 ID 在 class 及其属性之间调用 link,但我仍然卡住了。
目前这是否真的可行,还是我找错人了?
你应该寻找的是每个语句中的 numeric-id
s 并添加前导 Q
来恢复你的维基数据 ID,结果应该是 ['Q775450', 'Q3041294', 'Q646968', 'Q434841', 'Q11920']
[更新:您现在可以在 mainsnak.datavalue.value.id
直接访问 Q id,而不必从 numeric-id
][=23 构建它=]
这可以使用 wikibase-sdk (a JS lib I developed) wbk.simplify.claims
function
来完成
获得这些 ID 后,您只需使用 wbgetentities
API 请求实体标签:
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels
您甚至可以只获得某些语言的结果,使用 languages
参数:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels&languages=en|de|fr
好的,所以我还没有找到使用 This is the "wbgetentities" 系统的解决方案 我发现您可以使用 "parse" 命令来获取 html 结构。
https://www.wikidata.org/w/api.php?action=parse&page=Q24871
虽然它仍然需要一些处理,但它比以前的解决方案容易得多。
我看到了一个可接受的答案,但最初对问题的解释不同。基本上要求在维基数据项目页面上看到的 JSON 中有相同的输出。
我使用 Wikidata Query Front End 直接查询并检查结果。然后使用 </> Code
按钮...解释为什么您在上面看到这么多不必要的空格。
另请参阅:
好的,我正在尝试从维基数据中获取有关电影的信息,以这部电影为例:https://www.wikidata.org/wiki/Q24871
在页面上,数据以可读的格式清楚地显示,但是当您尝试通过 API 提取它时,您会得到:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q24871
这是它的一部分:
"P272": [
{
"id": "q2487121C959-0FCF-49D4-9265-E4FAC217CB6E",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 775450
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871777445-1068-4C38-9B4B-96362577C442",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 3041294
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871009F7A-8E54-48C3-92D9-75DEF4CF3E8D",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 646968
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal"
},
{
"id": "q24871$CA53B5EB-1041-4701-A36E-7C348FAC984E",
"mainsnak": {
"snaktype": "value",
"property": "P272",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 434841
},
"type": "wikibase-entityid"
}
},
"type": "statement",
"rank": "normal",
"references": [
{
"hash": "50f57a3dbac4708ce4ae4a827c0afac7fcdb4a5c",
"snaks": {
"P143": [
{
"snaktype": "value",
"property": "P143",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"numeric-id": 11920
},
"type": "wikibase-entityid"
}
}
]
},
"snaks-order": [
"P143"
]
}
]
}
],
问题是我不确定如何将这样的部分转换成可读的文本。我得到 API 正在使用唯一 ID 在 class 及其属性之间调用 link,但我仍然卡住了。
目前这是否真的可行,还是我找错人了?
你应该寻找的是每个语句中的 numeric-id
s 并添加前导 Q
来恢复你的维基数据 ID,结果应该是 ['Q775450', 'Q3041294', 'Q646968', 'Q434841', 'Q11920']
[更新:您现在可以在 mainsnak.datavalue.value.id
直接访问 Q id,而不必从 numeric-id
][=23 构建它=]
这可以使用 wikibase-sdk (a JS lib I developed) wbk.simplify.claims
function
获得这些 ID 后,您只需使用 wbgetentities
API 请求实体标签:
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels
您甚至可以只获得某些语言的结果,使用 languages
参数:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels&languages=en|de|fr
好的,所以我还没有找到使用 This is the "wbgetentities" 系统的解决方案 我发现您可以使用 "parse" 命令来获取 html 结构。
https://www.wikidata.org/w/api.php?action=parse&page=Q24871
虽然它仍然需要一些处理,但它比以前的解决方案容易得多。
我看到了一个可接受的答案,但最初对问题的解释不同。基本上要求在维基数据项目页面上看到的 JSON 中有相同的输出。
我使用 Wikidata Query Front End 直接查询并检查结果。然后使用 </> Code
按钮...解释为什么您在上面看到这么多不必要的空格。
另请参阅: