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