Вариант работы api в платном режиме. Может кому пригодится.
В бесплатном варианте, очень мало запросов.
&НаСервере
Функция ПреобразоватьАдрес(Знач Адрес, БезКорректировкиАдреса = Ложь, ГородПоиска = Неопределено)
ssl = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(
"ahunter.ru",,,,,
1, // таймаут в секундах
ssl // защищенное HTTPS соединение
);
//Соединение = Новый HTTPСоединение("ahunter.ru", 80);
//Запрос = Новый HTTPЗапрос("/site/demo/address?query=" + Адрес);
Запрос = Новый HTTPЗапрос("/site/cleanse/address?user=" + Объект.ТокенAhunter + ";output=xml;query=""" + Адрес + """");
Результат = Соединение.ОтправитьДляОбработки(Запрос);
ИсходныйТекст = Результат.ПолучитьТелоКакСтроку();
НовоеПредставлениеАдреса = ПреобразоватьАдресСервисаВПредставление(ИсходныйТекст, Адрес);
Возврат НовоеПредставлениеАдреса;
КонецФункции
&НаСервереБезКонтекста
Функция ПреобразоватьАдресСервисаВПредставление(ИсходныйТекст, Адрес)
СтруктураКонтактнойИнформации = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу(Перечисления.ТипыКонтактнойИнформации.Адрес);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(ИсходныйТекст);
Фабрика = Новый ФабрикаXDTO();
ОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML);
Попытка
СтруктураКонтактнойИнформации.Страна = ОбъектXDTO.Address.Country.name;
СтруктураКонтактнойИнформации.НаименованиеСтраны = ОбъектXDTO.Address.Country.name;
Для каждого Строка Из ОбъектXDTO.Address.Field Цикл
Если Строка.level = "Zip" Тогда
СтруктураКонтактнойИнформации.Индекс = Строка.name;
ИначеЕсли Строка.level = "Region" Тогда
СтруктураКонтактнойИнформации.Регион = Строка.name;
СтруктураКонтактнойИнформации.РегионСокращение = Строка.type;
ИначеЕсли Строка.level = "District" Тогда
СтруктураКонтактнойИнформации.Район = Строка.name;
СтруктураКонтактнойИнформации.РайонСокращение = Строка.type;
ИначеЕсли Строка.level = "City" Тогда
СтруктураКонтактнойИнформации.Город = Строка.name;
СтруктураКонтактнойИнформации.ГородСокращение = Строка.type;
ИначеЕсли Строка.level = "Place" Тогда
СтруктураКонтактнойИнформации.НаселенныйПункт = Строка.name;
СтруктураКонтактнойИнформации.НаселенныйПунктСокращение = Строка.type;
ИначеЕсли Строка.level = "Site" Тогда
//СтруктураКонтактнойИнформации. = Строка.name;
//СтруктураКонтактнойИнформации. = Строка.type;
ИначеЕсли Строка.level = "Street" Тогда
СтруктураКонтактнойИнформации.Улица = Строка.name;
СтруктураКонтактнойИнформации.УлицаСокращение = Строка.type;
ИначеЕсли Строка.level = "House" Тогда
СтруктураКонтактнойИнформации.Дом = Строка.name;
СтруктураКонтактнойИнформации.ТипДома = Строка.type;
ИначеЕсли Строка.level = "Building" Тогда
СтруктураКонтактнойИнформации.Корпус = Строка.name;
СтруктураКонтактнойИнформации.ТипКорпуса = Строка.type;
ИначеЕсли Строка.level = "Flat" Тогда
СтруктураКонтактнойИнформации.Квартира = Строка.name;
СтруктураКонтактнойИнформации.ТипКвартиры = Строка.type;
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Адрес не распознан: " + Адрес);
СтруктураКонтактнойИнформации.Представление = Адрес;
КонецПопытки;
НовоеПредставление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(СтруктураКонтактнойИнформации);
Возврат НовоеПредставление;
КонецФункции
Показать