我目前正试图通过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错误(info:“无效的snak .”)。
下列修改没有解决这个问题:
before和after键,timezone、precision、calendarmodel及其组合,time字符串格式化为2022-02-19,你知道吗,我在这里做错了什么?value字段必须是什么样子的?
我知道,这些任务存在特殊的库或接口。但是,我确实希望在Python中的requests库中直接使用Wikidata。
非常感谢您的帮助!
已安装的软件版本:
发布于 2022-02-21 10:41:27
如果值字符串是通过json.dumps()从字典中生成的,它就可以工作。
https://stackoverflow.com/questions/71186209
复制相似问题