@LNVSTORM

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

Не могу понять как в python работать с геокодером Яндекса. Какую библиотеку использовать?
Сама задача:
Python отправляет определенный адрес (например г. Москва ул Тверская д6), нужно получить координаты этого адреса.
  • Вопрос задан
  • 271 просмотр
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Подойдёт любая библиотека для http-запросов. Хоть входящий в стандартную библиотеку urllib, хоть requests.
Ответ написан
Andrew_Pinkerton
@Andrew_Pinkerton
Вот либа с помощью которой это можно сделать, но на самом деле лучше обойтись без неё.
пример того как это можно использовать:
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(" "))


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

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

Войти через центр авторизации
Похожие вопросы
16 окт. 2019, в 17:12
300 руб./за проект
16 окт. 2019, в 17:11
3000 руб./за проект
16 окт. 2019, в 17:07
3800 руб./за проект