API Яндекс-геокодера
Перед использованием получите API ключ в кабинете разработчика:
Самые важные ответы на вопросы:
- В открытом. Ваш код будет публично опубликован, это открытая система
- В бесплатном. Вы пишете код в образовательных целях
- Буду отображать данные на карте. По шагам урока вам предстоит это сделать
Что дальше?
Мы уже сами написали для вас функцию, которая получит координаты места по его названию, осталось ей воспользоваться. Для её работы нужно установить библиотеку requests==2.*
import requests
def fetch_coordinates(apikey, address):
base_url = "https://geocode-maps.yandex.ru/1.x"
response = requests.get(base_url, params={
"geocode": address,
"apikey": apikey,
"format": "json",
})
response.raise_for_status()
found_places = response.json()['response']['GeoObjectCollection']['featureMember']
if not found_places:
return None
most_relevant = found_places[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')
coords = fetch_coordinates(apikey, "UNEXIST")
print(coords) # None
Частые проблемы
Порой Яндекс-геокодер отказывается принимать новые ключи. При вызове функция 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.
Проблема исчезает сама примерно за полчаса. Столько времени требуется серверам Яндекса на то, чтобы узнать о регистрации нового ключа.