googleサービスアクセス時に使用するシグネチャー付きURLを生成

シェアする

  • このエントリーをはてなブックマークに追加

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;amp;sensor=false&amp;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."&amp;signature=".$signature;
			
			return $requestUrl;
		}
		catch( Exception $e )
		{
			throw $e;
		}
	}
}
?>

シェアする

  • このエントリーをはてなブックマークに追加

フォローする