PHPのファイルの内容を取得するfile_get_contents関数
でサーバーの設定によっては、データの取得ができないケースがありました。サーバの設定を変更できない場合のデータの取得方法を調べてみました。
そのような場合、cURL
を使用してデータを取得することができます。
例:) Instagram APIを使用する際、JavaScriptのみで使用するとアクセストークン内容が見えてしまう状態になりますので、アクセストークンを使用したJSON形式のデータの取得はPHPで行い、受け取ったJSON形式データをJavaScriptで表示する方法がよく使用されています。
JavaScript
// インスタグラムのデータ取得 $.ajax({ url: '/get.php', dataType: 'json', success: function(data) { $('#instagram-output').append(instagramInsertData(data)); } }); // インスタグラム挿入のデータ作成 function instagramInsertData(data) { var insert = ' <ul class="clearfix"">'; for (var i = 0; i < data.length; i++) { insert += ' <li>'; insert += '<a href="' + data[i]['link'] + '" target="_blank">'; insert += '<img src="' + data[i]['images']['standard_resolution']['url'] + '">'; insert += '</a>'; insert += '</li>'; }; insert += '</ul>'; return insert; }
インスタグラム挿入のデータ作成 get.php (file_get_contentsを使用)
<?php $accessToken = 'アクセストークン内容'; $count = 11; // 取得件数 // 取得 $url = 'https://api.instagram.com/v1/users/self/media/recent?access_token=' . $accessToken . '&count=' . $count; $jsonData = @file_get_contents($url); // 整形 ~ // 出力 ~
上記の$jsonDataの結果がnullとなり、JSON形式のデータが取得できませんでした。
phpinfo関数でサーバ情報を確認しましたが、特に問題は見つかりませんでした。
file_get_contents関数以外でデータを取得する方法を調べてみるとcURLを使用してデータを取得することができました。
インスタグラム挿入のデータ作成 get.php (cURLを使用)
<?php $accessToken = 'アクセストークン内容'; $count = 11; // 取得件数 // 取得 $url = 'https://api.instagram.com/v1/users/self/media/recent?access_token=' . $accessToken . '&count=' . $count; $result = curl_get_contents( $url, 120 ); $arrayx = json_decode($result, true); // 出力 if( $arrayx['data'] ) { echo json_encode($arrayx['data']); } function curl_get_contents( $url, $timeout ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; }