Wikipedia API - захватить таблицу «Фоновая информация»? - PullRequest
3 голосов
/ 06 мая 2011

Предоставляет ли MediaWiki способ возврата информации, представленной в таблице «Справочная информация»?(обычно справа от страницы статьи) Например, я хотел бы получить Origin из Radiohead:

http://en.wikipedia.org/wiki/Radiohead

Или мне нужно проанализировать HTML-страницу?

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Вы можете использовать свойство revisions вместе с параметром rvgeneratexml, чтобы сгенерировать дерево разбора для статьи.Затем вы можете применить XPath или пройти его и найти нужную информацию.

Вот пример кода:

$page = 'Radiohead';
$api_call_url = 'http://en.wikipedia.org/w/api.php?action=query&titles=' .
    urlencode( $page ) . '&prop=revisions&rvprop=content&rvgeneratexml=1&format=json';

Вы должны идентифицировать себя с API, подробнее см. Meta Wiki .

$user_agent = 'Your name <your email>';

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => $user_agent,
    CURLOPT_URL => $api_call_url,
) );
$response = json_decode( curl_exec( $curl ), true );
curl_close( $curl );

foreach( $response['query']['pages'] as $page ) {
    $parsetree = simplexml_load_string( $page['revisions'][0]['parsetree'] );

Здесь мы используем XPath, чтобы найти параметр Infobox musical artist Origin и его значение.См. спецификацию XPath для синтаксиса и тому подобное.Вы также можете пройтись по дереву и вручную искать узлы.Не стесняйтесь исследовать дерево разбора, чтобы лучше понять его.

    $infobox_origin = $parsetree->xpath( '//template[contains(string(title),' .
        '"Infobox musical artist")]/part[contains(string(name),"Origin")]/value' );

    echo trim( strval( $infobox_origin[0] ) );
}
1 голос
/ 06 мая 2011

Это крутая кривая обучения, но DBpedia делает то, что вы хотите.

Упомянутая вами "Таблица справочной информации" называется "Инфобокс" на языке Википедиии DBpedia позволяет очень мощные запросы к ним.К сожалению, потому что он мощный, его нелегко освоить, и я почти забыл, что узнал об этом год или два назад.Я вставлю запрос сюда, хотя, если мне удастся узнать его снова (-:

А пока, , вот идея DBpedia о том, как его использовать.

Этот предыдущий вопрос SO поможет: Получение категорий информационного блока DBPedia

ОБНОВЛЕНИЕ

ОК, запрос SPARQL:

SELECT ?org
WHERE {
    <http://dbpedia.org/resource/Radiohead> dbpprop:origin ?org
}

Вот URL-адрес, где вы можете увидеть, как он работает, и поиграть с ним.

А вот вывод на этой странице: (вы можете получить вывод в различныхформаты тоже)

Результаты SPARQL: org "Абингдон, Оксфордшир, Англия" @ en

1 голос
/ 06 мая 2011

MediaWiki, установленный в Википедии, не позволяет получить эту информацию (существуют расширения, такие как Semantic MediaWiki , которые предназначены для такого рода вещей, но не установлены в Википедии). Вы можете анализировать выходной HTML-код или анализировать вики-текст страницы, или в некоторых случаях (например, год рождения / смерти) вы можете просматривать категории страницы через API.

...