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;
$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, если у вас есть доступ к редактированию.