1

私は次のURLを持っています:

https://api.stackexchange.com/2.0/questions?page=1&pagesize=30&order=desc&sort=activity&site=stackoverflow

ブラウザのアドレスバーにこのURLを入力すると、PHPで必要なJSON応答が返されます。cURLを使用してフェッチしようとしましたが(以下のコードを参照)、機能しませんでした。ページに応答が出力されません。

function get_json($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);

    $data = curl_exec($ch);
    $resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($resultCode == 200) {
        return json_decode($data);
    } else {
        return false;
    }
}

$json = get_json('https://api.stackexchange.com/2.0/questions?page=1&pagesize=30&
  key=VVq3kJHSjQ*7qgpiRaVoLA%28%28&site=stackoverflow');
echo '<pre>';
print_r($json);

このURLを取得して、正しい方法でPHP配列に変換するにはどうすればよいですか?

4

3 に答える 3

3

最後に確認したところ、APIからのすべての応答はgzipで圧縮されていました。

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $url
  , CURLOPT_HEADER => 0
  , CURLOPT_RETURNTRANSFER => 1
  , CURLOPT_ENCODING => 'gzip'
));
$data = curl_exec($ch);
var_dump($data);
var_dump(json_decode($data));

設定すると、httpリクエストでのCURLOPT_ENCODING送信に加えて、応答の自動解凍が有効になりますが、Accept-Encoding: gzipこれが機能するためにヘッダーを送信する必要はありません。

于 2012-06-23T18:59:58.937 に答える
1

配列を返すには、の2番目のパラメーターを使用してjson_decode、に設定しtrueます。

if ($resultCode == 200) {
    return json_decode($data, true);
} else {
    return false;
}
于 2012-06-23T18:57:25.243 に答える
0

これを試して:

$json = json_decode(file_get_contents("https://api.stackexchange.com/.............."));
echo "<pre>";
print_r($json);
于 2012-06-23T18:56:44.447 に答える