MediaWiki API:获取类别树

时间:2016-05-30 16:20:40

标签: mediawiki-api

我想使用MediaWiki API获取JSON格式的类别树。

例如,here is a category named "Story" in the Game of thrones wiki

此类别有几个子类别,例如Characters,最后还有子类别,例如Major Characters

是否可以拥有维基所有类别的类别树?

所有类别are listed here,但是:

  • 这似乎是由人写的(待确认);
  • 这是一个html页面,我想要一个JSON结果,以简化解析和带宽。

1 个答案:

答案 0 :(得分:0)

好吧,我有解决方案(通过使用多个查询)。

从手册页(http://your_wiki.fr/api.php):

  • list=allcategories返回维基的所有类别;
  • prop=categoryinfo返回有关类别的信息,包括子类别的数量。

我们首先需要选择树开始的“根”类别。我的情况是,它是“故事”。

然后,通过使用生成器,我们可以为给定的类别:

  • 所有子类别,
  • 每个子类别的子类别数。

这里有权力的游戏wikia:

http://gameofthrones.wikia.com/api.php?action=query&generator=categorymembers&gcmtitle=Category:Story&gcmtype=subcat&gcmlimit=500&prop=categoryinfo

好吧,现在我们只需要编写一个函数来返回一个类别的子类别,递归地直到没有子类别:

上面查询的第一个结果是:

<page pageid="2545" ns="14" title="Category:Characters" touched="2016-06-02T14:20:11Z" lastrevid="92826" counter="" length="67">
    <categoryinfo size="953" pages="935" files="2" subcats="16" />
</page>

所以子序列&gt; 0?好吧,让我们问一下Characters子类别:

http://gameofthrones.wikia.com/api.php?action=query&generator=categorymembers&gcmtitle=Category:Characters&gcmtype=subcat&gcmlimit=500&prop=categoryinfo|info