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

问题描述 投票:0回答:2

我想获取维基共享资源中某个类别中的所有图像。假设类别 X,但排除那些也属于类别 Y 的内容。我不明白我是否真的可以做到这一点。

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

这将获得所有这些,但如何排除一些?

此外,我希望结果中包含图像的描述,而不仅仅是文件名,这可能吗?

api mediawiki wikimedia-commons
2个回答
3
投票

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

Cirrus 搜索 API

在维基共享资源上,就像在整个维基媒体维基农场一样,CirrusSearch支持过滤搜索,包括搜索类别交叉点,并且也可以通过API使用(

action=query&list=search&srsearch=incategory:A+-incategory:B
,这是
Category:A
减去
Category:B
)。

快速CCI

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

FastCCI in action

查询

考虑以下查询 URL:

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 - 偏移
  • a - 连词
  • t - 连接类型(
    t=js
    用于 JSONP 响应;否则假设用作 websocket)

回复

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 个形式为
pageId,depth,tag
的整数三元组。每个三元组代表一个图像或类别

资源

  • 示例客户端实现 - 要查看其实际效果,只需访问任何类别并在任何类别页面中
    中的
    Good pictures按钮旁边。
      示例是
    • FilesOf('Category:Saaleck')
       - 
      FilesOf('Category:Rapeseed fields in Saxony-Anhalt')
      
      
  • 服务器应用程序
  • YouTube 上的演示
  • 幻灯片
关于 pageID 的注释


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

要检索描述,您可以使用

prop=imageinfo&iiprop=extmetadata&iiextmetadatafilter=ImageDescription



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

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

© www.soinside.com 2019 - 2024. All rights reserved.