我对 API 完全陌生,如果这个问题很愚蠢,我很抱歉。
我想在 Commons 中的一个类别中获取所有图像,比如说 X,但排除那些也在另一个 (Y) 中的图像。我不明白我是否真的可以做到这一点。
将得到所有这些,如何排除一些?
此外,我希望在结果中包含图像的描述,而不仅仅是文件的名称,这可能吗?
我对 API 完全陌生,如果这个问题很愚蠢,我很抱歉。
我想在 Commons 中的一个类别中获取所有图像,比如说 X,但排除那些也在另一个 (Y) 中的图像。我不明白我是否真的可以做到这一点。
将得到所有这些,如何排除一些?
此外,我希望在结果中包含图像的描述,而不仅仅是文件的名称,这可能吗?
MediaWiki - 默认情况下 - 没有对类别构建和查询交叉点的内置支持。要完成此任务,需要扩展或外部工具或多个 API 查询和结果处理。
在 Wikimedia Commons 上,就像在整个 Wikimedia Wiki 农场上一样,CirrusSearch支持过滤搜索,包括搜索类别交叉点,并且还可以通过 API(action=query&list=search&srsearch=incategory:A+-incategory:B
,这是Category:A
减号Category:B
)获得。
我可以推荐的工具之一(因为它是专用的高性能解决方案并且实际运行)是由 Daniel Schwen 开发的 fastcci;特别是对于 Wikimedia Commons,已经维护了一个数据库并运行了一个 Web 服务,但可以为任何 wiki 设置它,前提是该工具集有一个可以运行的主机并具有数据库访问权限。
考虑以下查询 URL:
https://fastcci.wmflabs.org/?c1=3302993&c2=15516712&d1=0&d2=0&s=200&a=not&t=js
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')
GET
/w/api.php?action=query&pageids=page_IDs_separated_by_pipe
GET
/w/api.php?action=query&titles=Titles_separated_by_pipe
AFAIK,没有办法直接使用 API 来获得它。但是,假设这两个类别都相当小,您可以从这两个类别中获取所有图像,然后在代码中计算补码。
要检索描述,您可以使用prop=imageinfo&iiprop=extmetadata&iiextmetadatafilter=ImageDescription
.
在您的示例查询的上下文中,它看起来像这样: