Как получить результаты из API Википедии с PHP?

Я, вероятно, не должен использовать file_get_contents () Что мне следует использовать? Я бы хотел, чтобы это было просто.

Предупреждение: file_get_contents (http://en.wikipedia.org/w/api.php?action=query&titles=Your_Highness&prop=revisions&rvprop=content&rvsection=0): не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.0 403 Запрещено

Solutions Collecting From Web of "Как получить результаты из API Википедии с PHP?"

Проблема, с которой вы столкнулись, связана с политикой User-Agent API MW – вы должны предоставить заголовок User-Agent , и этот заголовок должен предоставить некоторые способы связаться с вами.

Вы можете сделать это с помощью file_get_contents() с контекстом потока :

 $opts = array('http' => array( 'user_agent' => 'MyBot/1.0 (http://www.mysite.com/)' ) ); $context = stream_context_create($opts); $url = 'http://en.wikipedia.org/w/api.php?action=query&titles=Your_Highness&prop=revisions&rvprop=content&rvsection=0'; var_dump(file_get_contents($url, FALSE, $context)); 

Сказав это, можно считать более «стандартным» использование cURL , и это, безусловно, даст вам больше контроля:

 $url = 'http://en.wikipedia.org/w/api.php?action=query&titles=Your_Highness&prop=revisions&rvprop=content&rvsection=0'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, 'MyBot/1.0 (http://www.mysite.com/)'); $result = curl_exec($ch); if (!$result) { exit('cURL Error: '.curl_error($ch)); } var_dump($result); 

file_get_contents Должен работать.

 file_get_contents('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=timestamp|user|comment|content') 

Ранее это обсуждалось в stackoverflow здесь

Кроме того, некоторые симпатичные примеры кода здесь

Сообщение об ошибке, которое вы действительно получаете, является

Сценарии должны использовать информативную строку User-Agent с контактной информацией или они могут быть заблокированы IP без уведомления.

Это означает, что вы должны предоставлять дополнительные сведения о себе при использовании API. Ваше использование file_get_contents отправляет необходимый User-Agent.

Вот рабочий пример в curl, который идентифицирует себя как тест для этого вопроса:

 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://en.wikipedia.org/w/api.php?action=query&titles=Your_Highness&prop=revisions&rvprop=content&rvsection=0&format=xml"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, "Testing for http://stackoverflow.com/questions/8956331/how-to-get-results-from-the-wikipedia-api-with-php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); echo $result; ?> 

Они сами говорят в своей документации по API:

Используйте любой язык программирования, чтобы сделать HTTP-запрос GET для этого URL-адреса

Вы должны получить URL-адрес правильно, следующие работы для меня: http://en.wikipedia.org/w/api.php?format=json&action=query&titles=Main%20Page&prop=revisions&rvprop=content

вы не указываете формат вывода, насколько я могу заметить прямо сейчас!