Я пытаюсь получить доступ к такой информации, как имя и логотип, в разделе компании Infobox, возвращаемом при выполнении поиска с использованием приведенного ниже кода. Я использовал пример Google.
Если команда выхода удалена, можно увидеть, что я могу получить доступ к contentformat и contentmodel в объекте [0], однако я изо всех сил пытаюсь получить доступ к чему-либо в массиве [*] внутри этого объекта. Простите за глупый вопрос, так как я уверен, что что-то упустил, но любая помощь очень ценится.
<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>
Решение: не используйте Wikipedia в качестве базы данных, вместо этого используйте Wikidata.org, который является его собственной базой данных.
Docs: http://www.wikidata.org/w/api.php?action=help&Модули = wbgetclaims
Пример (логотип Google): http://www.wikidata.org/w/api.php?action=wbgetclaims&объект = Q95&свойство = P154&Формат = JSON >
{"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"}},...}}}
Если вам нужно найти идентификатор объекта и вы знаете название статьи на одном языке Википедии, Pywikibot может помочь: это будет что-то вроде
page = pywikibot.Page(site, 'Douglas Adams')
и вы можете продолжить оттуда.
Других решений пока нет …