Использование Wikipedia API с отдыхающими клиентами

Я пытаюсь получить страницы Википедии (из определенной категории) с помощью MediaWiki. Для этого я следую этому уроку Листинг 3. Листинг страниц в категории. Мой вопрос: как получить страницы Википедии без использования Zend Framework? И есть ли остальные клиенты на базе php без необходимости установки? Потому что Zend требует сначала установить свой пакет и некоторые конфигурации... и я не хочу делать все это.

После поисков в Google и некоторых исследований я нашел инструмент под названием cURL, использование cURL с PHP также может создать службу отдыха. Я действительно новичок в реализации остальных сервисов, но уже пытался реализовать что-то в php:

<?php
    header('Content-type: application/xml; charset=utf-8');

    function curl($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
    $wiki = "http://de.wikipedia.org/w/api.php?action=query&list=allcategories&acprop=size&acprefix=haut&format=xml";
    $result = curl($wiki);
    var_dump($result);
?>

Но получил ошибки в результате. Может ли кто-нибудь помочь с этим?

ОБНОВИТЬ:

This page contains the following errors:
error on line 1 at column 1: Document is empty
Below is a rendering of the page up to the first error.

1 ответ

Извините, что так долго отвечал, но лучше поздно, чем никогда...

Когда я запускаю ваш код в командной строке, я получаю вывод:

string(120) "Scripts should use an informative User-Agent string with contact information, or they may be IP-blocked without notice.
"

Так что, похоже, проблема в том, что вы сталкиваетесь с политикой User-Agent бота Викимедиа, не говоря cURL об отправке пользовательского заголовка User-Agent. Чтобы это исправить, следуйте советам, данным в нижней части этой страницы, и добавьте строки, подобные приведенным ниже, в свой сценарий (вместе с другими curl_setopt() звонки):

$agent = 'ProgramName/1.0 (http://example.com/program; your_email@example.com)';
curl_setopt($ch, CURLOPT_USERAGENT, $agent);

Ps. Вы, вероятно, также не хотите устанавливать application/xml тип содержимого, если вы не уверены, что содержимое действительно является допустимым XML. В частности, на выходе var_dump() не будет действительным XML, даже если ввод.

Для тестирования и разработки я бы предложил запустить PHP из командной строки или использовать text/plain Тип содержимого. Или, если хотите, используйте text/html и закодировать ваш вывод с htmlspecialchars(),


Ps. Сделал это ответом сообщества вики, так как я понял, что на этот вопрос уже задавали и отвечали раньше.

Другие вопросы по тегам