如何通过Wikidata API获取实体或搜索查询的详细描述(类搜索侧边栏)
获取Wikidata实体的详细信息(类似搜索结果右侧卡片)
嘿,你已经找对了第一步用wbsearchentities获取匹配实体基础信息的方向!要拿到类似搜索引擎右侧那种结构化的详细实体内容,你需要搭配Wikidata API的wbgetentities动作来拉取目标实体的完整数据,我给你一步步拆解怎么操作:
1. 先通过wbsearchentities拿到目标实体的ID
这一步你已经熟悉了,比如搜索"Apple Inc."的请求示例:
https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Apple Inc.&language=en&format=json
返回结果里的id字段(比如Q312)就是我们后续要用到的实体唯一标识。
2. 用wbgetentities拉取详细实体数据
wbgetentities是专门用来获取单个或多个实体完整信息的API动作,核心参数如下:
action=wbgetentities:指定API动作ids:填入你从搜索结果拿到的实体ID(多个用竖线分隔,比如Q312|Q164272)props:指定要返回的内容类型,按需组合:info:实体基础元数据(类型、修改时间等)descriptions:实体的多语言详细描述claims:实体的结构化属性声明(比如成立时间、总部、创始人等,这就是右侧卡片的核心数据)labels:实体的多语言名称
language:指定返回内容的语言(比如en为英文)format=json:指定返回格式为JSON
示例请求(获取Apple Inc.的完整详细信息)
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q312&props=info|descriptions|claims|labels&language=en&format=json
3. 按需精简返回数据(可选)
如果不需要实体的所有属性,可以通过claims参数指定具体的属性ID来缩小返回范围,比如只获取成立时间(属性IDP571)和创始人(属性IDP112):
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q312&props=info|descriptions|claims|labels&claims=P571|P112&language=en&format=json
4. 解析返回结果构建卡片
拿到JSON后,你可以提取这些关键字段来构建类似搜索结果的右侧卡片:
- 实体名称:
entities.Q312.labels.en.value - 详细描述:
entities.Q312.descriptions.en.value - 结构化属性:比如成立时间在
entities.Q312.claims.P571[0].mainsnak.datavalue.value.time,创始人在entities.Q312.claims.P112[0].mainsnak.datavalue.value.id(还可以再用这个ID去拉取创始人的实体信息)
这样就能轻松获取到和搜索引擎右侧一致的实体详细内容啦!
内容的提问来源于stack exchange,提问作者Aakash Singh




