访问对象对象内的数组元素

时间:2014-11-23 14:25:06

标签: php arrays json object wikipedia-api

我正在尝试访问使用以下代码执行搜索时返回的Infobox公司部分中的名称和徽标等信息。我使用了谷歌的一个例子。 如果删除了exit命令,可以看到我可以访问[0]对象中的contentformat和contentmodel但是我很难访问该对象中[*]数组中的任何内容。原谅这个愚蠢的问题,因为我确定我错过了一些东西,但是我们非常感谢你们的帮助。

<html>
<head>
</head>
<body>

<html>
<body>
<h2>Search</h2>
<form method="post">
Search: <input type="text" name="q" value="google" />
<input type="submit" value="Submit">
</form>

<?php
if (isset($_POST['q'])) {
$search = $_POST['q'];


$url_2 = "http://en.wikipedia.org/w/api.php?
action=query&prop=revisions&rvprop=content&format=json&titles=$search&rvsection=0&continue=";
$res_2 = file_get_contents($url_2);
$data_2 = json_decode($res_2);

echo "<pre>";
print_r($data_2);
echo "</pre>";
exit;
?>

<h2>Search results for '<?php echo $search; ?>'</h2>
<ol>
<?php foreach ($data_2->query->pages as $r): 

?>

<li>

<?php echo $r->revisions[0]->contentformat;  ?>

</li>
<?php endforeach; ?>
</ol>

<?php 
}
?>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

解决方案:不要使用维基百科作为数据库,而是使用自己的数据库Wikidata.org。

文档:http://www.wikidata.org/w/api.php?action=help&modules=wbgetclaims

示例(Google徽标):http://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q95&property=P154&format=json&gt;

{"claims":{"P154":[{"id":"Q95$49959725-4b36-6a53-b0ef-79bc19a2474c","mainsnak":{"snaktype":"value","property":"P154","datatype":"commonsMedia","datavalue":{"value":"Logo Google 2013 Official.svg","type":"string"}},...}}}

如果您需要找到实体ID并且您知道一种维基百科语言中的文章名称,pywikibot can help:它将类似于

page = pywikibot.Page(site, 'Douglas Adams')

你可以从那里继续。