【问题标题】:How to get with Mediawiki API all images in a category which are not in another one?如何使用 Mediawiki API 获取一个类别中不属于另一个类别的所有图像?
【发布时间】:2015-02-10 13:55:02
【问题描述】:

我对 API 完全陌生,如果问题很愚蠢,请见谅。

我想获取 Commons 类别中的所有图像,比如说 X,但排除那些也在另一个类别 (Y) 中的图像。我不知道我是否真的可以这样做。

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

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

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

【问题讨论】:

    标签: api mediawiki wikimedia-commons


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      CirrusSearch API

      在维基共享资源上,就像在整个维基媒体维基农场一样,CirrusSearch 支持过滤搜索,包括搜索类别交叉点,也是 available through APIaction=query&list=search&srsearch=incategory:A+-incategory:B,这是 Category:A 减去 Category:B)。

      FastCCI

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

      Query

      考虑以下查询 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)

      Response

      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。每个三元组代表一个图像或类别

      资源

      关于 pageID 的说明

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        • 2019-06-07
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多