кодировка строки Python для вызова запросов к API Карт Google - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь выполнить простой обратный вызов геокодирования в API Карт Google ...

lat = 40.714224
long = -73.961452
urlparams = {'LatLng': str(lat)+","+str(long),
             'key': dsc.GOOGLE_MAPS_API_KEY
            }
burl = 'http://maps.google.com/maps/api/geocode/json'
r = requests.get(burl, params=urlparams)

Это не удается, поскольку "," переводится в% 2C:

http://maps.google.com/maps/api/geocode/json?LatLng=40.714224%2C-73.961452&key=dsc.GOOGLE_MAPS_API_KEY
{'error_message': "Invalid request. Missing the 'address', 'components', 'latlng' or 'place_id' parameter.", 'results': [], 'status': 'INVALID_REQUEST'}

Я попробовал несколько трюков (преобразование в байты, байтовые массивы, кодирование ("utf-8")), чтобы сделать эту работу, но безрезультатно .... Мне известен модуль urllib с его parse.quoteи т.д. методы, но я должен переключиться?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Сдаюсь.Вместо этого используйте pygeocoder:

my_geocoder = Geocoder(api_key=dsc.GOOGLE_MAPS_API_KEY)
results = my_geocoder.reverse_geocode(lat, long)
0 голосов
/ 23 февраля 2019

EDIT: очевидно, имена параметров чувствительны к регистру.Вам также нужно будет использовать HTTPS.Вот рабочий код:

lat = 40.714224
long = -73.961452
urlparams = {
             'latlng': "{},{}".format(lat, long),
             'key': dsc.GOOGLE_MAPS_API_KEY
            }
burl = 'https://maps.google.com/maps/api/geocode/json'
r = requests.get(burl, params=urlparams)

Оригинальный (неправильный) ответ: Будет ли работать массив вместо строки?

lat = 40.714224
long = -73.961452
urlparams = {'LatLng': [str(lat), str(long)],
             'key': dsc.GOOGLE_MAPS_API_KEY
            }
burl = 'http://maps.google.com/maps/api/geocode/json'
r = requests.get(burl, params=urlparams)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...