company_banner

Новый API – определение местоположения по WiFi и GSM сетям

  • Из RSS

Сегодня мы запускаем для публичного тестирования новый API-сервис  – Яндекс.Локатор. C помощью этого программного интерфейса можно определить координаты мобильного устройства или ноутбука по идентификаторам WiFi и GSM сетей, в зоне действия которых он находится. С помощью API Яндекс.Локатора можно отображать местоположение пользователя на карте,  добавлять геотэги к фотографиям и сообщениям, отправляемым в социальные сети (например, в Twitter), создавать игры и придумывать другие сервисы, основанные на географическом местоположении пользователя.

Если в телефоне пользователя нет GPS-приемника, локатор поможет определить, где пользователь находится.API будет полезен и для десктопных приложений. В большинстве настольных устройств нет GPS-приемника, поэтому определение местоположения по WiFi и IP – единственный доступный способ.

Разработчики Яндекса используют этот API во многих сервисах, например в Мобильных Яндекс.Картах, Мобильном Яндексе и в Яндекс.Баре для Firefox и Internet Explorer.

Техническая документация и примеры использования нового API доступны на странице API Яндекс.Локатор Для использования необходимо получить  уникальный ключ API Яндекс.Карт


Олег Герасимов, Григорий Бакунов, локаторы.
г. Москва, ул. Льва Толстого 16

.
Яндекс
475,00
Как мы делаем Яндекс
Поделиться публикацией

Комментарии 23

    0
    А можно простому пользователю как-то воспользоваться этим сервисом? Узнать, где я сейчас.
      0
      В мобильных яндекс.картах (Java, Android) это есть.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Ну так выкиньте нокию, она все равно на WP7 переходит (шутка)
          Motorola XT720, Android 2.1, отключен WiFi и GPS, приложение Яндекс.Карты официальное, прекрасно определило мое местоположение, пускай и с погрешностью в километр.

          Плюс, хоть могу и наврать за давностью, но на Motorola E1070 J2ME версия Я.Карт меня так же находила.
      0
      Я не совсем понял. Это только для разработчиков мобильных приложений или можно внедрить это в веб-сервис?

      Например, я могу, как сделано тут: api.yandex.ru/maps/tools/getlonglat/ определить координаты пользователя?

      Потому что в API локатора я должен где-то взять данные с wifi карточки, а это сделать с помощью JS не представляется возможным.
      0
      Ещё бы открыли доступ для возможности определения нахождения пользователя по его IP. Как сейчас у Вас на главной выдаётся погода и др. данные конкретные для данного города.
        0
        Не всегда верно правда. Мне Яндекс упорно погоду Санкт-Петербурга предлагал. Пришлось руками Москву вбить.
          0
          Уже есть такая возможность:
          www.maxmind.com/app/ip-location (API), пример сервиса построенного на его API: ipdb.at
            0
            Билайн, Москва, Перово.

            Country: N/A
            Region: N/A
            City: N/A
            Postal Code: N/A
            Latitude/Longitude: /
            ISP: N/A
            Organization: N/A
            Host Name:
          +2
          Красавцы, очень пригодится, спасибо!
            0
            Я правильно понимаю, что это та же штука со сбором данных о wifi-сетях, за которую в Европе Гугл дрючат?
              0
              Неправильно. Тут пользователь сам передает данные о сетях в Яндекс.
                0
                Кстати, эта фиговина глючить стала. Если раньше выдавала или что не знает координат или примерный адрес, то сейчас меня вообще в Бостоно закинула… В прошлый раз было как и положено — Новосибирск.
                0
                Подскажите, в чём я ошибаюсь?

                using System;
                using System.Net;
                using System.Xml.Linq;

                class Program
                {
                  static void Main()
                  {
                    var req = (HttpWebRequest)WebRequest.Create("http://api.lbs.yandex.net/geolocation");

                    req.Method = "POST";
                    req.ContentType = "application/x-www-form-urlencoded";
                    req.Headers[HttpRequestHeader.AcceptEncoding] = "identity";

                    var xDoc = XDocument.Parse(
                @"<ya_lbs_request>
                  <common>
                    <version>1.0</version>
                    <api_key>AIWjZ00BAAAAFZcTGHMAwR74yGi25Y1wJbj8Nn8Vtd0vN-gAAAAAAAAAAAA_TbglJ-i5oKc4HltUqeUb-RoZjg==</api_key>
                  </common>
                  <gsm_cells>
                    <cell>
                      <countrycode>250</countrycode>
                      <operatorid>1</operatorid>
                      <cellid>12</cellid>
                      <lac>6405</lac>
                      <signal_strength>-45</signal_strength>
                      <age>1000</age>
                    </cell>
                  </gsm_cells>
                  <wifi_networks>
                    <network>
                      <mac>0123456789AB</mac>
                      <signal_strength>-90</signal_strength>
                    </network>
                  </wifi_networks>
                  <ip>
                    <address_v4>80.249.93.65</address_v4>
                  </ip>
                </ya_lbs_request>"
                );

                    var sentData = System.Text.Encoding.UTF8.GetBytes(string.Format("xml={0}", xDoc.ToString()));
                    req.ContentLength = sentData.Length;

                    using (var sendStream = req.GetRequestStream())
                    {
                      sendStream.Write(sentData, 0, sentData.Length);
                    }

                    var response = // Error: The remote server returned an error: (417) Expectation Failed
                      (HttpWebResponse)req.GetResponse();
                  }
                }


                * This source code was highlighted with Source Code Highlighter.
                  0
                  я бы попробовал
                  var xDoc = @«xml=<ya_lbs_request>
                  .....»
                  var sentData = System.Text.Encoding.UTF8.GetBytes(xDoc);
                  и уже потом делал через XDocument
                    0
                    Пробовал. А XDocument.Parse() гарантирует, что документ правильно сформирован.
                      +1
                      добавьте первой строчкой в скрипте
                      System.Net.ServicePointManager.Expect100Continue = false;
                        0
                        Спасибо! А не могли бы вы пояснить действие этой волшебной строчки? Я что-то не нашёл.

                        p. s. Всем интересующимся — рабочий пример использования Яндекс.Локатор на C# (только подставьте свой ApiKey, если нету — можно получить здесь):

                        using System;
                        using System.Net;
                        using System.Xml.Linq;

                        class Program
                        {
                          private static dynamic YaLocator = new
                          {
                            Version = "1.0",
                            ApiKey = @"You API Key",
                            CountryCode = 250,
                            OperatorId = 1,
                            CellId = 12,
                            Lac = 6405,
                            SignalStrengthGsm = -45,
                            SignalStrengthWiFi = -90,
                            Age = 1000,
                            Mac = "0123456789AB",
                            IP = "80.280.95.66"
                          };

                          static void Main()
                          {
                            System.Net.ServicePointManager.Expect100Continue = false;

                            var req = (HttpWebRequest)WebRequest.Create("http://api.lbs.yandex.net/geolocation");

                            req.Method = "POST";
                            req.ContentType = "application/x-www-form-urlencoded";
                            req.Headers[HttpRequestHeader.AcceptEncoding] = "identity";

                            var xDoc = new XDocument(
                              new XElement("ya_lbs_request",
                                new XElement("common",
                                  new XElement("version", YaLocator.Version),
                                  new XElement("api_key", YaLocator.ApiKey)),
                                new XElement("gsm_cells",
                                  new XElement("countrycode", YaLocator.CountryCode),
                                  new XElement("operatorid", YaLocator.OperatorId),
                                  new XElement("cellid", YaLocator.CellId),
                                  new XElement("lac", YaLocator.Lac),
                                  new XElement("signal_strength", YaLocator.SignalStrengthGsm),
                                  new XElement("age", YaLocator.Age)),
                                new XElement("wifi_networks",
                                  new XElement("network",
                                    new XElement("mac", YaLocator.Mac),
                                    new XElement("signal_strength", YaLocator.SignalStrengthWiFi))),
                                new XElement("ip",
                                  new XElement("address_v4", YaLocator.IP))));

                            var sentData = System.Text.Encoding.UTF8.GetBytes(string.Format("xml={0}", xDoc.ToString()));
                            req.ContentLength = sentData.Length;

                            using (var sendStream = req.GetRequestStream())
                            {
                              sendStream.Write(sentData, 0, sentData.Length);
                            }

                            var response = (HttpWebResponse)req.GetResponse();
                            var buf = new byte[response.ContentLength];

                            using (var respStream = response.GetResponseStream())
                            {
                              respStream.Read(buf, 0, buf.Length);
                              Console.WriteLine(System.Text.Encoding.UTF8.GetString(buf));
                            }

                            Console.ReadKey();
                          }
                        }


                        * This source code was highlighted with Source Code Highlighter.
                          +1
                          System.Net.HttpWebRequest добавляет заголовок Expect: 100-Continue к каждому запросу, если его специально не попросить так не делать. некоторые сервера игнорируют это и возвращают код ответа 417, тогда как мы ожидаем код 100.
                          от этого и ошибка.
                  0
                  А это только по России работает или по всему миру?
                    0
                    Битый час пытаюсь получить данные с помощью jQuery.
                    $.ajax({type: 'POST', url: «api.lbs.yandex.net/geolocation», data: 'json={}', complete:function(data){console.info(data)}, dataType: «jsonp»);

                    В результате получаю: Object { readyState=4, status=200, statusText=«parsererror»}
                    При том, что сервер вернул валидный json.

                    В чем может быть проблема?
                    Ну ведь не в том, что «Content-Type text/xml; charset=windows-1251»?
                      –2
                      Яндекс.Фотки — глючное гавно! Страницы грузятся долго и через одну ошибки! Незнаю как люди им пользуются. Собираетесь им вообще заниматься?

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое