2014-12-15 1 views
0

ID, URL, 별칭, 설명 및 레이블과 같은 Wikidata API에서 다음 속성에 액세스하려고하지만 지금까지 성공하지 못했습니다. 나는 기본적인 실수를하고 있으며 지금까지는 다음 코드 만 가지고 있다고 확신한다. 이 데이터에 액세스하는 가장 좋은 방법에 대한 제안은 매우 감사하겠습니다.Wikidata JSON 파일의 데이터 액세스

<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, alias, description 및 label과 같은 문자열에서 특정 요소의 첫 번째 인스턴스를 가져오고 싶습니다. variable1 - Q95, variable2 - //www.wikidata.org/wiki/Q95, variable3 - Google 당신은 구문 분석 할 JSON을 보여줄 필요가

<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

...

Basicly 당신은 값을 얻을 수 있습니다 : .Inc, varialbe4 - - 미국의 다국적 인터넷 및 기술 기업, variable5 구글은/아래 코드를 참조하십시오 이 같은 PHP의 JSON 밖으로 ...

$ doc가 구문 분석하려는 JSON 인 경우

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

편집이

안녕하세요 :-)이 무엇을하고 있는지 이해 한 후, 임 미안 해요 그래서 난 내 서버에 코드를 testet이 ... 당신이 무엇을하고 있는지 완전히 혼란이었고, 단지 나는 ...

$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>"); 
} 
+0

감사하지만

은 당신이 원하는 코드를 따라 ... 당신이 원하는 것을 얻을 ... 나는 분명 var에 이름을했다, 그래서 그들은 이해하기 쉽게 조금 이상하지만, $ doc가 json_decode 함수로 에러를 얻는 것은 문자열이 아니라 객체입니다. 계속하는 방법을 모르겠다. – Oroku

+0

잘 $ doc라는 개체를 제공 할 수 있습니까? 어쩌면 이미 PHP 배열이기 때문에 json_decode 할 필요가 없습니다 ... 귀하의 사이트에 그것을 반향하여 여기에 게시 할 수 있습니까? –

+0

안녕하세요 @ 네오 개체로 드릴 다운하고 문자열 ($ jsonArr)을 얻는 방법으로 몇 가지 진전을 보았습니다. 그리고 제가 언급 한 것처럼 실제로 관심있는 것은 ID, URL, 별칭, 설명 및 레이블 값을 얻는 것입니다. 그러나 특별히 여러 인스턴스가 있으므로 각 인스턴스의 첫 번째 인스턴스를 가져오고 싶습니다. 내 코드를 수정하여 현재 내가 무엇을 얻을 수 있는지 확인할 수 있습니다. 어떤 도움을 크게 인정합니다 – Oroku