googleの新しいマップAPIを使用する場合、googleから提供されたキー値を用いて生成したシグネチャーをリクエストURLの最後に付与する必要がありその生成サンプルはgoogleサイトに在るのですが・・・・
でも何故かそのサンプルにPHPが無くて(^_^.)
必要になったので作ってみました。
一応、生成サンプル内の生成結果の様には出力されますのでOKかな(^_^.)
ご使用はあくまでも自己責任で。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <?php // ======================================= // 検証用URLとKEY // --------------------------------------- // googleサイト: // から取得 // ======================================= $URL = "http://maps.google.com/maps/api/geocode/json?address=New+York&amp;sensor=false&amp;client=clientID" ; $PrivateKey = "vNIXE0xscrmjlyV-12Nj_BvUPaw=" ; // ======================================= // 実際にクラス作成してSignature文字列を取得 // ======================================= $Utility = new Utility(); $newurl = $Utility ->CreateSignature( $URL , $PrivateKey ); // 結果を表示してみる。 print ( $newurl . "\n" ); // ======================================= // とりあえずクラス // ======================================= class Utility { // ======================================= // URLとキー値からシグネチャー文字列を付与したURLを生成する。 // --------------------------------------- // $URL :googleリクエストURL // $key :貰ったキー(googleさんから貰ってね) // --------------------------------------- // return:URL + シグネチャー 文字列 // ======================================= static function CreateSignature( $url , $key ) { try { // ======================================= // urlからパスとクエリ文字列を求める // ======================================= $parseUrl = parse_url ( $url ); $pathQuery = $parseUrl [ "path" ]. "?" . $parseUrl [ "query" ]; // ======================================= // Base64デコード前にキー文字列内の特定文字置き換え // --------------------------------------- // "-" → "+" // "_" → "/" // ======================================= $keyStringTmp = str_replace ( "-" , "+" , $key ); $keyStringTmp = str_replace ( "_" , "/" , $keyStringTmp ); // ======================================= // Base64デコード実行 // ======================================= $decodedKey = base64_decode ( $keyStringTmp ); // ======================================= // URLをMAC-SHA1アルゴリズムで暗号化 // ======================================= $signature = hash_hmac( "sha1" , $pathQuery , $decodedKey , true ); // ======================================= // Base64でエンコード // ======================================= $signature = base64_encode ( $signature ); // ======================================= // Base64エンコード後にデコード前に置き換えた文字を戻す。 // --------------------------------------- // "+" → "-" // "/" → "_" // ======================================= $signature = str_replace ( "+" , "-" , $signature ); $signature = str_replace ( "/" , "_" , $signature ); // ======================================= // URL生成 // ======================================= $requestUrl = $url . "&signature=" . $signature ; return $requestUrl ; } catch ( Exception $e ) { throw $e ; } } } ?> |