首页 > 解决方案 > 为什么在更新 wikibase 时出现“无效的 snak 数据”?

问题描述

我正在尝试学习如何使用 API 更新 Wikidata 上的值。登录和 csrf cookie 工作正常,但是当我尝试更新值时出现invalid-snak错误。

请求正文如下所示:

POST /w/api.php HTTP/1.1
Accept-Encoding: gzip
Content-Length: 178
User-Agent: Mojolicious (Perl)
Host: test.wikidata.org
Content-Type: application/x-www-form-urlencoded
Cookie: [omitted]

action=wbcreateclaim&bot=1&entity=Q3345&format=json&property=P9876&snaktype=value&token=[omitted]&value=%7B%22entity-type%22%3A%22Q1917%22%7D

回应是:

{
  "error": {
    "code": "invalid-snak",
    "info": "Invalid snak data.",
    "messages": [
      {
        "name": "wikibase-api-invalid-snak",
        "parameters": [],
        "html": {
          "*": "Invalid snak data."
        }
      }
    ],
    "*": "See https://test.wikidata.org/w/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."
  },
  "servedby": "mw1386"
}

我尝试了各种方法来通过更改值来成功更新 - 没有结果。我成功的唯一更新是 with snaktype=novalue- 这将确认问题仅出在 snak vaue 上。

所以问题是,更新蛇值的正确方法是什么?

标签: wikidatawikidata-api

解决方案


问题是你在陈述value={"entity-type":"Q1917"},但Q1917不是entity-type

您应该改为声明value={"entity-type":"item","numeric-id":1917}.

如需深化主题,请参阅Wikidata API 的文档


推荐阅读