Запрос

Чтобы получить ответ о местоположении мобильного устройства, отправьте POST-запрос к ресурсу geolocation. Передайте данные в формате XML:

Яндекс Локатор обработает данные из запроса в следующей последовательности:

  1. Точки доступа Wi-Fi.
  2. Сигналы сетей мобильной связи.
  3. IP-адрес.

Если Яндекс Локатор успешно определит местоположение, он вернет ответ с координатами точки и радиусом погрешности. В противном случае вы получите сообщение об ошибке.

Для API Яндекс Локатора установлен лимит на количество запросов в секунду (RPS): до 1800. Считается как сумма запросов со стороны клиента и со стороны сервера.

Стандартный запрос

Передайте данные о мобильном устройстве и его окружении в параметре запроса xml.

Host: api.lbs.yandex.net
POST /geolocation

xml=<ya_lbs_request>
  <common>
    <version>1.0</version>
    <api_key>ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g==</api_key>
  </common>
  <gsm_cells>
    <cell>
      <countrycode>250</countrycode>
      <operatorid>2</operatorid>
      <cellid>197403650</cellid>
      <lac>9900</lac>
      <signal_strength>-80</signal_strength>
      <age>1000</age>
    </cell>
  </gsm_cells>
  <wifi_networks>
     <network>
            <mac>2CD02D814C80</mac>
        <signal_strength>-68</signal_strength>
        <age>500</age>
     </network>
     <network>
            <mac>E4AA5DE28CD0</mac>
        <signal_strength>-60</signal_strength>
        <age>500</age>
     </network>
  </wifi_networks>
  <ip>
     <address_v4>95.108.173.231</address_v4>
  </ip>
</ya_lbs_request>

curl -X POST 'http://api.lbs.yandex.net/geolocation' -d 'xml=<ya_lbs_request><common><version>{{ version }}</version><api_key>ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g==</api_key></common><gsm_cells><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>197403650</cellid><lac>9900</lac><signal_strength>-80</signal_strength><age>1000</age></cell></gsm_cells><wifi_networks><network><mac>2CD02D814C80</mac><signal_strength>-68</signal_strength><age>500</age></network><network><mac>E4AA5DE28CD0</mac><signal_strength>-60</signal_strength><age>500</age></network></wifi_networks><ip><address_v4>95.108.173.231</address_v4></ip></ya_lbs_request>'

Элементы

Элемент Описание Обязателен
ya_lbs_request Корневой элемент. Да
common Метаданные запроса. Да
version Версия API Яндекс Локатора: 1.0. Да
api_key Ключ доступа к API Яндекс Локатора. Да
gsm_cells Содержит один или несколько элементов cell с данными о соте. Нет
cell Содержит идентификационные коды одной соты, а также данные об уровне сигнала. Хотя бы один элемент
countrycode Код страны. Да
operatorid Код сети мобильной связи. Да
cellid Идентификатор соты. Да
lac Код местоположения. Да
signal_strength Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования. Нет
age Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования. Нет
wifi_networks Содержит один или несколько элементов network с данными о точках доступа Wi-Fi. Нет
network Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала. Хотя бы один элемент
mac MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC. Да
signal_strength Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования. Нет
age Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования. Нет
ip Содержит элемент address_v4. Нет
address_v4 IP-адрес мобильного устройства, назначенный оператором мобильного интернета. Если IP-адрес отсутствует или некорректен, то Яндекс Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет. Да

Запрос c сжатыми данными

Сожмите XML с данными утилитой gzip и передайте его в запросе, указав заголовок Content-Type: multipart/from-data и параметр gzip с любым непустым значением.

Включите в запрос с типом multipart/from-data две части:

  1. gzip — индикатор запроса с сжатыми данными;
  2. xml — параметр, содержащий сжатые данные XML.

В каждой части запроса укажите значение одного параметра после разделителя boundary и заголовка Content-Disposition с именем параметра. Значение параметра отделите от предшествующих заголовков пустой строкой.

Отправьте POST-запрос к ресурсу geolocation.

POST /geolocation?gzip=1
Host: api.lbs.yandex.net
Accept-Encoding: identity
Content-Type: multipart/form-data; boundary=YANDEXLOCATORBOUNDARY
Content-length: 606

--YANDEXLOCATORBOUNDARY
Content-Disposition: form-data; name="gzip"

1
--YANDEXLOCATORBOUNDARY
Content-Disposition: form-data; name="xml"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

СЖАТЫЕ ДАННЫЕ
--YANDEXLOCATORBOUNDARY--

curl -X POST 'http://api.lbs.yandex.net/geolocation?gzip=1' -H 'Content-Type: multipart/form-data' -F xml=@data.xml.gz

Заголовки

Заголовок Описание
Accept-Encoding: identity Обозначает, что содержимое запроса следует принимать в любой кодировке.
Content-Type: multipart/form-data; boundary=_разделитель_ Тип запроса для передачи файлов внутри HTTP-запроса. Разделитель boundary — произвольная строка из латинских букв и цифр.
Content-length: _целое число Длина запроса в байтах начиная со второй строки после этого заголовка.
Content-Disposition: form-data; name="_имя_параметра_" Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем. Значение параметра указывается после дочерних заголовков и пустой строки.
Content-Type: application/octet-stream Обозначает, что вложенные данные представляют собой файл неуказанного типа.
Content-Transfer-Encoding: binary Обозначает, что содержимое — это бинарные данные.
Предыдущая
Следующая