В связи со спецификой работы поступила задача - нужно проверять телефоны по IMEI, и если они в розыске - бьем тревогу.
Первое, что нам необходимо, это наличие в конфигураторе КоннекторHTTP (//infostart.ru/public/709325/), это не реклама!
Это очень полезная обработка/библиотека, и я очень сильно жалею, что долго тянул время с переходом на нее ;)
Ну а тут у нас, собственно, метод, который и производит проверку, разбил метод на блоки, чтобы удобнее воспринимать информацию, код вроде бы самодокументируемый.
// Проверка мобильного телефона по IMEI на предмет нахождения его(телефона)
// в базе розыска МВД
//
// Параметры:
// IMEI - Строка - IMEI код мобильного телефона. Для определения кода IMEI, записанного в памяти телефона, наберите комбинацию *#06#.
// ОписаниеРезультата - Структура - выходной параметр. Данный параметр будет заполнен ТОЛЬКО в случае если мобильный телефон
// находится в розыске.
//
// Возвращаемое значение:
// Неопределено, Булево - возможны ТОЛЬКО 3(три) варианта ответа, описание вариантов ответа:
// - Неопределено - если произошла не предвиденная(ошибка при отправке запроса, ошибка при парсинге ответа и т.д.)
// ситуации и неудалось получить ответ;
// - Истина - если мобильный телефон находится в розыске (также в этом случае будет заполнен параметр ОписаниеРезультата);
// - Ложь - мобильный телефон не находится в розыске.
//
&НаСервере
Функция МобильныйТелефонНаходитсяВРозыске(Знач IMEI, ОписаниеРезультата = Неопределено)
// Инициализация результата.
Результат = Неопределено;
// Создание сессии.
Сессия = КоннекторHTTP.СоздатьСессию();
Ответ = КоннекторHTTP.Get("https://wanted.mvs.gov.ua/searchthing/",,, Сессия);
Если Ответ.КодСостояния <> 200 Тогда
Возврат Результат;
КонецЕсли;
// Получение идентификатора сессии.
ИдентификаторСессии = Неопределено;
Если Сессия.Cookies.Получить("wanted.mvs.gov.ua") = Неопределено
Или Сессия.Cookies["wanted.mvs.gov.ua"].Получить("/") = Неопределено
Или Сессия.Cookies["wanted.mvs.gov.ua"]["/"].Получить("PHPSESSID") = Неопределено
Или Не Сессия.Cookies["wanted.mvs.gov.ua"]["/"]["PHPSESSID"].Свойство("Значение", ИдентификаторСессии) Тогда
Возврат Результат;
КонецЕсли;
// Выполнение запроса на поиск.
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("IMEI", IMEI);
СтруктураДанных.Вставить("sestoken", ИдентификаторСессии);
Ответ = КоннекторHTTP.Post("https://wanted.mvs.gov.ua/searchthing/result/", СтруктураДанных,, Сессия);
Если Ответ.КодСостояния <> 200 Тогда
Возврат Результат;
КонецЕсли;
ТелоОтвета = КоннекторHTTP.КакТекст(Ответ, КодировкаТекста.UTF8);;
// Парсинг. Подготовка.
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТелоОтвета);
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
ДокументHTML.НормализоватьДокумент();
// Парсинг. Поиск поля которое отвечает за отрицательный ответ(т.е. когда такого телефона нет в базе)
// а значит мобильный телефон НЕ в розыске.
МассивЭлементовHTML = ДокументHTML.НайтиПоФильтру("
|{
| ""type"": ""intersection"",
| ""value"": [
| {
| ""type"": ""elementname"",
| ""value"": {
| ""value"": ""div"",
| ""operation"": ""equals""
| }
| },
| {
| ""type"": ""hasattribute"",
| ""value"": {
| ""value"": ""id"",
| ""operation"": ""nameequals""
| }
| },
| {
| ""type"": ""hasattribute"",
| ""value"": {
| ""value"": ""TextNotFind"",
| ""operation"": ""valueequals""
| }
| }
| ]
|}
|");
Если МассивЭлементовHTML.Количество() Тогда
Результат = Ложь;
Возврат Результат;
КонецЕсли;
// Парсинг. Поиск полей с дополнительной информацией.
// Если выполнение метода дошло до этого этапа то телефон с указанным IMEI есть в базе МВД и он в розыске.
// Присваевать значение Истина в параметр Результат, будем только после удачного парсинга.
МассивЭлементовHTML = ДокументHTML.НайтиПоФильтру("
|{
| ""type"": ""intersection"",
| ""value"": [
| {
| ""type"": ""elementname"",
| ""value"": {
| ""value"": ""li"",
| ""operation"": ""equals""
| }
| },
| {
| ""type"": ""hasattribute"",
| ""value"": {
| ""value"": ""class"",
| ""operation"": ""nameequals""
| }
| },
| {
| ""type"": ""hasattribute"",
| ""value"": {
| ""value"": ""clearfix"",
| ""operation"": ""valueequals""
| }
| }
| ]
|}
|");
Если МассивЭлементовHTML.Количество() Тогда
ОписаниеРезультата = Новый Структура;
ОписаниеРезультата.Вставить("ПодразделениеМВД");
ОписаниеРезультата.Вставить("IMEI");
ОписаниеРезультата.Вставить("Модель");
Для Индекс = 0 По МассивЭлементовHTML.ВГраница() Цикл
ЭлементHTML = МассивЭлементовHTML[Индекс];
Если Индекс = 0 Тогда
ОписаниеРезультата.ПодразделениеМВД = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
Продолжить;
КонецЕсли;
Если Индекс = 1 Тогда
ОписаниеРезультата.IMEI = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
Продолжить;
КонецЕсли;
Если Индекс = 2 Тогда
ОписаниеРезультата.Модель = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
Продолжить;
КонецЕсли;
КонецЦикла;
Результат = Истина;
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
Если будет необходимость, то пишите в комментариях или ставьте плюсики, сделаю независимую (без использования КоннекторHTTP) обработку.