From 0f2d3007e2b4b0e4462836529f27b7a3bc3259e9 Mon Sep 17 00:00:00 2001 From: Vitaly the Alpaca Date: Wed, 17 Apr 2024 17:07:02 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20OPI=20->=20OInt=20?= =?UTF-8?q?(workflow)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OInt/core/Modules/OPI_Slack.os | 1 - OInt/core/Modules/OPI_Twitter.os | 191 +++++++++++++++++-------------- OInt/core/Modules/OPI_VK.os | 74 +++++++----- 3 files changed, 147 insertions(+), 119 deletions(-) diff --git a/OInt/core/Modules/OPI_Slack.os b/OInt/core/Modules/OPI_Slack.os index 2fe9a8dfe..5b3681816 100644 --- a/OInt/core/Modules/OPI_Slack.os +++ b/OInt/core/Modules/OPI_Slack.os @@ -74,7 +74,6 @@ КонецФункции - #КонецОбласти #Область РаботаСЧатами diff --git a/OInt/core/Modules/OPI_Twitter.os b/OInt/core/Modules/OPI_Twitter.os index 1a3169ab8..a62926a5b 100644 --- a/OInt/core/Modules/OPI_Twitter.os +++ b/OInt/core/Modules/OPI_Twitter.os @@ -346,109 +346,126 @@ OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); - MediaKey = "media_key"; - ProcessingInfo = "processing_info"; - MIS = "media_id_string"; - Command = "command"; - ВидЗапроса = "POST"; - Единица = 1024; - Количество = 4; - - СоответствиеMIME = Новый Соответствие; - СоответствиеMIME.Вставить("tweet_image", "image/jpeg"); - СоответствиеMIME.Вставить("tweet_video", "video/mp4"); - СоответствиеMIME.Вставить("tweet_gif" , "image/gif"); - + ВидЗапроса = "POST"; Параметры_ = ПолучитьСтандартныеПараметры(Параметры); URL = "https://upload.twitter.com/1.1/media/upload.json"; - Размер = Файл.Размер(); - + Если Тип = "tweet_image" Тогда Поля = Новый Структура; Поля.Вставить("media_data" , Base64Строка(Файл)); Поля.Вставить("media_category", Тип); - Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL); - - Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); + Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL); + Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Иначе - РазмерЧасти = Количество * Единица * Единица; - МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти); + Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_); - Поля = Новый Структура; - Поля.Вставить(Command , "INIT"); - Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер)); - Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип)); - Поля.Вставить("media_category" , Тип); - - Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL); - - ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); - KeyИнициализации = ОтветИнициализации[MediaKey]; - IDИнициализации = ОтветИнициализации[MIS]; - - Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда - Возврат ОтветИнициализации; - КонецЕсли; - - Счетчик = 0; - - Для Каждого Часть Из МассивЧтения Цикл - - Поля = Новый Структура; - Поля.Вставить(Command , "APPEND"); - Поля.Вставить("media_key" , KeyИнициализации); - Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик)); - Поля.Вставить("media" , Часть); - - Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, ВидЗапроса, URL); - - OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация); - - Счетчик = Счетчик + 1; - КонецЦикла; - - Поля = Новый Структура; - Поля.Вставить(Command , "FINALIZE"); - Поля.Вставить("media_id", IDИнициализации); - - СтатусОбработки = ПолучитьСтатусОбработки(Параметры_, Поля, URL); - - Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда - Возврат СтатусОбработки; - КонецЕсли; - - Поля = Новый Структура; - - Поля.Вставить(Command , "STATUS"); - Поля.Вставить("media_id", IDИнициализации); - - Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл - - Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "GET", URL); - Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация); - Информация = Ответ[ProcessingInfo]; + КонецЕсли; - Если Не ЗначениеЗаполнено(Информация) Тогда - Возврат Ответ; - КонецЕсли; - - СтатусОбработки = Информация["state"]; - - Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда - Возврат Ответ; - КонецЕсли; - - КонецЦикла; + Возврат Ответ; + +КонецФункции + +Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры) + + Единица = 1024; + Количество = 4; + MediaKey = "media_key"; + MIS = "media_id_string"; + Command = "command"; + Размер = Файл.Размер(); + + СоответствиеMIME = Новый Соответствие; + СоответствиеMIME.Вставить("tweet_image", "image/jpeg"); + СоответствиеMIME.Вставить("tweet_video", "video/mp4"); + СоответствиеMIME.Вставить("tweet_gif" , "image/gif"); + + РазмерЧасти = Количество * Единица * Единица; + МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти); + + Поля = Новый Структура; + Поля.Вставить(Command , "INIT"); + Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер)); + Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип)); + Поля.Вставить("media_category" , Тип); + + Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL); + + ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); + KeyИнициализации = ОтветИнициализации[MediaKey]; + IDИнициализации = ОтветИнициализации[MIS]; + + Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда + Возврат ОтветИнициализации; + КонецЕсли; + + Счетчик = 0; + + Для Каждого Часть Из МассивЧтения Цикл - Если СтатусОбработки = "failed" Тогда - ВызватьИсключение "Твиттер не смог обработать загруженное вами видео"; + Поля = Новый Структура; + Поля.Вставить(Command , "APPEND"); + Поля.Вставить("media_key" , KeyИнициализации); + Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик)); + Поля.Вставить("media" , Часть); + + Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL); + + OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация); + + Счетчик = Счетчик + 1; + + КонецЦикла; + + Поля = Новый Структура; + Поля.Вставить(Command , "FINALIZE"); + Поля.Вставить("media_id", IDИнициализации); + + СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL); + + Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда + Возврат СтатусОбработки; + КонецЕсли; + + Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры); + + Возврат Ответ; + +КонецФункции + +Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры) + + ProcessingInfo = "processing_info"; + Command = "command"; + Поля = Новый Структура; + + Поля.Вставить(Command , "STATUS"); + Поля.Вставить("media_id", IDИнициализации); + + Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл + + Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL); + Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация); + Информация = Ответ[ProcessingInfo]; + + Если Не ЗначениеЗаполнено(Информация) Тогда + Возврат Ответ; КонецЕсли; - КонецЕсли; + СтатусОбработки = Информация["state"]; + + Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда + Возврат Ответ; + КонецЕсли; + + КонецЦикла; + + Если СтатусОбработки = "failed" Тогда + ВызватьИсключение "Твиттер не смог обработать загруженное вами видео"; + КонецЕсли; Возврат Ответ; diff --git a/OInt/core/Modules/OPI_VK.os b/OInt/core/Modules/OPI_VK.os index 9fd35cada..bde4732d0 100644 --- a/OInt/core/Modules/OPI_VK.os +++ b/OInt/core/Modules/OPI_VK.os @@ -1840,39 +1840,13 @@ OPI_ПреобразованиеТипов.ПолучитьБулево(Основная); OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытая); - Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - PhotoID = "photo_id"; + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Ответ = ДобавитьПараметрКартинки(Картинка, ИДПодборки, Параметры_); - Если ЗначениеЗаполнено(Картинка) Тогда - - ИДФото = ПолучитьИДКартинки(Картинка, Параметры_, "Товар"); - - Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда - Возврат ИДФото; - КонецЕсли; - - Параметры_.Вставить(PhotoID, ИДФото); - - Иначе - - Если ЗначениеЗаполнено(ИДПодборки) Тогда - - Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры_); - - Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда - Возврат Подборки; - КонецЕсли; - - Если Не Подборки.Количество() = 0 Тогда - ИДФото = Подборки[0]["photo"]["id"]; - OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото); - Параметры_.Вставить(PhotoID, ИДФото); - КонецЕсли; - - КонецЕсли; - + Если ЗначениеЗаполнено(Ответ) Тогда + Возврат Ответ; КонецЕсли; - + Параметры_.Вставить("title" , Название); Параметры_.Вставить("main_album" , ?(Основная, 1, 0)); Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0)); @@ -1890,6 +1864,44 @@ КонецФункции +Функция ДобавитьПараметрКартинки(Знач Картинка, Знач ИДПодборки, Параметры) + + PhotoID = "photo_id"; + + Если ЗначениеЗаполнено(Картинка) Тогда + + ИДФото = ПолучитьИДКартинки(Картинка, Параметры, "Товар"); + + Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда + Возврат ИДФото; + КонецЕсли; + + Параметры.Вставить(PhotoID, ИДФото); + + Иначе + + Если ЗначениеЗаполнено(ИДПодборки) Тогда + + Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры); + + Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда + Возврат Подборки; + КонецЕсли; + + Если Не Подборки.Количество() = 0 Тогда + ИДФото = Подборки[0]["photo"]["id"]; + OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото); + Параметры.Вставить(PhotoID, ИДФото); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат ""; + +КонецФункции + Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры) Response = "response";