diff --git a/OInt/core/Modules/OPI_Telegram.os b/OInt/core/Modules/OPI_Telegram.os index 562e606d28..8d96a76f7f 100644 --- a/OInt/core/Modules/OPI_Telegram.os +++ b/OInt/core/Modules/OPI_Telegram.os @@ -390,6 +390,7 @@ OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата); OPI_ПреобразованиеТипов.ПолучитьСтроку(Вопрос); + OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивОтветов); OPI_ПреобразованиеТипов.ПолучитьСтроку(МассивОтветов, Истина); OPI_ПреобразованиеТипов.ПолучитьБулево(Анонимный); @@ -1000,7 +1001,6 @@ OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDТемы); - Параметры_ = Новый Структура; Параметры_.Вставить("name" , Заголовок); Параметры_.Вставить("chat_id" , IDЧата); diff --git a/OInt/core/Modules/OPI_VK.os b/OInt/core/Modules/OPI_VK.os index 8eb2e1df64..14c8efb2ee 100644 --- a/OInt/core/Modules/OPI_VK.os +++ b/OInt/core/Modules/OPI_VK.os @@ -94,26 +94,14 @@ Для Каждого КартинкаПоста Из МассивКартинок Цикл - Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - Ответ = ЗагрузитьФотоНаСервер(КартинкаПоста, Параметры_); - - ОтветМассив = Ответ.Получить("response"); - - Если Не ЗначениеЗаполнено(ОтветМассив) Или Не ТипЗнч(ОтветМассив) = Тип("Массив") Тогда - Возврат Ответ; - Иначе - Если ОтветМассив.Количество() = 0 Тогда - Возврат Ответ; - Иначе - ОтветСоответствие = ОтветМассив[0]; - КонецЕсли; - КонецЕсли; + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + ОтветСоответствие = ПолучитьСоответствиеКартинки(КартинкаПоста, Параметры_, "Пост"); OwnerId = ОтветСоответствие.Получить("owner_id"); ObjectId = ОтветСоответствие.Получить("id"); Если Не ЗначениеЗаполнено(OwnerId) Или Не ЗначениеЗаполнено(ObjectId) Тогда - Возврат Ответ; + Возврат ОтветСоответствие; КонецЕсли; ФотоID = "photo" @@ -594,8 +582,7 @@ OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); - - + Параметры_.Вставить("owner_id" , IDСтены); Параметры_.Вставить("from_group" , GroupId); Параметры_.Вставить("post_id" , IDПоста); @@ -643,8 +630,7 @@ Иначе Возврат Ответ; КонецЕсли; - - + КонецФункции #КонецОбласти @@ -669,7 +655,7 @@ Параметры_ = ПолучитьСтандартныеПараметры(Параметры); ДатаНачала = OPI_Инструменты.UNIXTime(ДатаНачала); - ДатаОкончания = OPI_Инструменты.UNIXTime(ДатаОкончания);; + ДатаОкончания = OPI_Инструменты.UNIXTime(ДатаОкончания); Параметры_.Вставить("timestamp_from", ДатаНачала); Параметры_.Вставить("timestamp_to" , ДатаОкончания); @@ -1050,9 +1036,9 @@ // "Вес" : "", // "SKU" : "", // "ДоступныйОстаток" : "1" -//} +// } // Параметры: -// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь к .json +// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь // Подборка - Строка - ID подборка для помещения товара, если необходимо - sel // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // @@ -1083,10 +1069,10 @@ // "Вес" : "", // "SKU" : "", // "ДоступныйОстаток" : "1" -//} +// } // Параметры: // Товар - Число,Строка - Идентификатор изменяемого товара - item -// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь к .json +// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь // Подборка - Строка - Идентификатор новой подборки, если необходимо - sel // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // @@ -1659,6 +1645,69 @@ КонецФункции +Функция ПолучитьИДКартинки(Знач Картинка, Знач Параметры, Знач Вид) + + Response = "response"; + Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид); + Результат = Ответ[Response]; + + Если ЗначениеЗаполнено(Результат) Тогда + ИДФото = Результат["photo_id"]; + + Если Не ЗначениеЗаполнено(ИДФото) Тогда + Возврат Ответ; + КонецЕсли; + + Иначе + Возврат Ответ; + КонецЕсли; + + ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); + Возврат ИДФото; + +КонецФункции + +Функция ПолучитьСоответствиеКартинки(Знач Картинка, Знач Параметры, Знач Вид) + + Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид); + ОтветМассив = Ответ.Получить("response"); + + Если Не ЗначениеЗаполнено(ОтветМассив) Или Не ТипЗнч(ОтветМассив) = Тип("Массив") Тогда + Возврат Ответ; + Иначе + Если ОтветМассив.Количество() = 0 Тогда + Возврат Ответ; + Иначе + ОтветСоответствие = ОтветМассив[0]; + КонецЕсли; + КонецЕсли; + + Возврат ОтветСоответствие; + +КонецФункции + +Функция ПолучитьМассивПодборок(Знач Подборки, Знач Параметры = "") + + Response = "response"; + Подборки = ПолучитьПодборкиПоИД(Подборки, Параметры); + Результат = Подборки[Response]; + + Если ЗначениеЗаполнено(Результат) Тогда + + МассивПодборок = Результат["items"]; + + Если Не ЗначениеЗаполнено(МассивПодборок) Тогда + Возврат Подборки; + КонецЕсли; + + Иначе + Возврат Подборки; + КонецЕсли; + + Возврат МассивПодборок; + +КонецФункции + Функция ЗагрузитьФотоНаСервер(Знач Картинка, Знач Параметры, Знач Вид = "Пост") Метод = ОпределитьМетодЗагрузкиИзображений(Вид); @@ -1822,7 +1871,6 @@ , Знач Скрытая = Ложь , Знач Параметры = "") - OPI_ПреобразованиеТипов.ПолучитьСтроку(Название); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДПодборки); OPI_ПреобразованиеТипов.ПолучитьБулево(Основная); @@ -1830,45 +1878,26 @@ Параметры_ = ПолучитьСтандартныеПараметры(Параметры); PhotoID = "photo_id"; - Response = "response"; Если ЗначениеЗаполнено(Картинка) Тогда - Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Товар"); - Результат = Ответ[Response]; + ИДФото = ПолучитьИДКартинки(Картинка, Параметры_, "Товар"); - Если ЗначениеЗаполнено(Результат) Тогда - ИДФото = Результат[PhotoID]; - - Если Не ЗначениеЗаполнено(ИДФото) Тогда - Возврат Ответ; - КонецЕсли; - - Иначе - Возврат Ответ; - КонецЕсли; - - OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото); + Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда + Возврат ИДФото; + КонецЕсли; + Параметры_.Вставить(PhotoID, ИДФото); Иначе Если ЗначениеЗаполнено(ИДПодборки) Тогда - Подборки = ПолучитьПодборкиПоИД(ИДПодборки, Параметры_); - Результат = Подборки[Response]; + Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры_); - Если ЗначениеЗаполнено(Результат) Тогда - - Подборки = Результат["items"]; - - Если Не ЗначениеЗаполнено(Подборки) Тогда - Возврат Ответ; - КонецЕсли; - - Иначе - Возврат Ответ; - КонецЕсли; + Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда + Возврат Подборки; + КонецЕсли; Если Не Подборки.Количество() = 0 Тогда ИДФото = Подборки[0]["photo"]["id"]; @@ -2005,25 +2034,15 @@ Если МассивФото.Количество() > 0 Тогда СтрокаФотографий = ""; - Response = "response"; Для Каждого Фото Из МассивФото Цикл - Ответ = ЗагрузитьФотоНаСервер(Фото, Параметры, "Товар"); - Результат = Ответ[Response]; - - Если ЗначениеЗаполнено(Результат) Тогда - ИДФото = Результат["photo_id"]; - - Если Не ЗначениеЗаполнено(ИДФото) Тогда - Возврат; - КонецЕсли; - - Иначе - Возврат; - КонецЕсли; - - ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); + ИДФото = ПолучитьИДКартинки(Фото, Параметры, "Товар"); + + Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда + Возврат; + КонецЕсли; + СтрокаФотографий = СтрокаФотографий + ИДФото + ","; КонецЦикла; diff --git a/OInt/core/Modules/OPI_Viber.os b/OInt/core/Modules/OPI_Viber.os index c0c821d254..f27ad34836 100644 --- a/OInt/core/Modules/OPI_Viber.os +++ b/OInt/core/Modules/OPI_Viber.os @@ -198,7 +198,7 @@ // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // Расширение - Строка - Расширение файла - ext -// Размер - Число - Размер файла. Если не заполнен > определяется автоматически, но при этом происходит скачивание файла - size +// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size // // Возвращаемое значение: // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index e2d0262c16..b5d13a3b0e 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -29,6 +29,7 @@ // BSLLS:IncorrectLineBreak-off // BSLLS:UsingServiceTag-off // BSLLS:UnusedParameters-off +// BSLLS:DuplicateStringLiteral-off // @skip-check undefined-variable @@ -220,6 +221,7 @@ МассивРезультатов = Новый Массив; МассивРезультатов.Добавить(OPI_Telegram.ОтправитьАудио(Токен, IDЧата , Текст, Аудио)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьАудио(Токен, IDКанала, Текст, Аудио)); + OPI_Инструменты.Пауза(5); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьАудио(Токен, IDЧата , Текст, ИВФ)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьАудио(Токен, IDКанала, Текст, ИВФ)); @@ -253,6 +255,7 @@ МассивРезультатов = Новый Массив; МассивРезультатов.Добавить(OPI_Telegram.ОтправитьДокумент(Токен, IDЧата , Текст, Документ)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьДокумент(Токен, IDКанала, Текст, Документ)); + OPI_Инструменты.Пауза(5); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьДокумент(Токен, IDЧата , Текст, ИВФ)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьДокумент(Токен, IDКанала, Текст, ИВФ)); @@ -281,12 +284,14 @@ IDКанала = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Telegram_ChannelID"); Текст = "Сообщение из автоматического теста"; Гифка = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("GIF"); + ГифкаURL = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GIF"); ИВФ = ПолучитьИмяВременногоФайла("gif"); Гифка.Записать(ИВФ); МассивРезультатов = Новый Массив; МассивРезультатов.Добавить(OPI_Telegram.ОтправитьГифку(Токен, IDЧата , Текст, Гифка)); - МассивРезультатов.Добавить(OPI_Telegram.ОтправитьГифку(Токен, IDКанала, Текст, Гифка)); + МассивРезультатов.Добавить(OPI_Telegram.ОтправитьГифку(Токен, IDКанала, Текст, ГифкаURL)); + OPI_Инструменты.Пауза(5); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьГифку(Токен, IDЧата , Текст, ИВФ)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьГифку(Токен, IDКанала, Текст, ИВФ)); @@ -316,13 +321,26 @@ Текст = "Сообщение из автоматического теста"; Картинка = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture"); + КартинкаURL = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture"); + КартинкаURL2 = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture2"); ИВФ_Картинка = ПолучитьИмяВременногоФайла("png"); Картинка.Записать(ИВФ_Картинка); Видео = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Video"); ИВФ_Видео = ПолучитьИмяВременногоФайла("mp4"); Видео.Записать(ИВФ_Видео); - + + JSON = + "{ + | """ + КартинкаURL + """ : ""photo"", + | """ + КартинкаURL2 + """ : ""photo"" + |}"; + + ИВФ_JSON = ПолучитьИмяВременногоФайла("json"); + Документ = Новый ТекстовыйДокумент(); + Документ.УстановитьТекст(JSON); + Документ.Записать(ИВФ_JSON); + МедиагруппаЧат = Новый Соответствие; МедиагруппаЧат.Вставить(Картинка , "photo"); МедиагруппаЧат.Вставить(ИВФ_Видео, "video"); @@ -333,7 +351,10 @@ МассивРезультатов = Новый Массив; МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDЧата, Текст, МедиагруппаЧат)); + МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDЧата, Текст, ИВФ_JSON)); + OPI_Инструменты.Пауза(5); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDКанала, Текст, МедиагруппаКанал)); + МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDКанала, Текст, JSON)); Для Каждого Результат Из МассивРезультатов Цикл @@ -347,6 +368,7 @@ УдалитьФайлы(ИВФ_Картинка); УдалитьФайлы(ИВФ_Видео); + УдалитьФайлы(ИВФ_JSON); OPI_Инструменты.Пауза(5); @@ -421,10 +443,14 @@ МассивОтветов.Добавить("Красный"); МассивОтветов.Добавить("Желтый"); МассивОтветов.Добавить("Зеленый"); + МассивОтветов.Добавить("Синий"); + + СтрочныйМассив = "['Красный', 'Желтый','Зеленый' ,'Синий']"; МассивРезультатов = Новый Массив; МассивРезультатов.Добавить(OPI_Telegram.ОтправитьОпрос(Токен, IDЧата , Вопрос, МассивОтветов, Ложь)); МассивРезультатов.Добавить(OPI_Telegram.ОтправитьОпрос(Токен, IDКанала, Вопрос, МассивОтветов, Истина)); + МассивРезультатов.Добавить(OPI_Telegram.ОтправитьОпрос(Токен, IDКанала, Вопрос, СтрочныйМассив, Истина)); Для Каждого Результат Из МассивРезультатов Цикл diff --git a/OInt/tools/Modules/OPI_ПреобразованиеТипов.os b/OInt/tools/Modules/OPI_ПреобразованиеТипов.os index ab7bcfeac1..726d858985 100644 --- a/OInt/tools/Modules/OPI_ПреобразованиеТипов.os +++ b/OInt/tools/Modules/OPI_ПреобразованиеТипов.os @@ -80,9 +80,7 @@ ИсходноеЗначение = Значение; - Если ТипЗнч(Значение) = Тип("Структура") - Или ТипЗнч(Значение) = Тип("Соответствие") - Или ТипЗнч(Значение) = Тип("Массив") Тогда + Если ЭтоКоллекция(Значение) Тогда Возврат; Иначе @@ -117,9 +115,7 @@ Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); ЧтениеJSON.Закрыть(); - Если (Не ТипЗнч(Значение) = Тип("Структура") - И Не ТипЗнч(Значение) = Тип("Соответствие") - И Не ТипЗнч(Значение) = Тип("Массив")) Или Не ЗначениеЗаполнено(Значение) Тогда + Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда Значение = ИсходноеЗначение; ПолучитьМассив(Значение); @@ -142,14 +138,16 @@ Если ТипЗнч(Значение) = Тип("Строка") И СтрНачинаетсяС(Значение, "[") И СтрЗаканчиваетсяНа(Значение, "]") Тогда + + ЗапятаяВКавычках = "','"; Значение = СтрЗаменить(Значение, "['" , ""); Значение = СтрЗаменить(Значение, "']" , ""); - Значение = СтрЗаменить(Значение, "', '" , "','"); - Значение = СтрЗаменить(Значение, "' , '", "','"); - Значение = СтрЗаменить(Значение, "' ,'" , "','"); + Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках); + Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках); + Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках); - Значение = СтрРазделить(Значение, "','", Ложь); + Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь); Для Н = 0 По Значение.ВГраница() Цикл Значение[Н] = СокрЛП(Значение[Н]); @@ -195,9 +193,7 @@ Попытка - Если ТипЗнч(Значение) = Тип("Строка") - Или ТипЗнч(Значение) = Тип("Число") - Или ТипЗнч(Значение) = Тип("Дата") Тогда + Если ЭтоСимвольное(Значение) Тогда Если Не ИзИсточника Тогда Значение = OPI_Инструменты.ЧислоВСтроку(Значение); @@ -234,9 +230,7 @@ Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); - ИначеЕсли ТипЗнч(Значение) = Тип("Массив") - Или ТипЗнч(Значение) = Тип("Структура") - Или ТипЗнч(Значение) = Тип("Соответствие") Тогда + ИначеЕсли ЭтоКоллекция(Значение) Тогда Значение = OPI_Инструменты.JSONСтрокой(Значение); @@ -257,19 +251,40 @@ Возврат; КонецЕсли; + Дата = "Дата"; + Попытка - Если ТипЗнч(Значение) = Тип("Дата") Тогда + Если ТипЗнч(Значение) = Тип(Дата) Тогда Возврат; Иначе - Значение = XMLЗначение(Тип("Дата"), Значение); + Значение = XMLЗначение(Тип(Дата), Значение); КонецЕсли; Исключение - ООД = Новый ОписаниеТипов("Дата"); + ООД = Новый ОписаниеТипов(Дата); Значение = ООД.ПривестиЗначение(Значение); КонецПопытки; КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоКоллекция(Знач Значение) + + Возврат ТипЗнч(Значение) = Тип("Массив") + Или ТипЗнч(Значение) = Тип("Структура") + Или ТипЗнч(Значение) = Тип("Соответствие"); + +КонецФункции + +Функция ЭтоСимвольное(Знач Значение) + + Возврат ТипЗнч(Значение) = Тип("Строка") + Или ТипЗнч(Значение) = Тип("Число") + Или ТипЗнч(Значение) = Тип("Дата"); + +КонецФункции +#КонецОбласти diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index fd6cf0cd1e..f158462d71 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -294,7 +294,6 @@ КонецПроцедуры - #КонецОбласти #КонецОбласти