Интеграция API IpGeoBase Город по IP-адресу

Сервис позволяет определять местонахождения IP - адреса.

В базе сервиса IP – адреса РФ, Украина (с точностью до города). США, Канада, Европа и часть Aзии (с точностью до страны).

 Сайт сервиса - http://ipgeobase.ru/

Документация по API - http://blog.ipgeobase.ru/?p=76

Регистрация / авторизация не требуется.

Параметры запроса.

  • URL: http://ipgeobase.ru:7020/geo
  • Метод: GET
  • Заданный IP передается как параметр в URL.
  • Формат ответа: по умолчанию – XML. Можно вывести данные в формате JSON, путем добавления параметра &json=1

Примеры запроса:

 http://ipgeobase.ru:7020/geo?ip=109.254.254.155 (ответ – XML).

 http://ipgeobase.ru:7020/geo?ip=109.254.254.155&json=1(ответ JSON).

В ответе содержится: блок ip адресов, страна, город, регион, округ и координаты.

Недостатки: возвращает кириллические символы в кодировке windows-1251, нечитаемые sql server.

CREATE PROCEDURE [dbo].[api_IpGeoBaseru_IPLocation_request]
	@parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2)
	@username nvarchar(32)  -- текущий пользователь.
AS
BEGIN

DECLARE @IPStr nvarchar(max)
-- получение значений полей формы из @parameters
SELECT  @IPStr  =  ISNULL( Value2 , '' )  FROM @parameters WHERE [Key] = 'IPStr'

IF LEN( ISNULL( @IPStr , '' ) ) = 0
	 SET @IPStr = N'178.219.186.12'


DECLARE @apiUrl1 		nvarchar(max) = '' 		-- Финальная строка для отправки  -- ФАКТИЧЕСКИ ЭТО Url

-- IP передается как параметр в Url
SET     @apiUrl1  = 'http://ipgeobase.ru:7020/geo?ip='+ISNULL( @IPStr, '' )

-------------------------------------------------------------------------------------------
    -- ОТЛАДКА
	 insert into as_trace ( header, text, username, code , created )   values( 'apiUrl1'       , @apiUrl1      , @username, 'api_IpGeoBaseru_IPLocation_request' , GETDATE() )
-------------------------------------------------------------------------------------------

	-- SELECT 1  Msg, Result, Url (адрес, куда будет идти запрос)
    	select '' Msg, 1 Result
          , @apiUrl1 Url

    -- не используется
	-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
	-- select 'id' name, '5' value, '' [type] -- form (в форме передается), header (в http headers), get запросы передавайте прямо в URL
END

CREATE PROCEDURE [dbo].[api_IpGeoBaseru_IPLocation_response]
	@response nvarchar(max),
	@parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2 - те же что и на request)

	@username nvarchar(32)
AS
BEGIN
    -- ОТЛАДКА
   	insert into as_trace ( header, text, username, code , created )  values( 'LEN @response ', LEN ( @response ) , @username, 'api_IpGeoBaseru_IPLocation_response' , GETDATE() )
	insert into as_trace ( header, text, username, code , created )  values( '@response - 1    , 1024 ', SUBSTRING ( @response , 1    , 1024 ) , @username, 'api_IpGeoBaseru_IPLocation_response' , GETDATE() )

    IF LEN( ISNULL( @response  , '' ) ) =0
    BEGIN
        SELECT 'Ошибка!' AS Msg, 0 Result, 'Ошибка! Получена срока @response нулевой длины!' AS  Response
        RETURN
    END

DECLARE  @xml_STR Nvarchar(max)
SET      @xml_STR = @response

DECLARE  @xml xml -- переменная в которую преобразуем полученную строку


-- ПРИХОДИТ КОДИРОВКА encoding="windows-1251"
set @xml_STR = REPLACE( @xml_STR ,'UTF-8','UTF-16')
set @xml_STR = REPLACE( @xml_STR ,'windows-1251','UTF-16')
set @xml =convert (xml, @xml_STR)

DECLARE @exist_ipAnswer bit = 0
select  @exist_ipAnswer = @xml.exist('/ip-answer')

      IF @exist_ipAnswer = 0
      BEGIN

          SELECT 'Ошибка! В результате запроса @response нет корневого элемента ip-answer!' Msg, 0 Result, 'Ошибка! В результате запроса @response нет корневого элемента ip-answer!' Response
          RETURN
      END

-- Город 	Москва -- Регион 	Москва -- Округ 	Центральный федеральный округ   -- Страна 	/RU
    DECLARE @value_IP 	NVARCHAR(MAX)  = N'' -- @value_IP
    DECLARE @inetnum 	NVARCHAR(MAX)  = N'' --

    DECLARE @country_iso_code NVARCHAR(MAX)= N'' -- Страна 	RU
    DECLARE @city 			NVARCHAR(MAX)  = N'' -- Город 	Москва
    DECLARE @region		    NVARCHAR(MAX)  = N'' -- Регион 	Москва
    DECLARE @district 		NVARCHAR(MAX)  = N'' -- Округ 	Центральный федеральный округ    "Центральный"
    DECLARE @lat 			NVARCHAR(MAX)  = N'' -- data_geo_lat
    DECLARE @lon 			NVARCHAR(MAX)  = N'' -- data_geo_lon


select @value_IP 	= @xml.value('/ip-answer[1]/ip[1]/@value'     , 'nvarchar(200)'  )
select @inetnum  	= @xml.value('/ip-answer[1]/ip[1]/inetnum[1]' , 'nvarchar(200)'  )
select @country_iso_code = @xml.value('/ip-answer[1]/ip[1]/country[1]', 'nvarchar(200)'  )
select @city   		= @xml.value('/ip-answer[1]/ip[1]/city[1]'     , 'nvarchar(200)'  )
select @region 		= @xml.value('/ip-answer[1]/ip[1]/region[1]'   , 'nvarchar(200)'  )
select @district 	= @xml.value('/ip-answer[1]/ip[1]/district[1]' , 'nvarchar(200)'  )
select @lat  		= @xml.value('/ip-answer[1]/ip[1]/lat[1]'   , 'nvarchar(200)'  )
select @lon  		= @xml.value('/ip-answer[1]/ip[1]/lng[1]'   , 'nvarchar(200)'  )

	-- SELECT 1
	select 'Ok' Msg
         , 1 Result
         -- , @response Response -- ТАК при вызов из формы вернет оригинальный  @response !!!
         , 'Ваш IP: '  +IIF ( @value_IP = '', '' , @value_IP )
          +'; Город: ' +IIF ( @city = ''    , '' , @city )
          +'; Регион: '+IIF ( @region = ''  , '' , @region )
          +'; Округ: ' +IIF ( @district = '', '' , @district )
          +'; Страна: '
             -- +IIF ( @country = '' , '' , @country )  + '-'
             +IIF ( @country_iso_code  = '' , '' ,@country_iso_code  )
          +'; Координаты : '+IIF ( @lat = '' , '' ,@lat ) + ' ' +IIF ( @lon = '' , '' ,@lon )  + '.'
         AS Response

	-- SELECT 2 Внешние действия

END

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Falcon Space

Это снижение стоимости владения

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

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы

Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK