Google maps api 3 谷歌地图API-使用Python 3签署地理代码请求

Google maps api 3 谷歌地图API-使用Python 3签署地理代码请求,google-maps-api-3,python-3.x,Google Maps Api 3,Python 3.x,我正试图创建一个脚本,使用Maps API许可证生成签名url到地理编码地址,但我的sign_url函数遇到了问题 import urllib import urllib.parse import base64 import hashlib import hmac import re google_apis_url_http = 'http://maps.googleapis.com' geocoding_endpoint_json = '/maps/api/geocode/json' d

我正试图创建一个脚本,使用Maps API许可证生成签名url到地理编码地址,但我的sign_url函数遇到了问题

import urllib
import urllib.parse
import base64
import hashlib
import hmac
import re

google_apis_url_http = 'http://maps.googleapis.com'
geocoding_endpoint_json = '/maps/api/geocode/json'


def encode_params(address, client, sensor):
    return urllib.parse.urlencode({'address': address, 'client': client, 'sensor': sensor})


def sign_url(url, private_key):
    decoded_key = base64.urlsafe_b64decode(private_key)
    signature = hmac.new(decoded_key, url, hashlib.sha1)
    encoded_signature = base64.urlsafe_b64encode(signature.digest())
    return encoded_signature

with open("addresses.txt", "r") as inputFile:
    inputList = inputFile.read().splitlines()

for line_address in inputList[0:1]:
    comma_stripped_address = re.sub(",", "", line_address)
    formatted_address = re.sub(" ", "+", comma_stripped_address)
    encoded_params = encode_params(formatted_address, 'gme-********', 'false')
    url_to_sign = geocoding_endpoint_json + '?' + encoded_params

    print(sign_url(url_to_sign, '********'))
下面是我得到的错误:

Traceback (most recent call last):
  File "/Users/[me]/PycharmProjects/Google APIs/geocode_auth.py", line 31, in <module>
    print(sign_url(url_to_sign, '********'))
  File "/Users/[me]/PycharmProjects/Google APIs/geocode_auth.py", line 18, in sign_url
    signature = hmac.new(decoded_key, url, hashlib.sha1)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py", line 131, in new
    return HMAC(key, msg, digestmod)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py", line 73, in __init__
    self.update(msg)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py", line 79, in update
    raise TypeError("expected bytes, but got %r" % type(msg).__name__)
TypeError: expected bytes, but got 'str'
回溯(最近一次呼叫最后一次):
文件“/Users/[me]/PycharmProjects/googleapi/geocode_auth.py”,第31行,在
打印(签名url(url到签名,********'))
文件“/Users/[me]/PycharmProjects/googleapi/geocode_auth.py”,第18行,在sign_url中
signature=hmac.new(解码的_键、url、hashlib.sha1)
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py”,第131行,新版本
返回HMAC(键、消息、digestmod)
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py”,第73行,在__
自我更新(msg)
更新中第79行的文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/hmac.py”
raise TypeError(“需要字节,但得到%r”%type(msg)。\uuuuu name\uuuuu)
TypeError:需要字节,但得到'str'
有人知道为什么会出现这个类型错误吗?我正在用PythonV2中的一个演示对脚本进行建模,所以v3中可能出现了一些问题