Как получить результаты из Википедии API с PHP? - PullRequest
2 голосов
/ 22 января 2012

Я, вероятно, не должен использовать 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 Запрещено

Ответы [ 4 ]

13 голосов
/ 22 января 2012

Проблема, с которой вы здесь сталкиваетесь, связана с политикой User-Agent MW API - вы должны предоставить заголовок 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);
1 голос
/ 22 января 2012

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

В сценариях должна использоваться информативная строка User-Agent с контактной информацией, или они могут быть заблокированы IP без уведомления.1006 * Это означает, что вы должны предоставить дополнительную информацию о себе при использовании 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 /6523639/kak-poluchit-rezultaty-iz-vikipedii-api-s-php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

echo $result;
?>
1 голос
/ 22 января 2012

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')

Это ранее обсуждалось в стеке потока здесь

Также, некоторые красивые примеры кода здесь

0 голосов
/ 22 января 2012

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

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

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

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

...