2013-09-25 5 views
1

Я использую MediaWiki api, чтобы получить в Википедии сериализованный PHP-запрос информации о конкретной стране.Wikipedia PHP - обрабатывать результаты

http://en.wikipedia.org/w/api.php?action=query&titles=Belgium&prop=revisions&rvprop=content&rvsection=0&format=php 

Мой вопрос

Как получить конкретное поле из этого массива? Как f.e .:

  • Capital
  • переписи населения
  • Карта титрах (регион, официальные языки, ...)

Я не знаком с этим выходом ... Спасибо!

ответ

0

Это похоже на сериализованный PHP, и вы можете unserialize() это как и другие. Я предложил бы использовать формат JSON вместо:

http://en.wikipedia.org/w/api.php?action=query&titles=Belgium&prop=revisions&rvprop=content&rvsection=0&format= JSON

Вы можете использовать json_decode(), чтобы получить ответ разобрать JSON и превратить его в ассоциативный массив:

$json = file_get_contents($file); 
$decoded = json_decode($json, TRUE); 

foreach ($decoded as $key => $value) { 
    // get the details you need 
} 
+0

Я думаю, используя десериализируются вместе с форматом «PHP» будет Быстрее. Нет необходимости в json здесь – hek2mgl

1

Api не предназначен для доступа к таким свойствам, как capital для belgium или что-то в этом роде. Вы просто получите wikipage как исходный код wiki вместе с дополнительной информацией, такой как название страницы. Например, страница wiki может содержать информацию о языке программирования, цвете, автомобиле или стране в вашем примере, это просто отсутствие специальных полей данных.

Формат ответа - это сериализованные данные php. Используйте unserialize, чтобы разобрать его в массив, но не следует ожидать, чтобы получить структурированную информацию о belgium:

$response = file_get_contents('http://en.wikipedia.org/w/api.php?action=query&titles=Belgium&prop=revisions&rvprop=content&rvsection=0&format=php'); 
$data = unserialize($response); 
var_dump($data); 
+0

Хорошо спасибо, все ответы были мне понятны. Этот вопрос хорошо отвечает на мой вопрос! Я буду использовать функции php, чтобы взорвать это содержимое в используемые массивы. – user1141796

+0

Хорошо, счастливые скребки :) – hek2mgl

0

Используйте эту функцию unserialize():

$array = file_get_contents('http://en.wikipedia.org/w/api.php?action=query&titles=Belgium&prop=revisions&rvprop=content&rvsection=0&format=json'); 
$array = unserialize($array); 
print_r($array); 
+0

Да, это было ясно для меня, но контент, который начинается с | leader_title1 = [[Монархия Бельгии | Король]] | leader_name1 = [[Philippe of Belgium | King Philippe]] | leader_title2 = [[Премьер-министр Бельгии | Премьер-министр]] | leader_name2 = [[Elio Di Rupo]] | законодательный орган = [[Федеральный парламент Бельгии]] | top_house = [[Сенат (Бельгия) | Сенат]] – user1141796

Смежные вопросы