2014-02-08 71 views
2

當我運行下面的代碼403地理編碼

from googlemaps import GoogleMaps 
gmaps = GoogleMaps('my api key here') 
address = 'Constitution Ave NW & 10th St NW, Washington, DC' 
lat, lng = gmaps.address_to_latlng(address) 
print lat, lng 

但禁止錯誤,當我運行此我得到以下錯誤

File "map.py", line 4, in <module> 
lat, lng = gmaps.address_to_latlng(address) 
    File "/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg/googlemaps.py", line 310, in address_to_latlng 
return tuple(self.geocode(address)['Placemark'][0]['Point']['coordinates'][1::-1]) 
    File "/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg/googlemaps.py", line 259, in geocode 
url, response = fetch_json(self._GEOCODE_QUERY_URL, params=params) 
    File "/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg/googlemaps.py", line 50, in fetch_json 
response = urllib2.urlopen(request) 
    File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen 
return _opener.open(url, data, timeout) 
File "/usr/lib/python2.7/urllib2.py", line 406, in open 
response = meth(req, response) 
File "/usr/lib/python2.7/urllib2.py", line 519, in http_response 
'http', request, response, code, msg, hdrs) 
File "/usr/lib/python2.7/urllib2.py", line 444, in error 
return self._call_chain(*args) 
File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain 
result = func(*args) 
File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default 
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 403: Forbidden 

任何想法如何解決這個問題?我無法想出任何方式。

+1

你是以純客戶端還是通過某些wamp服務器運行它? –

+0

沒有wamp服務器...通過命令行運行它 –

回答

0

好吧,事實證明,谷歌地圖使用公共IP。我在一次黑客馬拉松中,其他一些參與者已經完成了公共知識產權上每個人的配額阻止請求。

0

你可以找到解決方案here(從毛茸茸的第二個答案)。我簡化了一下:

import urllib, json 

def geocode(addr): 
    url = "http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false" % (urllib.quote(addr.replace(' ', '+'))) 
    data = urllib.urlopen(url).read() 
    info = json.loads(data).get("results")[0].get("geometry").get("location") 

    return info 

address = 'Constitution Ave NW & 10th St NW, Washington, DC' 

r = geocode(address) 
print "%s %s" % (r['lat'], r['lng'])