2013-06-18 168 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