0

我目前正在尝试通过 POST 请求填充 wikidata 实例。为此,我将requestsPython 中的库与MediaWiki API一起使用。

到目前为止,我设法创建了具有不同数据类型(如StringQuantityWikidata itemsMedia...)的声明。我使用的一般方案是这样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 与requestsPython 中的库一起使用。

非常感谢您的帮助!

安装的软件版本:

  • 媒体维基:1.36.3
  • PHP: 7.4.27
  • MariaDB 10.3.32-MariaDB-1:10.3.32+maria~focal
  • 重症监护室 67.1
4

1 回答 1

0

如果值字符串是通过json.dumps().

于 2022-02-21T10:41:27.933 回答