0

API呼び出しの結果を個別に出力しようとしています。YQLAPI呼び出しを呼び出しています。

これが私が使用しているPHPスクリプトです

  <?php
  if (!$_REQUEST["q"]) return;

  $query = $_REQUEST["q"];

  $q = "'http://google.com/complete/search?output=toolbar&q=$query'";

  $query = "select * from xml where url=$q";
  $url = "http://query.yahooapis.com/v1/public/yql?q=";
  $url .= rawurlencode($query);
  $url .= "&format=json&env=store://datatables.org/alltableswithkeys";

  function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
 }

$data = get_data($url);

 // decode the data and get the first result set.
 $info = json_decode($data);

 foreach( $info['suggestion']['data'] as $i ) {
 echo $i;
 }
 ?>

そして、API呼び出しから得られる結果は次のとおりです。

cbfunc({
"query": {
"count": 1,
"created": "2012-04-06T06:13:57Z",
"lang": "en-US",
"diagnostics": {
"publiclyCallable": "true",
"url": {
"execution-start-time": "2",
"execution-stop-time": "59",
"execution-time": "57",
"proxy": "DEFAULT",
"content": "http://google.com/complete/search?output=toolbar&q=fb"
 },
 "user-time": "59",
 "service-time": "57",
 "build-version": "26247"
 },
"results": {
"toplevel": {
"CompleteSuggestion": [
 {
  "suggestion": {
   "data": "fb"
  },
  "num_queries": {
   "int": "1260000000"
  }
 },
 {
  "suggestion": {
   "data": "fbi"
  },
  "num_queries": {
   "int": "155000000"
  }
 },
 {
  "suggestion": {
   "data": "fbi most wanted"
  },
  "num_queries": {
   "int": "54800000"
  }
 },
 {
  "suggestion": {
   "data": "fbi jobs"
  },
  "num_queries": {
   "int": "119000000"
  }
 },
 {
  "suggestion": {
   "data": "fb covers"
  },
  "num_queries": {
   "int": "82100000"
  }
 },
 {
  "suggestion": {
   "data": "fb banners"
  },
  "num_queries": {
   "int": "13300000"
  }
 },
 {
  "suggestion": {
   "data": "fbook"
  },
  "num_queries": {
   "int": "4050000"
  }
 },
 {
  "suggestion": {
   "data": "fbisd"
  },
  "num_queries": {
   "int": "84300"
  }
 },
 {
  "suggestion": {
   "data": "fbanners"
  },
  "num_queries": {
   "int": "789000"
  }
 },
 {
  "suggestion": {
   "data": "fbo"
  },
  "num_queries": {
   "int": "13000000"
   }
  }
 ]
}
}
}
});

提案オブジェクトを反復処理しようとしています。また、提案オブジェクトのデータプロパティを出力しようとしています。

そして、次のエラーが発生します。

Fatal error: Cannot use object of type stdClass as array 
4

4 に答える 4

1

さて、それはjavascriptコールバック関数によってラップされたデータを返しています....あなたは最初と最後からcbfunc(JSON_RESPONSE_DATA);を削除することができます...そして出来上がり!...あなたは配列を取得します...cbfunc();print_r(json_decode(REST_OF_THE_RESPONSE, true));

お役に立てれば。

于 2012-04-06T06:43:13.443 に答える
1

これで問題が解決する可能性があります。

foreach( $info['query']['results']['toplevel']['CompleteSuggestion'] as $i ) {
 echo $i['suggestion']['data'];
 echo "<br>";
}
于 2012-04-06T08:11:26.087 に答える
0

true出力を配列するには、パラメータを2番目に配置する必要があります。それ以外の場合は、その戻りオブジェクト。参照:json_decode

// decode the data and get the first result set.
$info = json_decode($data, true);
//var_dump($info);

foreach( $info['suggestion']['data'] as $i ) {
   echo $i;
}
于 2012-04-06T06:20:46.900 に答える
0

を使用してみてくださいjson_decode($data, true);。マニュアルを参照してください:json_encode()

2番目のパラメータTRUEの場合、返されたオブジェクトは連想配列に変換されます。

于 2012-04-06T06:21:00.973 に答える