Подключение PHP к API MediaWiki и извлечение данных

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

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

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

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

EDIT: URL-адрес: $url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page'; , Я просто хочу прочитать весь контент файла в строке, чтобы использовать его.

Solutions Collecting From Web of "Подключение PHP к API MediaWiki и извлечение данных"

Подключение к этому 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); 

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

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

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