私は基本的に次のことを行っています: https://developers.google.com/maps/documentation/business/webservices/auth
私の MacBook の Python 2.7.3 と Windows 64 ビット サーバー環境の 2.7.5 では、元の例に正確に従っていますが、正しい署名を再現できません。私はこのような関数を作ります:
import sys
import hashlib
import urllib
import hmac
import base64
import urlparse
def process_url(input_url, private_key):
print("URL To Sign: " + input_url)
url = urlparse.urlparse(input_url)
print("Private Key: " + private_key)
url_to_sign = url.path + "?" + url.query
print("Original Path + Query: " + url_to_sign)
decoded_key = base64.urlsafe_b64decode(private_key)
signature = hmac.new(decoded_key, url_to_sign, hashlib.sha1)
encodedSignature = base64.urlsafe_b64encode(signature.digest())
print("B64 Signature: " + encodedSignature)
original_url = url.scheme + "://" + url.netloc + url.path + "?" + url.query
full_url = original_url + "&signature=" + encodedSignature
print "Full URL: " + full_url
return full_url
これにより、Googleによると次のようになります。
- URL: http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client= {clientID}
- 秘密鍵: vNIXE0xscrmjlyV-12Nj_BvUPaw=
- 署名する URL 部分: /maps/api/geocode/json?address=New+York&sensor=false&client={clientID}
- 署名: KrU1TzVQM7Ur0i8i7K3huiw3MsA=
- 完全な署名付き URL: http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client= {clientID}&signature=KrU1TzVQM7Ur0i8i7K3huiw3MsA=
ただし、次のことを行うと:
process_url('http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}', 'vNIXE0xscrmjlyV-12Nj_BvUPaw=')
私は得る:
- 署名する URL: http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client= {clientID}
- 秘密鍵: vNIXE0xscrmjlyV-12Nj_BvUPaw=
- 元のパス + クエリ: /maps/api/geocode/json?address=New+York&sensor=false&client={clientID}
- B64 署名: WlcBIkr9WMB9uPhXWmAGcjG_2M4=
- 完全な URL: http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client= {clientID}&signature=WlcBIkr9WMB9uPhXWmAGcjG_2M4=
したがって、「KrU1TzVQM7Ur0i8i7K3huiw3MsA =」ではなく、「WlcBIkr9WMB9uPhXWmAGcjG_2M4 =」を取得します。これは以前は機能していたことを誓いますが、この新しい W 値は、さまざまなシステムで一貫して得られます。
誰かが私が間違っていることについて何か手がかりを持っていますか? ページが間違っていますか、それとも基本的に間違ったことをしていますか??