2013-06-18 98 views
5

我希望能夠使用json從維基百科中提取標題和描述。所以...維基百科不是我的問題,我是json的新手,想知道如何使用它。現在我知道有數以百計的教程,但我已經工作了好幾個小時,它只是不顯示任何內容,我的繼承人代碼:從維基百科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,我也非常簡單,只是做了開關,所以你可以爲我和未來的訪客解釋一下,因爲我非常困惑sed ...任何你需要的,我沒有說過,只是評論它,我確定我可以得到它,並提前感謝!

+0

將'jsonfm'更改爲'json'。 – halfer

+2

它只是html表示鏈接中的jsonfm,而不是代碼中的。 –

+0

啊,是的,你是對的@Joel。我會改變這一點,謝謝。 – 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

有用,但我只需要它一次,+1爲努力 – Connor

+1

沒有汗水,很高興你有Steve的解決方案工作。 :) –

+0

+1是一項很好的運動;) – Connor