如何使用VIAF ID(P214)调用Wikidata REST API获取对应实体QID
通过VIAF ID(P214)查询对应Wikidata QID的实现方案
单ID查询方案(MediaWiki Action API)
核心请求参数
action:固定取值为query,调用查询类接口list:固定取值为search,调用站内搜索能力srsearch:按固定格式haswbstatement:P214=【你的VIAF ID】传入,比如查询VIAF ID为95810937的实体,该参数值为haswbstatement:P214=95810937srnamespace:固定取值为0,限定只查询主命名空间的Wikidata实体条目format:按需选择返回格式,通常用jsonsrlimit:自定义返回结果的最大数量,支持获取多个匹配的QID
示例请求(curl)
curl "https://www.wikidata.org/w/api.php?action=query&list=search&srsearch=haswbstatement:P214=95810937&srnamespace=0&format=json&srlimit=10"
示例Python代码
import requests def get_qid_from_viaf(viaf_id: str) -> list: api_params = { "action": "query", "list": "search", "srsearch": f"haswbstatement:P214={viaf_id}", "srnamespace": 0, "format": "json", "srlimit": 10 } response = requests.get("https://www.wikidata.org/w/api.php", params=api_params) response.raise_for_status() result_data = response.json() # 提取所有匹配的QID matched_qids = [item["title"] for item in result_data["query"]["search"]] return matched_qids # 调用示例 print(get_qid_from_viaf("95810937"))
多ID批量查询方案(SPARQL接口)
如果需要一次性查询多个VIAF ID,直接调用SPARQL接口效率更高,查询语句如下:
SELECT ?item ?viaf_id WHERE { # 替换为你需要查询的VIAF ID列表 VALUES ?viaf_id { "95810937" "100172032" "24723958" } ?item wdt:P214 ?viaf_id . }
请求参数说明
query:传入上述构造完成的SPARQL语句format:固定取值为json即可
注意事项
action=wbsearchentities接口仅支持通过实体名称、别名做模糊检索,无法直接匹配属性值,因此不适用当前查询场景。
- 若返回结果为空,说明对应VIAF ID未被录入到任何Wikidata实体的P214属性中
- 若返回多个QID,说明存在多个Wikidata实体标注了同一个VIAF ID,属于数据冲突,可结合自身业务逻辑做进一步筛选
内容的提问来源于stack exchange,提问作者sarcanon
相关产品推荐
相关产品推荐

