Сообщество русскоговорящих пользователей
CMS DotNetNuke
   Вы здесь:  Блоги

Просмотр блога

апр 3

Опубликовал: Thor
03.04.2012 12:16 

Для одного из моих проектов была поставлена задача определения географического положения пользователя.

Первой идеей, было использование онлайн сервисов. Их не трудно найти, так же большинство из них предоставляют свои услуги бесплатно, но само собой с ограничением по количеству запросов.

Но в процессе изучения предоставляемого сервисами API и выбора наилучшего я наткнулся на сайт компании MaxMind.

Они предоставляют базу данных в виде бинарного и csv файла, также API для работы с бинарным файлом. Конечно, использование локальной базы данных является более предпочтительнее, т.к. в этом случае нет зависимости от стороннего онлайн сервиса, тем самым мы избавляемся от еще одного пункта влияющего на скорость работы приложения.

Данная компания предоставляет как бесплатную базу данных, так и платную, разница лишь в проценте покрытия, более подробно можно прочитать здесь.

Далее я приведу, небольшой пример работы:

Для начала я добавил в свой проект следующие файлы с исходным кодом API:

Country.cs
DatabaseInfo.cs
Location.cs
LookupService.cs
Region.cs
RegionName.cs

И оформил не большой хелпер для работы с данным API:

 

usingSystem.Web;

 

namespaceMyProject.WebApp.Helpers

{

    public static class LocationHelper

    {

        public static string GetCityNameByIp(string ipAddress)

        {

            string databasePath = HttpContext.Current.Server.MapPath("~/GeoIPCity.dat");

            LookupService service = new LookupService(databasePath);

            Location loc = service.getLocation(ipAddress);

 

            return loc != null && loc.city != null ? loc.city : string.Empty;

        }

    }

}

 

Я ограничился получением только названия города, т.к. это для меня являлось достаточным. Сам же объект Location содержит и другие параметры, такие как название региона, страна, код и тп.

Еще один не большой нюанс. Когда я определялся с выбором сервиса, я смотрел как они работают, определяя свое местоположение. Онлайн сервисы, к которым я присматривался, в отличии от MaxMind, выдавали информацию о том что я нахожусь в Росси, хотя это не так. Дело в том, что физически я нахожусь в Киеве, но в интернет я выхожу через шлюз расположенный в Москве.

 

Copyright © 2012 Thor

Tags:

пока 2 комментариев...

Re : Определение гео-положения пользователя по IP адресу

Спасибо за инфу, тоже подключусь наверное...

Hans в   14.07.2012 12:37

Re : Определение гео-положения пользователя по IP адресу

Спасибо за статью

qwaser в   12.10.2012 18:05

Ваше имя:
Ваш e-mail:
(Не обязательно) e-mail используется только для показа Gravatar.
Ваш сайт:
Заголовок:
Комментарий:
Код безопасности
Изображение CAPTCHA
Введите код, который вы видите, в нижнее поле
Добавить комментарий   Отмена 

Поиск



 
OpenedBorderBoxed Small width layoutMedium width layoutMaximum width layout Small textMedium textMaximum text