我试图从对象中捕获特定元素的第一个实例。我有一个对象$ doc,并希望获得以下值。
id,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>
答案 0 :(得分:0)
由于对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对象一样遍历它。