2011-12-24 2 views
2

주어진 영화에 대한 제작 회사 및 배포 회사 정보를 추출해야하며 Freebase를 사용하고 있습니다. 일은 결코 JSON을 사용한 적이 없으며 PHP 파일과 쿼리를 통합하는 방법을 모른다.PHP와 JSON Freebase에서 데이터를 가져 오는 쿼리

내가 읽었던 튜토리얼은 이것에 대해 명확하지 않으므로 언제나처럼 내가 항상 얻는 도움을 얻기 위해 여기에 온다! :)

그래서 ... 나는이 꺼내 필요가있는 정보는이 Freebase Query Editor

입니다 그리고 내가 가지고있는 PHP이 (주석 라인은 내가 잘못 및/또는 선이에서 것을 확신 라인입니다입니다 튜토리얼 나는 어떤 성공 here 뒤를 :

$moviename = "The Matrix"; 

// [{ "name": "The Matrix", "type": "/film/film", "production_companies": [{ "name": null }], "distributors": [{ "distributor": [{ "name": null }] }] }] 
$simplequery = array('name'=>$moviename, 'type'=>"/film/film", 'production_companies'=>array('name'=>null)); 

//{"id":"/topic/en/philip_k_dick", "/film/writer/film":[]} 
//$simplequery = array('id'=>$_POST["freebasewriter"], 'name'=>null, '/film/writer/film'=>array(array('name'=>null, 'id'=>null))); 

$queryarray = array('q1'=>array('query'=>$simplequery)); 
$jsonquerystr = json_encode($queryarray); 

#run the query 
$apiendpoint = "http://sandbox.freebase.com/api/service/mqlread?queries"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "$apiendpoint=$jsonquerystr"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$jsonresultstr = curl_exec($ch); 
curl_close($ch); 

$jsonquerystr = urlencode(json_encode($queryarray)); 

//print_r($resultarray); 
//$produtoraarray = $resultarray["q1"]["result"]["production_companies"]; 
//print_r($produtoraarray); 
//$produtorarray = $resultarray["q1"]["result"][]; 
//$freebaseserver = "http://sandbox.freebase.com"; 

사람이 여기에 나에게 도움을 줄 수 사전에 감사

길 :

하여 많이와 메리 크리스마스 감사합니다?!

편집 @Yanir Shahak의 대답은 도움이 지금은이 받고 있어요 :

지금
Array ([code] => /api/status/ok [q1] => Array ([code] => /api/status/error [messages] => Array ([0] => Array ([code] => /api/status/error/mql/result [info] => Array ([count] => 3 [result] => Array ([0] => Array ([name] => Warner Bros. Entertainment) [1] => Array ([name] => Village Roadshow Pictures) [2] => Array ([name] => Silver Pictures))) [message] => Unique query may have at most one result. Got 3 [path] => production_companies [query] => Array ([name] => The Matrix [production_companies] => Array ([error_inside] => . [name] =>) [type] => /film/film)))) [status] => 200 OK [transaction_id] => cache;cache02.sandbox.sjc1:8101;2011-12-24T02:01:34Z;0004) 

... 내가 배열로 거기에서 데이터를 가지고 어떻게 내가 사용할 수 있습니까? 내가 정의되지 않은 인덱스

//print_r($resultarray); 
//$produtoraarray = $resultarray["q1"]["result"]["production_companies"]; 
//print_r($produtoraarray); 
//$produtorarray = $resultarray["q1"]["result"][]; 
//$freebaseserver = "http://sandbox.freebase.com"; 
+0

편집 한 내용과 일치하는 답변을 편집했습니다. – Yaniro

답변

5

. 당신은 서면으로 작성했습니다 : 다음 MQL 쿼리에 해당

$simplequery = array('name'=>$moviename, 
        'type'=>"/film/film", 
        'production_companies'=>array('name'=>null)); 

: 하나 명 이상의 필름 주어진 이름으로 종종이 하나 개 이상의 생산 회사가있을 수 있기 때문에

{ 
    "name": "The Matrix", 
    "type": "/film/film", 
    "production_companies": { 
    "name": null 
    } 
} 

이 실패 참여했다. MQL에서 이러한 사례를 제대로 처리하려면 배열의 전체 쿼리뿐만 아니라 production_companies 속성도 래핑하여 쿼리의 해당 부분에 대한 여러 결과가 필요함을 나타냅니다.

[{ 
    "name": "The Matrix", 
    "type": "/film/film", 
    "production_companies": [{ 
    "name": null 
    }] 
}] 

및 코드에서 그 같은 뭔가 번역 것 : MQL에서 다음과 같이 보이는

$notsosimplequery = array(array('name'=>$moviename, 
           'type'=>"/film/film", 
           'production_companies'=>array(array('name'=>null)))); 

또한 빠른 얼마나 많은에 대한 높은 한계가있는 new MQL Read Service 사용을 고려해야합니다 하루에 만들 수있는 검색어.

+0

방금 ​​전에 한 달 전에 내 문제를 풀기 위해 답을 사용했음을 알았습니다! 끝난! 건배 –

2

를 얻을로

이 코드는 작동하지 않습니다 당신이 할 수있는 일은 대체된다

$jsonquerystr = json_encode($queryarray); 

으로 :

$jsonquerystr = urlencode(json_encode($queryarray)); 

은 분명히 당신이 인코딩해야 cURL을 cURL로 사용하여 API 서버에 보내기 전에 json 문자열의 특수 문자는 사용자를 대신하지 않습니다.

결과가 돌아 오면 XML과 매우 흡사하게 데이터 (속성 & 값)를 나타내는 또 다른 방법 인 JSON (JavaScript Object Notation) 형식이됩니다. 당신은 (쿼리를 보낼 때 당신이 JSON 인코딩 된 것을 알)을 JSON을 디코딩하고 그래서 같은 객체로 결과를 사용해야합니다 : 그것의 몇 가지 중요한 사항 누락 때문에 귀하의 쿼리는 오류를 반환

$data = json_decode($jsonresultstr); 
foreach ($data->q1->messages[ 0 ]->info->result as $company) 
{ 
    echo($company->name . "<br/>"); 
} 
관련 문제