我正在使用 pywikibot 在 Python 中创建一个半自动化工具,以将数据从 TOP500 数据库导入 Wikidata,遵循本教程和本教程。(是我第一次用 Python 编程)。
它运行良好,直到脚本尝试在一个单位内提交一个数值(例如,Pleiades ( Q2442043
) →功耗 (P2791) → 4407.00 kW)。该脚本解析单位内的数值,然后将单位转换为给定的语句(kW → kW(Q3320608
))。但是,当将单元作为 URL(实体帮助器字符串)和语句(QXXXXX)传递时,脚本会引发错误(这是一个警告,因为我正在使用 try-except 处理错误):
WARNING: API error modification-failed: Illegal value: https://wikidata.org/wiki/Q79738
Traceback (most recent call last):
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/page.py", line 112, in handle
func(self, *args, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/page.py", line 4325, in addClaim
self.repo.addClaim(self, claim, bot=bot, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/site.py", line 1326, in callee
return fn(self, *args, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/site.py", line 7946, in addClaim
data = req.submit()
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/data/api.py", line 2080, in submit
raise APIError(**result['error'])
pywikibot.data.api.APIError: modification-failed: Illegal value: https://wikidata.org/wiki/Q79738 [messages:[{'name': 'wikibase-validator-not-allowed', 'parameters': ['https://wikidata.org/wiki/Q79738'], 'html': {'*': 'Valor ilegal: <a class="external free" href="https://wikidata.org/wiki/Q79738">https://wikidata.org/wiki/Q79738</a>'}}]; help:See https://www.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.]
我将我的项目上传到 GitHub。相关源代码可在addClaim()
函数第109 行找到。