2012-05-16 4 views
2

Freebase MID 배열 인 MySQL 결과를 루프 처리하고 출력 결과를 Freebase 아티클 이름으로 사용하고 싶습니다!Freebase MID 배열 및 Freebase에 여러 쿼리 보내기

$query = "SELECT `mid` FROM `items`"; 
$result = mysql_query($query); 
$count = 1; 
while ($row = mysql_fetch_array($result)) { 
    $mid = $row['mid']; 
    $simple_query = array('name'=> null, 'mid'=>$mid); 
    $q_array = array('q'.$count=>array('query'=>$simple_query)); 
    array_push ($query_array, $q_array); 
    $count++; 
} 

$jsonquerystr = json_encode($query_array); 
$apiendpoint = "http://api.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); 
$resultarray = json_decode($jsonresultstr, true); #true:give us the json struct as an array 

foreach($resultarray as $name){ 
    echo "$name<br>"; 
} 

오류 :

{ "코드": "/ API/상태/오류", "메시지": [{ "코드": "/ API/상태 여기

내 코드입니다 "500"내부 오류 ","transaction_id ":"캐시; cache04.p01.sjc1 : 8101, 2012 - "오류", "메시지": " 05-14T07 : 31 : 39Z; 0079 "}

답변

2

$query_array은 연관 배열 배열이 아닌 이름별로 쿼리의 연관 배열이어야합니다. 그래서이 대신 :

$q_array = array('q'.$count=>array('query'=>$simple_query)); 
array_push ($query_array, $q_array); 

가깝지만은 다음과 비슷한 모습이 될 것

$q_array = array('query'=>$simple_query); 
$query_array['q'.$count] = $q_array; 

그러나, 그 코드가 사용되지 되려고 이전하는 Freebase API를 사용하고 있습니다. new API에서이 작업을 수행하는 더 좋은 방법은 하나 개의 쿼리이 등 모두를 구조하는 것입니다 : 이것은 할 수

[{ 
    "mid": null, 
    "name": null, 
    "topics:mid|=":[ 
    "/m/045c7b", 
    "/m/0d6lp", 
    "/m/021ympy", 
    ... 
    ] 
}] 

당신의 MID의 배열을 전달하고 각각의 이름을 다시 얻을. 새로운 API에서이를 가져 오는 URL은 다음과 같습니다.

https://www.googleapis.com/freebase/v1/mqlread/?query=[{...}]