You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:52:35