これはGoogle Maps API Premierを契約されている方のみ影響します。
無償版には影響されません。2010年3月は、Static Maps API v2のみの導入だそうです。
sigunatureは、Static Maps APIのリクエストするURLのパスの部分と、あらかじめEnterpriseから割り当てらているPrivate keyをHMAC-SHA1アルゴリズムで計算した値をBase64でエンコードした文字列です。
sigunatureの計算が間違っていると、403エラーが返されます。
書籍の方にも、急きょ説明ページを追加しました。
詳しい話は、こちら。(残念ながら英語のみ)
■URL Authentication
http://code.google.com/intl/en/apis/maps/documentation/premier/guide.html#URLSigning
上記の英語ドキュメントからシグネチャの計算方法の部分だけ、ざっくりとまとめてみました。
シグネチャの計算方法
1. リクエストするURLを作成します
例:
http://maps.google.co.jp/maps/api/staticmap?center=TokyoStation&sensor=false&zoom=16&size=512x512&maptype=roadmap&client=gme-xxxxxx
2. ドメインの部分を削除します
例:
/maps/api/staticmap?center=TokyoStation&sensor=false&zoom=16&size=512x512&maptype=roadmap&client=gme-xxxxxx
3. プライベートキーを Base64エンコード でデコードし、作成したURLのパスと共に、HMAC-SHA1アルゴリズムでシグネチャを計算します。
4. 計算されたシグネチャをリクエストするURLにsignatureパラメータで付加します。バイナリ文字列をURLに含められるようにBase64エンコードを行ないます。このときにもクライアントIDが必要です。
例:
http://maps.google.co.jp/maps/api/staticmap?center=TokyoStation&sensor=false&zoom=16&size=512x512&maptype=roadmap&client=gme-xxxxxx&signature=xxxxxxxxxx
Googleのドキュメントでは、Python, C#, Javaのコードは載っているのですが、PHPが無かったので作ってみました。ご参考まで。
PHP5での計算例
<html>
<body>
<?php
$clientID = "gme-xxxxxxx";
$privateKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
/*******************************************************
1.リクエストURL の作成
********************************************************/
$requestUrl = "http://maps.google.com/maps/api/staticmap?".
"center=TokyoStation&".
"sensor=false&".
"zoom=16&".
"size=512x512&".
"maptype=roadmap&".
"client=". $clientID;
/*******************************************************
2.パスとクエリの取得
********************************************************/
$parsedUrl = parse_url($requestUrl);
$pathAndQuery = $parsedUrl["path"]."?".$parsedUrl["query"];
/*******************************************************
3.プライベートキーを Base64エンコード でデコード
& URLをMAC-SHA1アルゴリズムで暗号化
********************************************************/
$decodedPrivateKey = base64_decode($privateKey, true);
$sigunature = hash_hmac("sha1", $pathAndQuery, $decodedPrivateKey, true);
/*******************************************************
4.Base64エンコードされたシグネチャの付加
********************************************************/
$sigunature = base64_encode($sigunature);
$requestUrl .= "&sigunature=". $sigunature;
/*******************************************************
5.表示
********************************************************/
echo "<img src='".$requestUrl."'><br>";
echo $requestUrl;
?>
【Googleの最新記事】


マイマップを作成しています。
しかしこの登録したお店がマイマップで詳細を見るとあるすべて同じものが表示されます。
こちらを当初検索で出てきた地図の詳細情報を表記するように出来ないのでしょうか?
それとも都度こちらを変更しないといけないのでしょうか?