2013-06-18 19 views
5

Chciałbym móc wyodrębnić tytuł i opis z Wikipedii za pomocą json. Więc ... wikipedia to nie mój problem, jestem nowy w jsonie i chciałbym wiedzieć, jak go używać. Teraz wiem, że istnieją setki tutoriali, ale pracuję na godziny i po prostu nie wyświetla niczego, herezje mój kod:Wyodrębnianie danych z Wikipedii 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; 
?> 

Wystarczy więc łatwiej kliknij:

Wiem, że prawdopodobnie zrobiłem coś bardzo złego, ale to naprawdę mnie wkurza, a kod ... Jestem przyzwyczajony do używania xml, a ja właśnie zrobiłem przełącznik, więc możesz mi to wyjaśnić dla mnie i dla przyszłych odwiedzających, ponieważ jestem bardzo confu sed ... Cokolwiek potrzebujesz, czego nie powiedziałem, po prostu skomentuj, jestem pewien, że mogę to zdobyć, i dzięki, z góry!

+0

Zmień "jsonfm" na "json". – halfer

+2

To tylko jsonfm w łączu reprezentacji html, a nie w kodzie. –

+0

Ach tak, masz rację. Joel. Zmienię to, dzięki. – halfer

Odpowiedz

7

$pageid zwrócił tablicę z jednym elementem. Jeśli tylko chcesz dostać pięścią jednego, należy to zrobić:

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

Miałeś zapewne coraz to ostrzeżenie:

Array to string conversion 

Pełny kod:

$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

Dzięki .... Więc [0] oznacza co dokładnie? – Connor

+1

Jest to indeks elementu, który chcesz pobrać z tablicy. Jeśli tablica ma 3 elementy '$ demo = array ('hi', 'my', 'friend')', to '$ demo [0]' będzie 'hi',' $ demo [2] 'będzie' friend' itp. W twoim przypadku nie chcesz odzyskać całej tablicy, ale jedyny element w niej zawarty. Dlatego używasz '[0]'. – Alvaro

+0

dzięki za wyjaśnienie, więc w zasadzie dostaje je na zamówienie ... ok dzięki – Connor

5

ja zrobiłbym tak to wygląda. Obsługuje wiele stron w tym samym wywołaniu.

$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

Pomocna, ale potrzebuję tego tylko raz, +1 za wysiłek – Connor

+1

Bez potu, cieszę się, że rozwiązanie Steve'a działa. :) –

+0

+1 za bycie dobrym sportem;) – Connor

Powiązane problemy