首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向wikibase提交时间数据时,“`wbcreateclaim`”会导致“invald snak”错误

向wikibase提交时间数据时,“`wbcreateclaim`”会导致“invald snak”错误
EN

Stack Overflow用户
提问于 2022-02-19 15:06:53
回答 1查看 41关注 0票数 0

我目前正试图通过POST请求填充一个wikidata实例。为此,我与requests一起使用了Python中的MediaWiki API库。

到目前为止,我成功地创建了不同数据类型的声明(如StringQuantityWikidata itemsMedia .)。我使用的一般方案是(对于每个数据类型有不同的value字符串):

代码语言:javascript
复制
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 .”)。

下列修改没有解决这个问题:

  • 将值字符串作为字典值提交(没有单引号),
  • 将数值放入(双引号),
  • 使用日历模型的本地项(“http://localhost:8181/entity/Q73"”),
  • 在字典中添加beforeafter键,
  • 省略timezoneprecisioncalendarmodel及其组合,
  • time字符串格式化为2022-02-19
  • 提交具有管理员权限的请求(尽管错误消息并不表示存在用户权限不足的问题)。

你知道吗,我在这里做错了什么?value字段必须是什么样子的?

我知道,这些任务存在特殊的库或接口。但是,我确实希望在Python中的requests库中直接使用Wikidata。

非常感谢您的帮助!

已安装的软件版本:

  • MediaWiki: 1.36.3
  • PHP: 7.4.27
  • MariaDB 10.3.32-MariaDB-1:10.3.32+maria~焦
  • ICU 67.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-21 10:41:27

如果值字符串是通过json.dumps()从字典中生成的,它就可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71186209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档