使用Python requests调用MediaWiki API的`wbcreateclaim`提交时间数据至Wikibase时触发"invalid-snak"错误的问题咨询
问题:通过Wikidata API插入时间类型声明时触发"invalid-snak"错误
我目前正在尝试通过POST请求填充Wikidata实例,用Python的requests库结合MediaWiki API完成这项工作。截至目前,我已经成功创建了多种数据类型的声明(比如String、Quantity、Wikidata条目、Media等),使用的通用代码框架如下(针对不同数据类型会替换对应的value字符串):
import requests session = requests.Session() # authenticate and obtain a csrf_token parameters = { 'action': 'wbcreateclaim', 'format': 'json', 'entity': 'Q1234', 'snaktype': 'value', 'property': 'P12', 'value': '{"time": "+2022-02-19T00:00:00Z", "timezone": 0, "precision": 11, "calendarmodel": "http://www.wikidata.org/entity/Q1985727"}', 'token': csrf_token, 'bot': 1, } r = session.post(api_url, data=parameters) print(r.json())
但每次尝试插入时间类型数据时,都会触发**"invalid-snak"**错误,错误信息显示:"invalid snak data."
我已经尝试了以下修改,但都没能解决问题:
- 提交不带单引号的字典形式
value值; - 将数值类型的字段(
timezone、precision)包裹双引号; - 使用本地日历模型条目(
"http://localhost:8181/entity/Q73"); - 在
value字典中添加before和after键; - 省略
timezone、precision、calendarmodel字段及其各种组合; - 将时间字符串格式改为
2022-02-19; - 使用管理员权限提交请求(尽管错误信息里完全没提到权限不足的问题)。
我想搞清楚这个问题到底出在哪里?时间类型对应的value字段正确格式应该是什么?我知道有专门针对这类任务的库或接口,但还是希望直接通过Python的requests库调用Wikidata API来完成操作。感谢大家的帮助!
已安装的软件版本信息:
- MediaWiki: 1.36.3
- PHP: 7.4.27
- MariaDB 10.3.32-MariaDB-1:10.3.32+maria~focal
- ICU 67.1
内容的提问来源于stack exchange,提问作者Elaphus
相关产品推荐
相关产品推荐

