Я пытаюсь захватить первый экземпляр определенных элементов из объекта. У меня есть объект $ doc, и я хотел бы получить следующие значения.
идентификатор, URL, псевдоним, описание и метка, то есть, в частности:
Я добился некоторого прогресса в получении строки $ jsonArr, однако я не уверен, что это лучший способ, и если да, то я все равно не уверен, как развиваться.
Посоветуйте, пожалуйста, как лучше всего их получить. Пожалуйста, смотрите мой код ниже:
<HTML>
<body>
<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'];
$errors = libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile("https://www.wikidata.org/w/api.php?
action=wbsearchentities&search=$search&format=json&language=en");
libxml_clear_errors();
libxml_use_internal_errors($errors);
var_dump($doc);
echo "<p>";
$jsonArr = $doc->documentElement->nodeValue;
$jsonArr = (string)$jsonArr;
echo $jsonArr;
}
?>
</body>
</HTML>
Поскольку ответом на ваш запрос API является JSON, а не HTML или XML, наиболее целесообразно использовать библиотеку cURL или Stream для выполнения HTTP-запроса. Вы даже можете использовать что-то примитивное, как file_get_contents
.
Например, используя cURL:
// Make the request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.wikidata.org/w/api.php?action=wbsearchentities&search=google&format=json&language=en");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// Decode the string into an appropriate PHP type
$contents = json_decode($output);
// Navigate the object
$contents->search[0]->id; // "Q95"$contents->search[0]->url; // "//www.wikidata.org/wiki/Q95"$contents->search[0]->aliases[0]; // "Google Inc."
Ты можешь использовать var_dump
осмотреть $contents
и пройти его, как любой объект PHP.
Других решений пока нет …