Вопрос по php – Массив Freebase MIDs и отправка нескольких запросов в freebase

2

Я хочу просмотреть результаты MySQL, представляющие собой массив 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 / status / error", "сообщения": [{"код": "/ api / status / error", "сообщение": "& quot;" список "»); объект не имеет атрибута "получить" & quot; }], «status»: «500 Internal Error», «action_id »:» cache; cache04.p01.sjc1: 8101; 2012-05-14T07: 31: 39Z; 0079 & quot; }

Ваш Ответ

1   ответ
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;

Тем не менее, этот код использует старый API Freebase, который собирается быть устаревшим. Лучший способ сделать это вновый API было бы структурировать все это как один запрос:

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

Это позволяет вам передать массив MID и вернуть имя для каждого из них. URL для получения этого из нового API должен выглядеть примерно так:

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

Похожие вопросы