API GoogleMaps -address для координат (широта, долгота)
Это сводит меня с ума.
Я удалил этот ключ 1000 раз.
Вчера это работало как шарм, сегодня уже нет
Вот код python:
from googlemaps import GoogleMaps
gmaps = GoogleMaps("AIzaSyBIdSyB_td3PE-ur-ISjwFUtBf2O0Uo0Jo")
exactaddress ="1 Toronto Street Toronto"
lat, lng = gmaps.address_to_latlng(exactaddress)
print lat, lng
GoogleMapsError: Error 610: G_GEO_BAD_KEY
Теперь он возвращает указанную выше ошибку без каких-либо очевидных причин.
Я не думаю, что достиг предела заявки или максимальной ставки
Чтобы оставаться на безопасной стороне, я даже вводил задержки (1сек)... чтобы получить ту же ошибку
Кто-нибудь знает, как я могу это решить?
Необходимость работать с другим модулем python прекрасна, если вы можете указать альтернативу тому, который я использую в настоящее время.
спасибо
С
PS: ключ действителен, это ключ клиента, и он автоматически включался, когда я включил API GoogleMAP API3 в консоли приложения. Нет ограничений для доменов или IP-адресов
РЕДАКТИРОВАТЬ: Итак, вот что я в итоге использовал
def decodeAddressToCoordinates( address ):
urlParams = {
'address': address,
'sensor': 'false',
}
url = 'http://maps.google.com/maps/api/geocode/json?' + urllib.urlencode( urlParams )
response = urllib2.urlopen( url )
responseBody = response.read()
body = StringIO.StringIO( responseBody )
result = json.load( body )
if 'status' not in result or result['status'] != 'OK':
return None
else:
return {
'lat': result['results'][0]['geometry']['location']['lat'],
'lng': result['results'][0]['geometry']['location']['lng']
}
Библиотека, которую мне указал Джейсон, тоже интересна, но поскольку мой код был предназначен для исправления чего-то (одноразовое использование), я не пробовал его решение. Я обязательно подумаю, что если я снова напишу код:-)
Ответы
Ответ 1
Несмотря на то, что Google не одобряет вызовы V2 с помощью googlemaps (именно поэтому вы видите сломанные вызовы), они недавно объявили, что предоставляют разработчикам шестимесячное расширение (до 8 сентября 2013 г.) для перехода от V2 к API V3. Подробнее см. Обновление API геокодирования V2.
В то же время проверьте pygeocoder как возможное решение Python V3.
Ответ 2
С сентября 2013 года API Карт Google v2 больше не работает. Вот код, работающий для API v3 (на основе этого ответа):
import urllib
import simplejson
googleGeocodeUrl = 'http://maps.googleapis.com/maps/api/geocode/json?'
def get_coordinates(query, from_sensor=False):
query = query.encode('utf-8')
params = {
'address': query,
'sensor': "true" if from_sensor else "false"
}
url = googleGeocodeUrl + urllib.urlencode(params)
json_response = urllib.urlopen(url)
response = simplejson.loads(json_response.read())
if response['results']:
location = response['results'][0]['geometry']['location']
latitude, longitude = location['lat'], location['lng']
print query, latitude, longitude
else:
latitude, longitude = None, None
print query, "<no results>"
return latitude, longitude
См. официальную документацию для получения полного списка параметров и дополнительной информации.
Ответ 3
Проделал некоторый кодекс игры в гольф и закончил с этой версией. В зависимости от ваших потребностей вы можете выделить еще несколько ошибок.
import urllib, urllib2, json
def decode_address_to_coordinates(address):
params = {
'address' : address,
'sensor' : 'false',
}
url = 'http://maps.google.com/maps/api/geocode/json?' + urllib.urlencode(params)
response = urllib2.urlopen(url)
result = json.load(response)
try:
return result['results'][0]['geometry']['location']
except:
return None