如何使用Mediawiki API获取不在另一个类别中的所有图像?

时间:2014-12-11 22:38:14

标签: api mediawiki wikimedia-commons

我是API的新手,如果问题很愚蠢,那就很抱歉。

我想将所有图像放在Commons的一个类别中,让我们说X,但排除那些也在另一个(Y)中的图像。我不明白我是否真的可以这样做。

https://commons.wikimedia.org/w/api.php?action=query&list=categorymembers&cmtype=file&cmtitle=Category:X

会得到所有这些,如何排除一些?

而且我想在结果中对图像进行描述,而不仅仅是文件的名称,是否可能?

2 个答案:

答案 0 :(得分:2)

默认情况下,MediaWiki没有内置支持类别构建和查询交叉点。要完成此任务,需要extensions或外部工具或多个API查询和结果处理。

CirrusSearch API

在Wikimedia Commons上,与整个维基媒体维基群岛一样,CirrusSearch支持过滤搜索,包括搜索类别交叉点,也是available through APIaction=query&list=search&srsearch=incategory:A+-incategory:B,这是{{1} } minus Category:A)。

子分类

我可以推荐的工具之一(因为它是专用的高性能解决方案并且实际运行)是由Daniel Schwen开发的fastcci;特别是对于Wikimedia Commons,已经有一个数据库维护和一个web服务运行但是可以为任何wiki设置它,前提是该工具集有一个主机可以运行并具有数据库访问权。

FastCCI in action

Query

考虑以下查询网址:

https://fastcci.wmflabs.org/?c1=3302993&c2=15516712&d1=0&d2=0&s=200&a=not&t=js

  • https://fastcci.wmflabs.org/ - 主持维基媒体共享的fastcci在
  • 上运行
  • c1 - 类别1的ID
  • c2 - 类别2的ID
  • d1 - 要搜索的类别1的深度(默认情况下fastcci会考虑子类别)
  • d2 - 要搜索的类别2的深度(默认情况下fastcci会考虑子类别)
  • s - 要返回的数字或结果
  • o - Offset
  • a - 合作
  • t - JSONP响应的连接类型(Category:B;否则假定用作websocket)

Response

t=js

fastcciCallback( [ 'RESULT 27572680,0,0|1675043,0,0|27577015,0,0|27577043,0,0|27577106,0,0|27576896,0,0|27576790,0,0|23481936,0,0|17560964,0,0|11009066,0,0', 'OUTOF 10', 'DBAGE 378310', 'DONE'] ); 后跟RESULT个分隔列表,其中最多包含|形式的50个整数三元组。每个三元组代表一个图像或类别

资源

关于pageIDs的说明

答案 1 :(得分:1)

AFAIK,没有办法直接使用API​​。但是,假设两个类别相当小,您可以从它们中获取所有图像,然后计算代码中的补码。

要检索说明,您可以使用prop=imageinfo&iiprop=extmetadata&iiextmetadatafilter=ImageDescription

在示例查询的上下文中,它看起来像这样:

https://commons.wikimedia.org/w/api.php?action=query&generator=categorymembers&gcmtype=file&gcmtitle=Category:X&prop=imageinfo&iiprop=extmetadata&iiextmetadatafilter=ImageDescription

相关问题