18

我正在尝试在以下位置使用 wikimedia API for wiki commons:

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

看起来公共 API 非常不成熟,他们文档中提到检索许可证和作者信息的可能性的部分是空的。

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

4

6 回答 6

22

迟到的答案,但您可以使用以下查询请求“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、Artist、Credit 等。

于 2015-02-09T20:05:54.933 回答
4

您可以尝试在Wikimedia Toolserver上使用Magnus Manske 的 Commons API 工具。它不是官方服务,文档似乎相当稀疏​​(也就是说,几乎不存在),但XML 输出似乎很不言自明。

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

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

于 2012-02-07T20:47:01.640 回答
2

我使用了 Magnus 的 Commons API 工具。它的设计目的不是直接放入项目中,但是如果您复制它调用的 wiki 页面的源并在本地缓存它,然后将逻辑移动到一个类中,您可以使其更容易调用。这是 Magnus 版本的来源。如果您想要我从中创建的课程,请告诉我,我会挖掘出来。

于 2012-07-11T12:48:49.677 回答
1

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

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

于 2014-01-24T21:23:03.697 回答
1

看看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')
于 2019-02-26T10:46:29.367 回答
-3

见页面:http ://www.mediawiki.org/wiki/API:Meta

您可以使用 foreach 图像标签 'meta=siteinfo' 和标签 'siprop=rightsinfo' (siprop 是 siteinfo 的道具)然后您将看到图片的 rightsinfo。

在你的布拉德皮特的情况下,它会是这样的:

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

于 2013-08-27T14:30:23.747 回答