@LNVSTORM

Как в python работать с Api Яндекса?

Не могу понять как в python работать с геокодером Яндекса. Какую библиотеку использовать?
Сама задача:
Python отправляет определенный адрес (например г. Москва ул Тверская д6), нужно получить координаты этого адреса.
  • Вопрос задан
  • 12348 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Подойдёт любая библиотека для http-запросов. Хоть входящий в стандартную библиотеку urllib, хоть requests.
Ответ написан
Комментировать
deepblack
@deepblack Куратор тега Python
Вот либа с помощью которой это можно сделать, но на самом деле лучше обойтись без неё.
пример того как это можно использовать:
spoiler
import typing

import requests

from yandex_geocoder.exceptions import (
    YandexGeocoderAddressNotFound,
    YandexGeocoderHttpException,
)


class Client:
    """Yandex geocoder API client.

    :Example:
        >>> from yandex_geocoder import Client
        >>> Client.coordinates('Хабаровск 60 октября 150')
        ('135.114326', '48.47839')

    """

    API_URL = "https://geocode-maps.yandex.ru/1.x/"
    PARAMS = {"format": "json"}

    @classmethod
    def request(cls, address: str) -> dict:
        """Requests passed address and returns content of `response` key.

        Raises `YandexGeocoderHttpException` if response's status code is
        different from `200`.

        """
        response = requests.get(
            cls.API_URL, params=dict(geocode=address, **cls.PARAMS)
        )

        if response.status_code != 200:
            raise YandexGeocoderHttpException(
                "Non-200 response from yandex geocoder"
            )

        return response.json()["response"]

    @classmethod
    def coordinates(cls, address: str) -> typing.Tuple[str, str]:
        """Returns a tuple of ccordinates (longtitude, latitude) for
        passed address.

        Raises `YandexGeocoderAddressNotFound` if nothing found.

        """
        data = cls.request(address)["GeoObjectCollection"]["featureMember"]

        if not data:
            raise YandexGeocoderAddressNotFound(
                '"{}" not found'.format(address)
            )

        coordinates = data[0]["GeoObject"]["Point"]["pos"]  # type: str
        return tuple(coordinates.split(" "))


По большому счету это весь её код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы