Как определить город по IP на сайте (dadata API)

Как реализовать

Создаем форму (1 колонка с кодом ip) и получаем IP из спец параметра userIP:

CREATE PROCEDURE [dbo].[fm_watch_getCityByIP_getItem]
    @itemID int,	
	@username nvarchar(256), 
    @parameters ExtendedDictionaryParameter readonly

AS
BEGIN
	declare @ip nvarchar(128) = (select Value2 from @parameters where [Key] = 'userIP')
	select @ip ip
    
    select 'h3' headerTag
END

При нажатии на кнопку делаем API запрос: 

CREATE PROCEDURE [dbo].[fm_watch_getCityByIP_saveItem]
   @username nvarchar(256), 
   @itemID int, 
   @fieldip nvarchar(256) = ''
AS
BEGIN
	-- 1 SELECT (Result, Msg)
	select 1 Result, ' ' Msg
    
    -- 2 SELECT
   select 'apirequest' type, 'dadataCityByIP' code, 'ip' p1_name, @fieldip p1_value
END

Процедура Request API запроса (формат json, метод Get): 

CREATE PROCEDURE [dbo].[api_dadataCityByIP_request]
	@parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2)
	@username nvarchar(32)  -- текущий пользователь.
AS
BEGIN
	declare @ip nvarchar(20) = ''
    select @ip = Value2 from @parameters where [Key]='ip'
    -- SELECT 1  Msg, Result, Url (адрес, куда будет идти запрос)
	select '' Msg, 1 Result, 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip='+ @ip Url  --, 'application/json' ContentType

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

Процедура Response без изменений: 

CREATE PROCEDURE [dbo].[api_dadataCityByIP_response]
	@response nvarchar(max),
	@parameters ExtendedDictionaryParameter READONLY, 
	
	@username nvarchar(32)
AS
BEGIN
	-- SELECT 1
	select '' Msg, 1 Result, @response Response
END

и JS коллбек сохранения формы для обработки ответа API: 

as.formcallbacks["watch_getCityByIP_saveItem"] = function(data){
  var ss = JSON.parse(data.additionalData)[0].items;
  console.log("API response", ss);
      	
  for (var i = 0; i< ss.length; i++){
  	var el = ss[i];
    if(el.key=="response"){
    	var ss1 = JSON.parse(el.value2);
      	var s = "";
      	if(ss1 && ss1.location){
      		var loc = ss1.location;
       	    console.log("Loc data", loc); 
          	s+="Город: " + loc.value + "
";
          	s+="Полное название: " + loc.unrestricted_value + "
";
          	s+= "

Остальные параметры локации можно посмотреть в консоли браузера

"
          	as.sys.bootstrapAlert(s, {type: "success", delay: 1000000});
        }    	
    }
  }
}  

 

 

 

 

 

 

 

Насколько полезна эта возможность?

Другие модули

Получение данных юридического лица по БИК

Чистка данных в ФИО через dadata. Подключение к Dadata API. Коррекция ввода данных человека

Как упростить ввод адреса на сайте. Подсказки dadata по адресу

Проверка орфографии текста через API Яндекс Spell

Поиск компании через Dadata Подсказки. Получение информации о компании через API

Dadata. Вывод товаров и услуг (МКТУ)

Как отправить письмо с шаблоном HTML

Рерайт на сайте, подбор синонимов через API. Получение текста по API

Последние обновления

Платформа Falcon Space

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

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

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

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

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

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

Сайт использует Cookie. Правила конфиденциальности OK