2

オブジェクトから特定の要素の最初のインスタンスを取得しようとしています。オブジェクト $doc があり、次の値を取得したいと考えています。

ID、URL、エイリアス、説明、ラベル、具体的には:

  • 変数1 - 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>
4

1 に答える 1

0

API 要求への応答は HTML や XML ではなく JSON であるため、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."

PHP オブジェクトと同じように、を使用var_dumpして検査し$contents、トラバースすることができます。

于 2014-12-18T02:50:46.990 に答える