2013-06-22 3 views
1

Мне нужна помощь. Использование API Mediawiki с командой «Продолжить» или «Запросить-продолжить» для извлечения информации из моих статей в вики. У меня есть большое количество статей в wiki (более 800 в настоящее время), и мне нужно использовать api, чтобы вытащить их в партиях по 50, а затем распечатать разделы.Использование API MediaWiki с помощью команды Продолжить

Мой API вызов работает правильно:

// Stackoverflow заставляет меня использовать действительный URL здесь, это апи на самом деле мой собственный локальный сервер http://en.wikipedia.org/w/api.php?action=query&list=allpages&apfrom=a&apto=z&apnamespace=0&format=xml&aplimit=50 Я запрашивая все страницы, поэтому «apfrom» и «Apto».

Мне просто нужна помощь в обработке кода с PHP и CURL, обращаясь к API и обрабатывая партии по 50 и используя «продолжить», чтобы получить доступ к большему количеству записей, пока я не дойду до конца. До сих пор мой PHP код:

//the CURL commands here work and outputs a data set but only for the first 50 records, so I need to call "continue" to get to the end. 
//My api url is localhost but I'm forced to use a valid URL by Stackoverflow.com 
$url = sprintf('http://en.wikipedia.org/w/api.php?                        
action=query&list=allpages&apfrom=a&apto=z&apnamespace=0&format=xml&aplimit=50'); 
$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'My site'); 
$res = curl_exec($ch); 

$continue = ''; 

while (// I don't know what to set here as true to get the while loop going, maybe continue      = true? maybe set query-continue as true?) 
{ 
    //Maybe I need something other than $res['query-continue]?? 
    if (empty($res['query-continue'])) 
    { 
     exit; 
    } 
    else 
    { 
     $continue = '&apcontinue='.urlencode($res['query-continue']); 
      foreach ($res['query']['allpages'] as $v) 
      { 
       echo $v['title']; 
      } 
    } 
} 

Может кто-то исправить мой код цикла а выше, так что я могу сделать простую печать из названия из каждой вики-статьи в цикле? Я много раз искал в Интернете, но я застрял! Я нашел пример цикла python в http://www.mediawiki.org/wiki/API:Query, но мне нужно сделать это на PHP. И я не уверен, буду ли я называть continue или query-continue.

+0

Если вы хотите запросить все страницы, не устанавливайте 'apfrom' и' apto' вообще. Не все имена страниц должны начинаться с буквы. – svick

+0

Кроме того, почему вы не используете один из [API-библиотек] (http://en.wikipedia.org/wiki/Wikipedia:Creating_a_bot#PHP)? – svick

+0

Я использую библиотеку botclasses.php, но у меня нет функции запроса, которая мне нужна. Некоторые из других библиотек botclass не работают для меня, поэтому я должен написать свою собственную функцию с продолжением. – Peter

ответ

1

Как сказал svick, используйте client library, который обрабатывает продолжение для вас.

Механизм продолжения запроса неоднократно менялся в MediaWiki, вы не хотите его понимать или даже меньше полагаться на него.

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