捕获文本元素作为变量

时间:2014-12-16 00:55:37

标签: php json wikidata

我试图从对象中捕获特定元素的第一个实例。我有一个对象$ doc,并希望获得以下值。

id,url,别名,描述和标签,具体如下:

  • variable1 - Q95,
  • variable2 - //www.wikidata.org/wiki/Q95,
  • variable3 - Google.Inc,
  • varialbe4 - 美国跨国互联网和技术公司,
  • variable5 - Google

我在获取$ 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>

1 个答案:

答案 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对象一样遍历它。