我目前正在尝试查找维基共享资源上使用特定类别的图像/媒体的所有页面。
使用 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 中获取的相关图像。
我可能需要执行两个查询,首先获取图像,然后请求有关每个页面的信息,但我希望在一次调用中完成所有查询。
明白你的用例("我们的集合"?),所以我不知道你为什么要直接使用 API,但如果你想在类别中递归,你会做很多轮子重塑。
大多数人使用MediaWiki的创建者Magnus Manske制作的工具:在这种情况下,它是迷人的。具有 3 个递归级别的示例(找到 186k 个图像,114k 个用法): https://tools.wmflabs.org/glamtools/glamorous.php?doit=1&category=Automobiles&use_globalusage=1&depth=3
结果也可以以XML格式下载,因此机器可读。
假设你不需要递归到子类别中,你可以只使用带有generator=categorymembers
的prop=globalusage
查询,例如:
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/Mu00e4rz",
"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-Ruu00dfwurm",
"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...
请注意,您很可能必须处理查询延续,因为结果可能很容易超过MediaWiki在单个请求中返回的结果。 有关处理这些内容的更多信息,请参阅链接页面(或仅使用为您处理这些问题的 MW API 客户端)。