如何从我的Web应用向Wikidata提交数据编辑请求?
Wikidata 用户编辑提交功能实现指南
前置准备
- 申请Wikimedia官方的OAuth1.0a凭证,所有编辑操作必须关联用户的Wikidata账号,应用需要获得用户授权后才可代提交修改,不支持匿名编辑
- 提前做字段合法性校验:补充的内容必须符合Wikidata对应属性的取值规范,比如身高对应属性P2048、体重对应P2067、所属球队对应P54,所属球队取值必须是Wikidata已存在的实体QID,不可直接填入字符串名称
核心编辑接口调用方法
Wikibase API的实体编辑统一使用wbeditentity动作,支持新增、修改、删除实体的属性声明,以下是POST请求的核心参数示例,以给ID为Q12345的篮球运动员补充1.98米身高为例:
POST请求地址:Wikidata官方API入口 请求参数: action: wbeditentity id: Q12345 // 待编辑的运动员实体QID data: {"claims":[{"mainsnak":{"snaktype":"value","property":"P2048","datavalue":{"value":{"amount":"+1.98","unit":"http://www.wikidata.org/entity/Q218593"}},"type":"statement","rank":"normal"}]} token: ******** // 提前获取的CSRF编辑令牌 format: json assert: user // 校验当前用户登录状态有效性
参数说明
data为JSON格式的修改内容,不同属性对应不同的数据值结构:数值类属性需要携带对应单位的实体ID,实体类属性(比如所属球队)直接填入目标实体的QID即可- 编辑令牌需要提前调用
action=query&meta=tokens&type=csrf接口获取,令牌有效期较短,每次提交编辑前都需要重新拉取
必须注意的规则
- 所有提交的修改必须附带可靠来源引用,Wikidata不接受无来源的内容修改,你需要在用户补充信息的同时收集来源链接(比如球队官网页面、权威体育媒体报道),提交时将引用信息写入data字段的
references节点,否则编辑会被社区志愿者回滚 - 不要批量提交未校验的内容,Wikidata内置反垃圾机制,短时间内大量无效提交会导致你的应用OAuth权限被封禁
- 功能开发阶段可以先用Wikidata测试沙箱环境调试,所有流程跑通后再上线正式环境的提交功能
学习路径
- 先掌握Wikibase基础数据模型,搞清楚实体、属性、声明、引用、秩这些核心概念,再动手调试接口
- 先在测试环境手动调用接口完成几次修改操作,熟悉参数结构和错误返回规则,再将逻辑封装到你的应用中
- 可以参考现有开源Wikidata编辑工具的实现逻辑,学习字段校验、来源拼接的通用规则
内容的提问来源于stack exchange,提问作者Riomare
相关产品推荐
相关产品推荐

