我正在尝试使用wikimedia API for wiki commons:
http://commons.wikimedia.org/w/api.php
看起来公共API是非常不成熟的,他们的document that mentions the possibility检索许可证和作者信息的部分是空的。
无论如何我可以使用API检索包含许可信息的段落吗? (例如,标题为“许可”at this page的段落)。当然我可以下载整个页面并尝试解析它,但是什么是API?
迟到的答案,但您可以使用以下查询请求“extmetadata”数据:
查看imageinfo.extmetadata.UsageTerms,Artist,Credit等。
你可以尝试在Magnus Manske's Commons API tool上使用Wikimedia Toolserver。它不是官方服务,文档似乎相当稀疏(也就是说,几乎不存在),但XML output似乎很明显。
我似乎无法在任何地方找到Magnus脚本的来源,但我认为它从文件所属的categories中提取许可信息。如果你想,你可以自己做:只需获取类别列表,如有必要,沿着类别树走,直到找到你认识的license category。唉,树行走部分需要多个API请求或Commons类别的数据库(在Toolserver上进行实时访问,或从database dumps重建的副本)。
是的,我意识到这个答案似乎并不令人满意。事实上,马格努斯的剧本似乎是目前最接近你想要的东西,甚至它被标记为实验和不完整。基本上,这是一个等待某人实施(更好)解决方案的问题。
我用过Magnus' Commons API tool。它不是设计成只是放入一个项目,但如果你复制它调用的wiki页面的源并在本地缓存它,那么将逻辑移动到一个类,你可以使它更容易调用。 Here's the source for Magnus' version。如果你想要我创建的课程让我知道,我会把它挖出来。
来自http://www.mediawiki.org/wiki/API_talk:Main_page#Image_license_information有没有办法通过api获得图像的许可?假设网站按许可证分类,按类别划分可能最简单。但是没有用于许可证信息的内置模块。 Splarka 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的prop)然后您将看到图片的rightsinfo。
在你的布拉德皮特的情况下,它会像: