Задать вопрос
@LNVSTORM

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

Не могу понять как в python работать с геокодером Яндекса. Какую библиотеку использовать?
Сама задача:
Python отправляет определенный адрес (например г. Москва ул Тверская д6), нужно получить координаты этого адреса.
  • Вопрос задан
  • 12774 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 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(" "))


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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽