Вы можете использовать свойство 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] ) );
}