从Wikidata JSON文件访问数据

时间:2014-12-15 01:15:06

标签: json wikidata-api

我试图从Wikidata API访问以下属性:id,url,别名,描述和标签,但到目前为止都没有成功。我确定我犯了基本错误,到目前为止只有以下代码。关于访问此数据的最佳方式的任何建议都非常感谢。

<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=Google&format=json&language=en");    
libxml_clear_errors();
libxml_use_internal_errors($errors);   
}
?>
</body>
</html>

编辑 - 我设法得到一个包含我想要的特定数据的字符串($ jsonArr)。但是我想从字符串中获取特定元素的第一个实例,特别是id,url,别名,描述和标签,具体为:variable1 - Q95,variable2 - //www.wikidata.org/wiki/Q95,variable3 - Google .Inc,varialbe4 - 美国跨国互联网和技术公司,变量5 - Google /请参阅下面的代码:

<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 :(得分:1)

您需要显示要解析的JSON ...

基本上你可以像这样用PHP从JSON中获取值......

如果$ doc是您要解析的JSON

$jsonArr = json_decode($doc, true);
$myValue = $jsonArr["keyYouWant"];

在了解您在做什么之后进行编辑: - )

嗨,对不起,我对你在那里做的事情感到很困惑......所以我在你的服务器上测试了你的代码,得到了你想要的东西......

按照你想要的代码......我采用了明确的var名称,所以它们有点长,但更容易理解......

$searchString = urlencode($_POST['q']); //Encode your Searchstring for url
$resultJSONString = file_get_contents("https://www.wikidata.org/w/api.php?action=wbsearchentities&search=".$searchString."&format=json&language=en"); //Get your Data from wiki
$resultArrayWithHeader = json_decode($resultJSONString, true); //Make an associative Array from respondet JSON
$resultArrayClean = $resultArrayWithHeader["search"]; //Get the search Array and ignore the header part

for ($i = 0; $i < count($resultArrayClean); $i++) { //Loop through the search results
    echo("<b>Entry: ".$i."</b>");
    echo("<br>");
    echo($resultArrayClean[$i]["id"]); //Search results value of key 'id' at position n
    echo("<br>");
    echo($resultArrayClean[$i]["url"]); //Search results value of key 'url' at position n
    echo("<br>");
    echo($resultArrayClean[$i]["aliases"]); //Search results value of key 'aliases' at position n
    echo("<br>");
    echo("<br>");
    echo("<br>");
}