PHP подключается к MediaWiki API и получает данные

Я заметил, что был вопрос, похожий на мой, только с текстом ссылки на C#:. Позвольте мне объяснить: я очень плохо знаком со всей реализацией веб-сервисов и поэтому испытываю некоторые трудности с пониманием (особенно из-за расплывчатого руководства по MediaWiki API).

Я хочу получить всю страницу в виде строки в PHP (XML-файл), а затем обработать ее в PHP (я уверен, что существуют и другие более сложные способы анализа XML-файлов, но неважно): Википедия главной страницы.

Я пытался делать $fp = fopen($url,'r');, Это выводит: HTTP request failed! HTTP/1.0 400 Bad Request, API не требует ключа для подключения к нему.

Можете ли вы подробно описать, как подключиться к API и получить страницу в виде строки?

РЕДАКТИРОВАТЬ: URL-адрес $url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page';, Я просто хочу прочитать все содержимое файла в строку, чтобы использовать его.

3 ответа

Решение

Подключиться к этому API так же просто, как получить файл,

Еореп

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$fp = fopen($url, 'r');
while (!feof($fp)) {
    $c .= fread($fp, 8192);
}
echo $c;

file_get_contents

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$c = file_get_contents($url);
echo $c;

Вышеуказанные два могут быть использованы только если ваш сервер имеет fopen обертки включены.

В противном случае, если на вашем сервере установлен cURL, вы можете использовать это,

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$c = curl_exec($ch);
echo $c;

Вероятно, вам нужно urlencode параметров, которые вы передаете в строке запроса; здесь, по крайней мере, "Main Page"требуется кодировка - без этой кодировки я тоже получаю ошибку 400.

Если вы попробуете это, он должен работать лучше (обратите внимание, место заменяется%20 ):

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$str = file_get_contents($url);
var_dump($str);

С этим я получаю содержание страницы.


Решение заключается в использованииurlencodeтак что вам не нужно кодировать себя:

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=' . urlencode('Main Page');
$str = file_get_contents($url);
var_dump($str);

Согласно документации MediaWiki API, если вы не укажете User-Agent в своем запросе PHP, WikiMedia откажется от соединения с кодом ответа 4xx HTTP:

https://www.mediawiki.org/wiki/API:Main_page

Вы можете попытаться обновить свой код, чтобы добавить этот заголовок запроса, или изменить настройки по умолчанию в php.ini, если у вас есть доступ к редактированию.

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