在wiki commons中检索图像许可证和作者信息

时间:2011-09-17 08:55:58

标签: wikipedia-api mediawiki-api wikimedia-commons

我正在尝试使用wikiimedia API for wiki commons:

http://commons.wikimedia.org/w/api.php

看起来公共API非常不成熟,而document that mentions the possibility检索许可证和作者信息的部分是空的。

无论如何我可以使用API​​检索包含许可信息的段落吗? (例如,标题为“许可”at this page)下的段落。当然我可以下载整个页面并尝试解析它,但是什么是API?

6 个答案:

答案 0 :(得分:14)

迟到的答案,但您可以请求" extmetadata"具有以下查询的数据:

http://en.wikipedia.org/w/api.php?action=query&prop=imageinfo&iiprop=extmetadata&titles=File%3aBrad_Pitt_at_Incirlik2.jpg&format=json

查看imageinfo.extmetadata.UsageTerms,艺术家,信用等

答案 1 :(得分:3)

您可以尝试在Magnus Manske's Commons API tool上使用Wikimedia Toolserver。它不是官方服务,文档看起来相当稀疏(也就是说,几乎不存在),但XML output似乎很明显。

我似乎无法在任何地方找到Magnus脚本的来源,但我认为它从文件所属的categories中提取许可信息。如果你愿意,你可以自己做:只需获取类别列表,如有必要,可以走向类别树,直到找到你认可的license category。唉,树行走部分需要多个API请求或Commons类别数据库(Toolserver上的实时访问,或database dumps的重建副本)。

是的,我意识到这个答案似乎并不令人满意。事实上,马格努斯的剧本似乎是目前最接近你想要的东西,甚至它被标记为实验和不完整。基本上,这是一个等待某人实施(更好)解决方案的问题。

答案 2 :(得分:1)

我使用过Magnus' Commons API tool。它不是设计成只是放入一个项目,但如果你复制它调用的wiki页面的源并在本地缓存它,那么将逻辑移动到一个类,你可以使它更容易调用。 Here's the source for Magnus' version。如果你想要我创建的课程让我知道,我会把它挖出来。

答案 3 :(得分:1)

来自http://www.mediawiki.org/wiki/API_talk:Main_page#Image_license_information 有没有办法通过api获得图像的许可? 假设网站按许可证分类,按类别划分可能最简单。但是没有用于许可证信息的内置模块。 Splarka 2010年1月22日08:45(UTC)

但是,我发现使用类别不会为许多图像返回任何内容,即使它们已指定许可证。也许最好的方法是解析图像页面的渲染html。

答案 4 :(得分:0)

看看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')

答案 5 :(得分:-3)

请参阅页面:http://www.mediawiki.org/wiki/API:Meta

你可以使用foreach图像标签'meta = siteinfo'和标签'siprop = rightsinfo'(siprop是siteinfo的道具) 然后你会看到图片的权利信息。

在布拉德皮特的案例中,它就像是:

http://en.wikipedia.org/w/api.php?format=jsonfm&action=query&titles=File:Brad_Pitt_at_Incirlik2.jpg&prop=imageinfo&iiprop=url&meta=siteinfo&siprop=rightsinfo