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

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

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

 Сайт сервиса - 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

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

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

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

по ходу эксплуатации программы

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

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

Бесплатное обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space.
Примечание