Интеграция API DaData.ru Город по IP-адресу
Сервис DaData.ru (https://dadata.ru) предоставляет API поиска.
Полная документация - API Город по IP-адресу - https://dadata.ru/api/detect_address_by_ip/.
Определяет город по IP-адресу в России.
Поддерживает как IPv4, так и IPv6 адреса.
Возвращает детальную информацию о городе, в том числе почтовый индекс.
Недостатки: работает только по адресам РФ.
Регистрация DaData.ru.
Нужно зарегистрироваться и подтвердить почту.
Регистрация - https://dadata.ru/suggestions/usage/address/#registration_popup
Подтвердить адрес электронной почты.
API начнет работать после подтверждения.
После регистрации в личном кабинете https://dadata.ru/profile/#info
Станут доступны API-ключ и Секретный ключ для стандартизации
Подписка.
Тариф «Бесплатный», действует бессрочно.
Возможности - Бесплатно до 10 тысяч запросов в день.
API запрос.
Формат запроса.
- URL - https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address.
- Метод – GET.
- Формат ответа – json.
- Кодировка - UTF-8.
- Заголовок запроса - Content-Type – application/json.
- Заголовок запроса - Accept – application/json.
- Заголовок запроса - Authorization - Token 1d01d91d91d91d91d9f1d91d9_____ - API-ключ из личного кабинета.
Заданный IP передается как параметр в URL.
Пример запроса: https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=178.219.186.12.
В ответе на запрос приходит объект с массивом данных location.
Пример ответа (с сокращениями)
{
"location": {
"value": "г Москва",
"unrestricted_value": "101000, г Москва",
"data": {
"postal_code": "101000",
"country": "Россия",
"country_iso_code": "RU",
"federal_district": "Центральный",
…
"history_values": null,
"unparsed_parts": null,
"source": null,
"qc": null
}
}
}
Если город не удалось определить, ответ будет таким:
{ "location": null }
В процедуре парсинга выводиться следующие поля Город, Регион, Округ, Страна (iso код), Координаты.
В ответе сервиса – по одному адресу – более 70 полей, можно получить максимально подробную информацию по каждому адресу, включая значения всех классификаторов.
CREATE PROCEDURE [dbo].[api_daData_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
DECLARE @jsonRequest1 nvarchar(max) = '' -- текст json-объекта
-- IP передается как параметр в Url
SET @apiUrl1 = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip='+ISNULL( @IPStr, '' )
-------------------------------------------------------------------------------------------
-- ОТЛАДКА
insert into as_trace ( header, text, username, code , created ) values( 'apiUrl1' , @apiUrl1 , @username, 'api_daData_IPLocation_request' , GETDATE() )
-------------------------------------------------------------------------------------------
-- SELECT 1 Msg, Result, Url (адрес, куда будет идти запрос)
select '' Msg, 1 Result
, @apiUrl1 Url
, 'application/json' ContentType -- явное указание для HEADER
-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
select 'Authorization' name
, 'Token 1d9d193ed73ec33________' value
, 'header' [type] -- form (в форме передается), header (в http headers), get запросы передавайте прямо в URL
END
CREATE PROCEDURE [dbo].[api_daData_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_daData_IPLocation_response' , GETDATE() )
insert into as_trace ( header, text, username, code , created ) values( '@response - 1 , 1024 ', SUBSTRING ( @response , 1 , 1024 ) , @username, 'api_daData_IPLocation_response' , GETDATE() )
DECLARE @json1 NVARCHAR(MAX) = N''
SET @json1 = @response
-- Для проверки правильности JSON формата существует функция ISJSON, которая возвращает 1, если это JSON, 0 — если нет и NULL, если был передан NULL
DECLARE @presentJSON bit = 0
SELECT @presentJSON = ISNULL( ISJSON( @json1 ) , 0 )
IF @presentJSON <> 1
BEGIN
-- SELECT 'Ошибка! Строка @response не является JSON!' Msg, 0 Result, @response Response
SELECT 'Ошибка!' AS Msg, 0 Result, 'Ошибка! Строка @response не является JSON!' AS Response
RETURN
END
IF LEN( ISNULL( @response , '' ) ) =0
BEGIN
SELECT 'Ошибка!' AS Msg, 0 Result, 'Ошибка! Получена срока @response нулевой длины!' AS Response
RETURN
END
DECLARE @commonResult NVARCHAR(MAX) = N''
SET @commonResult = (SELECT JSON_QUERY(@json1, '$.location') ) -- строка массива location
IF LEN( ISNULL( @commonResult , '' ) ) =0
BEGIN
SELECT 'Ошибка!' AS Msg, 0 Result, 'Ошибка! Город не удалось определить!' AS Response
RETURN
END
-- Город Москва -- Регион Москва -- Округ Центральный федеральный округ -- Страна /RU
DECLARE @value_Address NVARCHAR(MAX) = N'' -- Адрес одной строкой
DECLARE @postal_code NVARCHAR(MAX) = N'' -- Индекс
DECLARE @country NVARCHAR(MAX) = N'' -- Страна -- "country": "Россия"
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_Address = ISNULL( Query.value_Address ,'' )
, @postal_code = ISNULL( Query.data_postal_code ,'' )
, @country = ISNULL( Query.data_country ,'' )
, @country_iso_code = ISNULL( Query.data_country_iso_code,'' )
, @city = ISNULL( Query.data_city ,'' )
, @region = ISNULL( Query.data_region_with_type ,'' )
, @district = ISNULL( Query.data_federal_district ,'' )
, @lat = ISNULL( Query.data_geo_lat ,'' )
, @lon = ISNULL( Query.data_geo_lon ,'' )
FROM OPENJSON(@json1, N'$.location') -- Зашли в массив , далее в WITH считаем , что адреса уже внутри массива
WITH (
value_Address VARCHAR(200) N'$.value' -- Адрес одной строкой (как показывается в списке подсказок)
, data_postal_code VARCHAR(200) N'$.data.postal_code' -- Индекс
, data_country VARCHAR(200) N'$.data.country' -- "country": "Россия"
, data_country_iso_code VARCHAR(200) N'$.data.country_iso_code' -- "country_iso_code": "RU",
, data_city VARCHAR(200) N'$.data.city'
, data_region_with_type VARCHAR(200) N'$.data.region_with_type' -- "region_with_type": "Москва",
, data_federal_district VARCHAR(200) N'$.data.federal_district' -- "federal_district": "Центральный",
, data_geo_lat VARCHAR(200) N'$.data.geo_lat'
, data_geo_lon VARCHAR(200) N'$.data.geo_lon'
) AS Query
-- Город Москва -- Регион Москва -- Округ Центральный федеральный округ -- Страна /RU
-- SELECT 1
select 'Ok' Msg
, 1 Result
-- , @response Response -- ТАК при вызов из формы вернет оригинальный @response !!!
, 'Город: ' +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
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация
- API, Интеграции Создание сервиса API для сайта. Программный интерфейс веб-платформы Как сделать вебхук (webhook) Прием платежей через Яндекс.Кассу Онлайн-платежи. Интеграция с Робокассой (платежный шлюз) Zapier интеграция на платформе Falcon Space Интеграция API DaData.ru подсказки по адресам Интеграция коллтрекинга МАНГО ОФИС (режим Площадка) Интеграция API Курсы валют Центрального Банка РФ в веб-платформе Falcon Space Интеграция API Почта РФ Интеграция API Служба доставки СДЭК (CDEK) Интеграция API Служба доставки Деловые линии Интеграция API IpGeoBase Город по IP-адресу Интеграция импорт и парсинг файла CSV Интеграция API DaData.ru Город по IP-адресу Как вычислить расстояние между 2 точками с координатами через Google Maps Передача файлов по FTP Сканирование штрихкодов и QR кодов через камеру и с картинок Получение данных контрагента по ИНН Прием платежей на сайте через CloudPayments Программное взаимодействие через API между 2 разными экземплярами Falcon Как сделать интеграцию с Мой Склад Внедрение подсказок dadata на сайт Вывод точек на карте Яндекс. Интеграция с Яндекс Карты Интеграция с телефонией Zadarma.com Как передать скрытый параметр при исходящем запросе из Request процедуры в Response Получение данных о контрагенте - интеграция с сервисом ЗаЧестныйБизнес Интеграция с AMO CRM Как импортировать данные в базу CRM из Google Контакты Вход/регистрация через ВКонтакте(vk.com) Интеграция CRM с онлайн чатом на сайте (Replain) Загрузка на форме текстовых файлов и обработка их в процедуре SaveItem
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- HOWTO
- HOWTO Таблицы
- HOWTO Формы
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы