如何用Python通过Twitter用户ID/用户名查询Wikidata Q-ID?
如何通过Twitter用户名/ID批量获取Wikidata Q-ID
问题背景
我拥有一批已验证的Twitter用户ID及用户名列表:
data['screen_name'] = [MOFAJapan_en, serenawilliams, JeffBezos ....] data['twitter_ids'] = [303735625, 26589987, 15506669 ....]
希望获取它们对应的Wikidata Q-ID,预期结果如下:
q_id_list = [Q222241, Q11459, Q312556 ....]
遇到问题:搜索MOFAJapan_en或“日本外务省”时,Wikidata API无法识别,但MOFAJapan存在对应的Wikidata页面(Q222241)。已知Twitter用户名对应的Wikidata属性为P2002,请问如何在未知Q-ID的情况下进行查询?
解决方案
1. 使用Wikidata SPARQL查询(推荐批量场景)
直接通过P2002属性匹配Twitter用户名,只要Wikidata条目里记录了对应属性值,就能精准匹配到Q-ID,无需依赖实体名称搜索。
单个用户名查询示例
SELECT ?item WHERE { ?item wdt:P2002 "MOFAJapan_en" . }
批量用户名查询示例
使用VALUES子句一次性传入多个用户名,返回所有匹配结果:
SELECT ?screenName ?item WHERE { VALUES ?screenName { "MOFAJapan_en" "serenawilliams" "JeffBezos" } ?item wdt:P2002 ?screenName . }
注:如果
MOFAJapan_en未在Q222241的P2002属性中记录,该查询不会返回结果——此时需确认该Twitter账号是否为Q222241实体的关联账号,或是否存在独立的Wikidata条目。
用Twitter ID查询(对应你的twitter_ids列表)
Wikidata属性P2003对应Twitter用户ID,也可以用这个属性查询:
SELECT ?twitterId ?item WHERE { VALUES ?twitterId { "303735625" "26589987" "15506669" } ?item wdt:P2003 ?twitterId . }
2. 使用Wikidata API单次查询
通过wbsearchentities接口,指定property参数为P2002,直接基于属性值搜索:
核心请求参数:
action=wbsearchentitiessearch=MOFAJapan_enlanguage=entype=itemproperty=P2002
批量查询时可循环遍历用户名列表逐个调用,但需注意Wikidata API的请求频率限制。
关键注意事项
- 匹配时严格区分大小写,需确保输入的用户名/ID与Wikidata属性值完全一致
- 若查询无结果,说明该Twitter账号未在Wikidata中关联对应实体,需手动确认或补充条目
- 批量场景优先使用SPARQL查询,可大幅减少请求次数,提升效率
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

