在维基共享资源中检索图像许可证和作者信息。

18
我正在尝试使用维基媒体API来访问维基共享资源:
http://commons.wikimedia.org/w/api.php

看起来Commons API还很不成熟,而且在他们的文档中提到检索许可和作者信息的部分为空。

有没有办法使用API检索包含有关许可的段落?(例如,在此页面下面的标题“许可”下面的段落这里)。当然,我可以下载整个页面并尝试解析它,但是API的用途是什么呢?

6个回答

22

正确答案:从维基百科官方的PHP API获取并获得易于解析的JSON响应! - loretoparisi
我喜欢这个答案。有没有以这种格式提供的任何转储文件?我下载了一些转储文件,但我希望有一个以这种格式可解析的巨大转储文件。 - steps

4
你可以尝试在Wikimedia Toolserver上使用Magnus Manske's Commons API tool。这不是官方服务,并且文档似乎相当缺乏(也就是说,几乎不存在),但XML输出似乎非常容易理解。
我似乎找不到Magnus脚本的来源,但我认为它从文件所属的类别中提取许可信息。如果您愿意,您可以自己执行此操作:只需获取类别列表,并在必要时沿着类别树向上走,直到找到一个许可证类别您认识的。不幸的是,树遍历部分需要多个API请求或Commons类别数据库(Toolserver上的实时访问,或数据库转储的重建副本)。
是的,我意识到这个答案可能看起来不令人满意。事实上,Magnus的脚本似乎是目前最接近您想要的东西,即使它被标记为实验性和不完整。基本上,这是等待有人实现(更好)解决方案的问题。

工具好像不可用了,有人能确认一下吗? - user5950
@user5950:是的,对我来说似乎也无法连接。 - Ilmari Karonen
所以,如果有人发现了一个好的替代方案,请告诉我们! - user5950
1
2021年更新:看起来运行良好,源代码位于https://bitbucket.org/magnusmanske/magnustools/src/master/public_html/commonsapi.php。 - Nicolas Raoul

3

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

2
我用过Magnus' Commons API tool。它并不是为了直接应用于项目而设计的,但如果你复制它调用的维基页面的源代码并将其缓存在本地,然后将逻辑移入一个类中,就可以更轻松地进行调用。这是Magnus版本的源代码。如果你想要我从中创建的类,请让我知道,我会找出来。

1

来自http://www.mediawiki.org/wiki/API_talk:Main_page#Image_license_information的信息: 通过API获取图像许可证的方法是什么?

按类别分类可能是最简单的方法,假设网站按许可证分类。然而,没有内置的模块来获取许可证信息。Splarka 08:45, 2010年1月22日(UTC)
然而,我发现使用类别对于许多图像并没有返回任何结果,即使它们指定了许可证。也许最好的方法是解析图像页面的呈现HTML。


-3

这不正确。'siteinfo' 提供的是关于网站而不是图片的信息。例如,如果您查看 File:Flag_of_the_United_Kingdom.svg 的页面,您会发现它的许可证是公共领域。然而,使用您提供的查询来使用此文件显示该页面(而不是图片)的许可证为创意共享。它没有提供有关图像的任何信息。 - ishmael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接