我目前正在尝试通过 POST 请求填充 wikidata 实例。为此,我将requests
Python 中的库与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
错误(信息:“无效的蛇数据。”)。
以下更改并未解决问题:
- 将值字符串作为字典值提交(不带单引号),
- 将数值放入(双)引号中,
- 使用日历模型的本地项目(“http://localhost:8181/entity/Q73”),
- 在字典中添加
before
和键,after
- 省略
timezone
,及其组合precision
,calendarmodel
time
将字符串格式化为2022-02-19
,- 以管理员权限提交请求(尽管错误消息并未提示用户权限不足的问题)。
你知道,我在这里做错了吗?该领域必须是什么value
样的?
我知道这些任务存在特殊的库或接口这一事实。但我确实想直接将 Wikidata API 与requests
Python 中的库一起使用。
非常感谢您的帮助!
安装的软件版本:
- 媒体维基:1.36.3
- PHP: 7.4.27
- MariaDB 10.3.32-MariaDB-1:10.3.32+maria~focal
- 重症监护室 67.1