2016-05-30 4 views
0

Я хотел бы получить дерево категорий в формате JSON с использованием API MediaWiki.API MediaWiki: получить дерево категорий

Например, here is a category named "Story" in the Game of thrones wiki.

В этой категории есть несколько подкатегорий, таких как Characters, и этот последний также имеет подкатегории, такие как Major Characters.

Возможно ли иметь дерево категории из всех категорий wiki?

Все категории are listed here, но:

  • это, кажется, написана человеком (подтверждается);
  • это html-страница, и я хотел бы получить результат JSON, чтобы упростить синтаксический анализ и пропускную способность.

ответ

0

У меня есть решение (с помощью нескольких запросов).

От человека странице (http://your_wiki.fr/api.php):

  • list=allcategories возвращает все категории вики;
  • prop=categoryinfo возвращает информацию о категории, включая количество подкатегорий.

Сначала нам нужно выбрать категорию «корень», где начинается дерево. Я в моем случае, это «История».

Затем с помощью генератора, мы можем иметь, для данной категории:

  • все свои подкатегории,
  • количество подкатегорий в каждой подкатегории.

Здесь с игрой престолов викия:

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> 

So subcats> 0? ОК, так что позволяет задать для символов подкатегорий:

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

и т.д.

Смежные вопросы