使用 `wbcreateclaim` 将时间数据提交到 wikibase 会导致 "invald-snak" 错误
Submitting time data to wikibase with `wbcreateclaim` results in "invald-snak" error
我目前正在尝试通过 POST 请求填充维基数据实例。为此,我将 Python 中的 requests
库与 MediaWiki API.
一起使用
到目前为止,我设法创建了具有不同数据类型的声明(例如 String
、Quantity
、Wikidata items
、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())
每次尝试插入 time
类型的数据都会导致 invalid-snak
错误(信息:“无效的 snak 数据。”)。
以下修改没有解决问题:
- 提交值字符串作为字典值(不带单引号),
- 将数值放入(双)引号中,
- 为日历模型使用本地项目(“http://localhost:8181/entity/Q73”),
- 在字典中添加
before
和 after
键,
- 省略
timezone
、precision
、calendarmodel
及其组合,
- 将
time
字符串格式化为 2022-02-19
,
- 正在提交具有管理员权限的请求(尽管错误消息并未
建议用户权限不足的问题)。
你知道吗,我做错了什么? value
字段必须是什么样子?
我知道存在用于这些任务的特殊库或接口。但我确实想将维基数据 API 直接与 Python 中的 requests
库一起使用。
非常感谢您的帮助!
安装的软件版本:
- MediaWiki:1.36.3
- PHP: 7.4.27
- MariaDB 10.3.32-MariaDB-1:10.3.32+maria~focal
- ICU 67.1
如果值字符串是通过 json.dumps()
从字典中生成的,它就有效。
我目前正在尝试通过 POST 请求填充维基数据实例。为此,我将 Python 中的 requests
库与 MediaWiki API.
到目前为止,我设法创建了具有不同数据类型的声明(例如 String
、Quantity
、Wikidata items
、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())
每次尝试插入 time
类型的数据都会导致 invalid-snak
错误(信息:“无效的 snak 数据。”)。
以下修改没有解决问题:
- 提交值字符串作为字典值(不带单引号),
- 将数值放入(双)引号中,
- 为日历模型使用本地项目(“http://localhost:8181/entity/Q73”),
- 在字典中添加
before
和after
键, - 省略
timezone
、precision
、calendarmodel
及其组合, - 将
time
字符串格式化为2022-02-19
, - 正在提交具有管理员权限的请求(尽管错误消息并未 建议用户权限不足的问题)。
你知道吗,我做错了什么? value
字段必须是什么样子?
我知道存在用于这些任务的特殊库或接口。但我确实想将维基数据 API 直接与 Python 中的 requests
库一起使用。
非常感谢您的帮助!
安装的软件版本:
- MediaWiki:1.36.3
- PHP: 7.4.27
- MariaDB 10.3.32-MariaDB-1:10.3.32+maria~focal
- ICU 67.1
如果值字符串是通过 json.dumps()
从字典中生成的,它就有效。