2013-06-18 3 views
5

Я хотел бы иметь возможность извлечь название и описание из Википедии с помощью json. Итак ... wikipedia не моя проблема, я новичок в json и хотел бы знать, как ее использовать. Теперь я знаю, что есть сотни учебников, но я работал в течение нескольких часов, и он просто ничего не отображается, Heres моего кода:Извлечение данных из Википедии API

<?php 
    $url="http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url"; 

    $json = file_get_contents($url); 
    $data = json_decode($json, TRUE); 

    $pageid = $data->query->pageids; 
    echo $data->query->pages->$pageid->title; 
?> 

Просто так проще нажать:

Я знаю, что я, вероятно, только что сделал маленькую вещь неправильно, но его действительно давал мне покой, и код ... Я привык к использованию XML, и я очень много просто сделал переключатель, так что вы можете объяснить это немного для меня и для будущих посетителей, потому что я очень confu sed ... Все, что вам нужно, что я не сказал, просто прокомментируйте это, я уверен, что смогу его получить, и спасибо, заранее!

+0

Измените 'jsonfm' на 'json'. – halfer

+2

Это только jsonfm в представлении представления html, а не в коде. –

+0

Ах да, ты прав @ Джоэль. Я изменю это, спасибо. – halfer

ответ

7

$pageid возвращал массив с одним элементом. Если вы хотите, чтобы получить кулак один, вы должны сделать это:

$pageid = $data->query->pageids[0]; 

Вы были, вероятно, получить это предупреждение:

Array to string conversion 

Полный код:

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url&indexpageids'; 

    $json = file_get_contents($url); 
    $data = json_decode($json); 

    $pageid = $data->query->pageids[0]; 
    echo $data->query->pages->$pageid->title; 
+0

Спасибо .... Значит, [0] означает, что именно? – Connor

+1

Это индекс элемента, который вы хотите извлечь из массива. Если массив имеет 3 элемента '$ demo = array ('hi', 'my', 'friend')', тогда '$ demo [0]' будет 'hi',' $ demo [2] 'будет' друга и т. д. В вашем случае вы не хотите извлекать весь массив, кроме единственного элемента, содержащегося в нем. Вот почему вы используете '[0]'. – Alvaro

+0

спасибо, что пояснил, поэтому он в основном получает их по заказу ... хорошо спасибо – Connor

5

Я бы сделать это так. Он поддерживает наличие нескольких страниц в одном вызове.

$url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url"; 

$json = file_get_contents($url); 
$data = json_decode($json, TRUE); 

$titles = array(); 
foreach ($data['query']['pages'] as $page) { 
    $titles[] = $page['title']; 
} 
var_dump($titles); 
/* var_dump returns 
array(1) { 
    [0]=> 
    string(6) "Google" 
} 
*/ 
+0

Helpfull, но мне это нужно только один раз, +1 для усилий – Connor

+1

Нет пота, рад, что у вас работает решение Стива. :) –

+0

+1 за хороший спорт;) – Connor

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