Использование 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. Сделал это ответом сообщества вики, так как я понял, что на этот вопрос уже задавали и отвечали раньше.