You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Wikidata API的gas:service或mediawiki:categoryTree将指定分类属性纳入查询结果?

我来帮你梳理一下怎么搞定这个问题——你在数据转储里能看到的那些分类属性和统计数据,确实可以通过编程方式拿到,只是得用对正确的接口和姿势,下面分几种方法给你拆解:

一、用Wikidata SPARQL整合实时分类数据

Wikidata本身的SPARQL查询默认是基于定期转储的,没法直接拿到实时的页面数/子分类数,但可以通过Wikibase MWAPI服务调用MediaWiki的API来获取这些实时统计,同时还能拿到HiddenCategory属性。

举个例子,下面的SPARQL查询可以获取Wikidata分类条目对应的维基百科分类的页面数、子分类数,以及是否为隐藏分类:

SELECT ?category ?categoryLabel ?pageCount ?subcatCount ?isHidden WHERE {
  # 筛选Wikidata中的分类条目(P31=Q4167836表示“分类”)
  ?category wdt:P31 wd:Q4167836 .
  # 调用MediaWiki API获取分类信息
  SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:endpoint "en.wikipedia.org";
                    wikibase:api "Query";
                    mwapi:action "query";
                    mwapi:titles ?categoryTitle;
                    mwapi:prop "categoryinfo|info".
    # 提取API返回的页面数、子分类数、隐藏标记
    ?pageCount wikibase:apiOutput "query/pages/*/categoryinfo/pages".
    ?subcatCount wikibase:apiOutput "query/pages/*/categoryinfo/subcats".
    ?isHidden wikibase:apiOutput "query/pages/*/info/hidden".
    # 把Wikidata URI解码为分类标题
    ?categoryTitle wikibase:decodeValue ?category.
  }
  # 自动添加分类标签
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} LIMIT 10
二、直接用MediaWiki API获取分类数据

如果不需要和Wikidata条目关联,直接调用MediaWiki的核心API是最直接的方式,你提到的mediawiki:categoryTree和gas:service(Generator API)都能派上用场:

1. 获取分类的基础统计(pages、subcategories、HiddenCategory)

用query模块的prop=categoryinfo+info可以一次性拿到分类的页面数、子分类数,以及是否为隐藏分类:

GET /w/api.php?action=query&titles=Category:Physics&prop=categoryinfo|info&format=json

返回结果里的categoryinfo字段包含pages(页面数)、subcats(子分类数);info字段里的hidden值为true时,说明该分类是隐藏分类(对应mediawiki:HiddenCategory属性)。

2. 用categoryTree服务遍历分类树

如果你需要获取分类的层级结构,同时包含子分类、页面数和隐藏分类标记,可以用categorytree模块:

GET /w/api.php?action=categorytree&format=json&category=Category:Physics&options=hiddencategories,counts&depth=2
  • options=hiddencategories会返回隐藏分类的信息
  • options=counts会显示每个分类下的页面+子分类总数(如果需要分开统计,还是得结合categoryinfo)
  • depth控制遍历的层级深度

3. 用GAS(Generator API)批量统计分类成员

gas:service其实就是MediaWiki的Generator API,适合批量获取分类下的页面/子分类,同时统计数量或检查隐藏属性。比如下面的请求可以获取分类下的所有页面和子分类,同时标记是否为隐藏项:

GET /w/api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&gcmtype=page|subcat&gcmlimit=50&prop=info&inprop=hidden&format=json
  • generator=categorymembers指定批量获取分类成员
  • gcmtype=page|subcat只返回页面和子分类
  • prop=info&inprop=hidden获取每个成员的隐藏状态
三、注意事项
  • 实时数据 vs 转储数据:Wikidata Query Service的默认数据是转储快照,要实时数据必须调用MediaWiki API
  • 权限限制:部分隐藏分类可能需要特定权限才能访问,但公开的隐藏分类(比如系统级的)一般可以正常获取
  • 速率限制:API调用要遵守MediaWiki的速率限制,避免被封禁

内容的提问来源于stack exchange,提问作者Butterfly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:27:44