我正在尝试在以下位置使用 wikimedia API for wiki commons:
http://commons.wikimedia.org/w/api.php
看起来公共 API 非常不成熟,他们文档中提到检索许可证和作者信息的可能性的部分是空的。
无论如何,我可以使用 API 检索包含有关许可信息的段落吗?(例如,本页标题“许可”下的段落)。当然我可以下载整个页面并尝试解析它,但是 API 是干什么用的?
迟到的答案,但您可以使用以下查询请求“extmetadata”数据:
查看 imageinfo.extmetadata.UsageTerms、Artist、Credit 等。
您可以尝试在Wikimedia Toolserver上使用Magnus Manske 的 Commons API 工具。它不是官方服务,文档似乎相当稀疏(也就是说,几乎不存在),但XML 输出似乎很不言自明。
我似乎无法在任何地方找到 Magnus 脚本的来源,但我认为它从文件所属的类别中提取了许可信息。如果您愿意,您可以自己做:只需获取类别列表,如有必要,沿着类别树向上走,直到找到您认识的许可证类别。唉,tree-walking 部分需要多个 API 请求或 Commons 类别的数据库(在 Toolserver 上进行实时访问,或者从数据库转储中重建副本)。
是的,我意识到这个答案似乎并不令人满意。事实上,Magnus 的脚本似乎是目前最接近你想要的东西,甚至它被标记为实验性和不完整的。基本上,这是一个等待某人实施(更好)解决方案的问题。
我使用了 Magnus 的 Commons API 工具。它的设计目的不是直接放入项目中,但是如果您复制它调用的 wiki 页面的源并在本地缓存它,然后将逻辑移动到一个类中,您可以使其更容易调用。这是 Magnus 版本的来源。如果您想要我从中创建的课程,请告诉我,我会挖掘出来。
来自http://www.mediawiki.org/wiki/API_talk:Main_page#Image_license_information 有没有办法通过 api 获取图像的许可证?假设站点按许可证分类,按类别可能是最简单的。虽然没有用于许可证信息的内置模块。斯普拉卡 2010 年 1 月 22 日 08:45 (UTC)
但是,我发现使用类别不会为许多图像返回任何内容,即使它们具有指定的许可证。也许最好的方法是解析图像页面的渲染 html。
看看Mediawiki 并尝试这个功能:
import json, requests
def extract_image_license(image_name):
start_of_end_point_str = 'https://commons.wikimedia.org' \
'/w/api.php?action=query&titles=File:'
end_of_end_point_str = '&prop=imageinfo&iiprop=user' \
'|userid|canonicaltitle|url|extmetadata&format=json'
result = requests.get(start_of_end_point_str + image_name+end_of_end_point_str)
result = result.json()
page_id = next(iter(result['query']['pages']))
image_info = result['query']['pages'][page_id]['imageinfo']
return image_info
然后调用该函数并传入要查询的图像名称,例如:
extract_image_license('Albert_Einstein_Head.jpg')
见页面:http ://www.mediawiki.org/wiki/API:Meta
您可以使用 foreach 图像标签 'meta=siteinfo' 和标签 'siprop=rightsinfo' (siprop 是 siteinfo 的道具)然后您将看到图片的 rightsinfo。
在你的布拉德皮特的情况下,它会是这样的: