googleの新しいマップAPIを使用する場合、googleから提供されたキー値を用いて生成したシグネチャーをリクエストURLの最後に付与する必要がありその生成サンプルはgoogleサイトに在るのですが・・・・
でも何故かそのサンプルにPHPが無くて(^_^.)
必要になったので作ってみました。
一応、生成サンプル内の生成結果の様には出力されますのでOKかな(^_^.)
ご使用はあくまでも自己責任で。
<?php
// =======================================
// 検証用URLとKEY
// ---------------------------------------
// googleサイト:
// http://code.google.com/intl/ja/apis/maps/documentation/webservices/
// から取得
// =======================================
$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;
}
}
}
?>
