IPアドレスから緯度経度を取得しGooglePlaceSearchの対応まで
2016/02/03
// アクセス元のIPアドレスを取得する
$ipaddress = $_SERVER['REMOTE_ADDR'];
// ipinfo.ioから、緯度経度を取得する(レスポンスがない場合もあるらしい)
$ch = curl_init('ipinfo.io/' . $ipaddress);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$info = json_decode( curl_exec($ch), true );
curl_close($ch);
// Cakephpのhttpリクエスト用クラス
$httpSocket = new HttpSocket();
// Google Place Searchのgetリクエスト
// keyは、GoogleDeveloperConsoleで、サービスを作成し、API用のkeyを発行すること
// ※以下のサンプルでは、GOOGLE_API_KEYで定数化しています。
// 入力文字は、HTML側の、name="input"から取得する
$placeArr = $httpSocket->get('https://maps.googleapis.com/maps/api/place/autocomplete/json',
array(
'input' => $this->request->data['input']
,'location' => $info['loc']
,'radius' => '20000' // locationからの半径(Max20km)
,'types' => 'establishment'
,'language' => 'ja'
,'key' => GOOGLE_API_KEY
)
);
// レスポンスは、json形式なので、配列でデコードする(第2引数にtrueを指定する)
$tmp = json_decode( $placeArr->body, true );
$res = [];
if ( count( $tmp ) !== 0 )
{
foreach( $tmp['predictions'] as $key => $val )
{
$res[] = $val['description'];
}
}
// クロスオリジンリソースシェアリング(CORS)対策
// HTTPSも、上記のGOOGLE_API_KEYと同じく定数化しています。
// このスクリプトを利用しているURLドメインと、リクエスト元のドメインを一致させること
// (通常は自ドメインでOK)
header("Access-Control-Allow-Origin: " . HTTPS );
echo json_encode( $res );
exit();