通过API查找包含维基共享资源类别中图像的所有页面

时间:2015-04-16 12:11:07

标签: php api dbpedia wikipedia-api wikimedia-commons

我目前正在尝试查找维基共享资源中使用特定类别的图片/媒体的所有网页。

使用API​​,我可以毫无问题地列出所有图像,但我很难在查看所有使用项目的页面中添加查询。

以下是仅包含两个媒体图像的示例类别 https://commons.wikimedia.org/wiki/Category:Automobiles

以下是我正在使用的API调用

https://commons.wikimedia.org/w/api.php?action=query&prop=images&format=json&generator=categorymembers&gcmtitle=Category%3AAutomobiles&gcmprop=title&gcmnamespace=6&gcmlimit=200&gcmsort=sortkey

长期目标是找到我们馆藏图像的所有页面,然后从这些页面中获取有关图像的所有标签。然后,我们可以使用它来增强我们关于这些图像的信息存档,并希望使用链接数据从DBpedia中找到我们可能不知道的相关图像。

我可能需要做两个查询,首先获取图像然后请求有关每个页面的信息,但我希望在一次调用中完成所有操作。

2 个答案:

答案 0 :(得分:1)

假设您需要递归到子类别,您只需使用prop=globalusage generator=categorymembers查询即可。像这样:

  

https://commons.wikimedia.org/w/api.php?action=query&prop=globalusage&generator=categorymembers&gcmtitle=Category:Images_from_the_German_Federal_Archive&gcmtype=file&gcmlimit=200&continue=

JSON格式的输出看起来像这样:

// ...snip...
"6197351": {
    "pageid": 6197351,
    "ns": 6,
    "title": "File:-Bundesarchiv Bild 183-1987-1225-004, Schwerin, Thronsaal-demo.jpg",
    "globalusage": [
        {
            "title": "Wikipedia:Fotowerkstatt/Archiv/2009/M\u00e4rz",
            "wiki": "de.wikipedia.org",
            "url": "https://de.wikipedia.org/wiki/Wikipedia:Fotowerkstatt/Archiv/2009/M%C3%A4rz"
        }
    ]
},
"6428927": {
    "pageid": 6428927,
    "ns": 6,
    "title": "File:-Fernsehstudio-Journalistengespraech-crop.jpg",
    "globalusage": [
        {
            "title": "Kurt_von_Gleichen-Ru\u00dfwurm",
            "wiki": "de.wikipedia.org",
            "url": "https://de.wikipedia.org/wiki/Kurt_von_Gleichen-Ru%C3%9Fwurm"
        },
        {
            "title": "Wikipedia:Fotowerkstatt/Archiv/2009/April",
            "wiki": "de.wikipedia.org",
            "url": "https://de.wikipedia.org/wiki/Wikipedia:Fotowerkstatt/Archiv/2009/April"
        }
    ]
},
// ...snip...

请注意,您很可能必须处理query continuations,因为可能会有比MediaWiki在单个请求中返回的结果更多的结果。有关处理这些内容的更多信息,请参阅链接页面(或者只使用为您处理这些内容的MW API客户端)。

答案 1 :(得分:0)

我不了解您的用例("我们的收藏品"?)所以我不知道您为什么要直接使用API​​,但是如果您想要在类别中递归你会做很多车轮改造。

大多数人使用MediaWiki的创建者Magnus Manske制作的工具:在这种情况下,它是GLAMourous。具有3级递归的示例(找到186k图像,114k用法):https://tools.wmflabs.org/glamtools/glamorous.php?doit=1&category=Automobiles&use_globalusage=1&depth=3

结果也可以XML格式下载,因此它是机器可读的。

相关问题