API Яндекс-геокодера

Перед использованием получите API ключ в кабинете разработчика:

Мы уже сами написали для вас функцию, которая получит координаты места по его названию, осталось ей воспользоваться. Для её работы нужно установить библиотеку requests==2.22.0

import requests

def fetch_coordinates(apikey, place):
    base_url = "https://geocode-maps.yandex.ru/1.x"
    params = {"geocode": place, "apikey": apikey, "format": "json"}
    response = requests.get(base_url, params=params)
    response.raise_for_status()
    places_found = response.json()['response']['GeoObjectCollection']['featureMember']
    most_relevant = places_found[0]
    lon, lat = most_relevant['GeoObject']['Point']['pos'].split(" ")
    return lon, lat

Пример использования:

apikey = '41f31cb9-8414-4c9a-bd82-79ec5d22b8ec'  # ваш ключ

coords = fetch_coordinates(apikey, "Внуково")
print(coords)  # ('37.295014', '55.608562')

coords = fetch_coordinates(apikey, "Серпуховская")
print(coords)  # ('37.624992', '55.726872')

coords = fetch_coordinates(apikey, "Красная площадь")
print(coords)  # ('37.621031', '55.753595')

Частые проблемы

Порой Яндекс-геокодер отказывается принимать новые ключи. При вызове функция fetch_coordinates ломается с такой ошибкой:

Traceback (most recent call last):
  File "main.py", line 22, in <module>
    coords = fetch_coordinates(apikey2, address)
  File "main.py", line 12, in fetch_coordinates
    response.raise_for_status()
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://geocode-maps.yandex.ru/1.x?geocode=Moscow&apikey=41f31cb9-8414-4c9a-bd82-79ec5d22b8ec&format=json

Здесь самая важная часть сообщения находится в последней строке:

HTTPError: 403 Client Error: Forbidden for url ...

Ошибка с кодом403 означает, что сервер отказывается работать с указанным ключом API.

Проблема исчезает сама примерно за полчаса. Столько времени требуется серверам Яндекса на то, чтобы узнать о регистрации нового ключа.


Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Хочу код-ревью