从Wikidata JSON文件访问数据

从Wikidata JSON文件访问数据,json,wikidata-api,Json,Wikidata Api,我正在尝试从Wikidata API访问以下属性:id、url、别名、描述和标签,但迄今为止未成功。我确信我犯了一些基本的错误,到目前为止,我只有以下代码。任何关于访问此数据的最佳方式的建议都将不胜感激 <html> <body> <form method="post"> Search: <input type="text" name="q" value="Google"/> <input type="submit" value="Submi

我正在尝试从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>

搜索:
loadHTMLFile(“https://www.wikidata.org/w/api.php? 
action=wbsearchentities&search=Google&format=json&language=en“;
libxml_clear_errors();
libxml_使用_内部_错误($errors);
}
?>
编辑-我已经设法得到一个字符串($jsonArr),其中包含我想要的特定数据。但是,我想从字符串中获取特定元素的第一个实例,具体是id、url、别名、描述和标签,即:variable1-Q95、variable2-//www.wikidata.org/wiki/Q95、variable3-Google.Inc、varialbe4-美国跨国互联网和技术公司,变量5-谷歌/请参见下面的代码:

<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>

搜索:
loadHTMLFile(“https://www.wikidata.org/w/api.php?
action=wbsearchentities&search=$search&format=json&language=en“;
libxml_clear_errors();
libxml_使用_内部_错误($errors);
var_dump($doc);
回声“”;
$jsonArr=$doc->documentElement->nodeValue;
$jsonArr=(字符串)$jsonArr;
echo$jsonArr;
}
?>

您需要显示要解析的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>");
}
$searchString=urlencode($_POST['q'])//对url的搜索字符串进行编码
$resultJSONString=文件\u获取\u内容(“https://www.wikidata.org/w/api.php?action=wbsearchentities&search=“$searchString.”&format=json&language=en“//从wiki获取您的数据
$resultArrayWithHeader=json_decode($resultJSONString,true)//从响应JSON生成关联数组
$resultArrayClean=$resultArrayWithHeader[“搜索”]//获取搜索数组并忽略标题部分
对于($i=0;$i);
echo($resultaryClean[$i][“id”]);//位置n处键“id”的搜索结果值
回声(
); echo($ResultaryClean[$i][“url”]);//位置n处键“url”的搜索结果值 回声(
); echo($ResultaryClean[$i][“别名”]);//搜索结果位置n处键“别名”的值 回声(
); 回声(
); 回声(
); }
谢谢,但是我发现json_decode函数有一个错误,因为$doc是一个对象而不是字符串。我不知道该怎么做?你能告诉我$doc是哪种类型的对象吗?也许它已经是一个php数组了,所以你不需要对它进行json_解码。。。你能把它发到你的网站上吗?嗨@Neo我在这方面取得了一些进展,深入到对象中,得到了一个字符串($jsonArr),我真正感兴趣的是得到id、url、别名、描述和标签。但是,我特别希望得到每个字符串中的第一个实例,因为有几个实例。我将修改我的代码,这样你就可以看到我目前能得到什么。非常感谢您的帮助Hi@Oroku抱歉,我对您的代码感到困惑。。。在我上面的编辑中,您可以找到工作代码,我认为这更易于阅读和维护。。。祝你玩得开心,给我一张赞成票:-)非常感谢!这正是我需要的你帮了我大忙。我真的很感激!