diff --git a/.github/workflows/oint_test_VK.yml b/.github/workflows/oint_test_VK.yml index 8103dc67e..7f192c705 100644 --- a/.github/workflows/oint_test_VK.yml +++ b/.github/workflows/oint_test_VK.yml @@ -87,6 +87,10 @@ jobs: if: ${{ cancelled() }} == false run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьУдалитьПост" + - name: Создать/Удалить составной пост + if: ${{ cancelled() }} == false + run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСоставнойПост" + - name: Создать опрос if: ${{ cancelled() }} == false run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьОпрос" diff --git a/.github/workflows/oint_test_full.yml b/.github/workflows/oint_test_full.yml index 48726f05f..aa72ad058 100644 --- a/.github/workflows/oint_test_full.yml +++ b/.github/workflows/oint_test_full.yml @@ -213,6 +213,10 @@ jobs: if: ${{ cancelled() }} == false run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьУдалитьПост" + - name: Создать/Удалить составной пост + if: ${{ cancelled() }} == false + run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСоставнойПост" + - name: Создать опрос if: ${{ cancelled() }} == false run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьОпрос" diff --git a/OInt/core/Modules/OPI_VK.os b/OInt/core/Modules/OPI_VK.os index 02b7e080d..b5a2acc3c 100644 --- a/OInt/core/Modules/OPI_VK.os +++ b/OInt/core/Modules/OPI_VK.os @@ -74,7 +74,7 @@ // Параметры: // Текст - Строка - Текст поста - text // МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив картинок - pictures -// Рекламный - Булево - Признак ""Это реклама"" - ad +// Реклама - Булево - Признак ""Это реклама"" - ad // СсылкаПодЗаписью - Строка - Ссылка (URL) под записью - url // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // @@ -82,17 +82,14 @@ // Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Функция СоздатьПост(Знач Текст , Знач МассивКартинок - , Знач Рекламный = Ложь + , Знач Реклама = Ложь , Знач СсылкаПодЗаписью = "" , Знач Параметры = "") Экспорт - OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); - OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаПодЗаписью); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКартинок); - OPI_ПреобразованиеТипов.ПолучитьБулево(Рекламный); - + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - СтрокаВложений = ""; + МассивВложений = Новый Массив; Для Каждого КартинкаПоста Из МассивКартинок Цикл @@ -106,28 +103,58 @@ Возврат ОтветСоответствие; КонецЕсли; - ФотоID = "photo" - + OPI_Инструменты.ЧислоВСтроку(OwnerId) - + "_" - + OPI_Инструменты.ЧислоВСтроку(ObjectId); + OwnerId = OPI_Инструменты.ЧислоВСтроку(OwnerId); + ObjectId = OPI_Инструменты.ЧислоВСтроку(ObjectId); + + ФотоID = "photo" + OwnerId + "_" + ObjectId; - СтрокаВложений = СтрокаВложений + ФотоID + ","; + МассивВложений.Добавить(ФотоID); КонецЦикла; - СтрокаВложений = СтрокаВложений + СсылкаПодЗаписью; - - Параметры_.Вставить("message" , Текст); - Параметры_.Вставить("attachments" , СтрокаВложений); - Параметры_.Вставить("mark_as_ads" , ?(Рекламный, 1, 0)); - Параметры_.Вставить("close_comments" , ?(Рекламный, 1, 0)); - - Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_); + Ответ = СоздатьСоставнойПост(Текст, МассивВложений, Реклама, СсылкаПодЗаписью, Параметры); Возврат Ответ; КонецФункции +// Создать составной пост +// Создает пост на основе массива идетификаторов объектов (картинок, видео и др.) +// +// Параметры: +// Текст - Строка - Текст поста - text +// Объекты - Массив из Строка - Массив идентификаторов вида photo123_123 - objects +// Реклама - Булево - Признак ""Это реклама"" - ad +// СсылкаПодЗаписью - Строка - Ссылка (URL) под записью - url +// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK +Функция СоздатьСоставнойПост(Знач Текст + , Знач Объекты + , Знач Реклама = Ложь + , Знач СсылкаПодЗаписью = "" + , Знач Параметры = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); + OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаПодЗаписью); + OPI_ПреобразованиеТипов.ПолучитьБулево(Реклама); + + Параметры = ПолучитьСтандартныеПараметры(Параметры); + СтрокаВложений = СтрСоединить(Объекты, ","); + СтрокаВложений = СтрокаВложений + СсылкаПодЗаписью; + + Параметры.Вставить("message" , Текст); + Параметры.Вставить("attachments" , СтрокаВложений); + Параметры.Вставить("mark_as_ads" , ?(Реклама, 1, 0)); + Параметры.Вставить("close_comments" , ?(Реклама, 1, 0)); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры); + + Возврат Ответ; + +КонецФункции + // Удалить пост // Удаляет пост по id // @@ -346,8 +373,8 @@ КонецФункции -// Загрузить видео -// Загружает видео в группу +// Загрузить видео на сервер +// Загружает видео в группу с возможностью его дальнейшего использования // // Параметры: // Видео - Строка, ДвоичныеДанные - Файл видео - file @@ -358,7 +385,11 @@ // // Возвращаемое значение: // Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK -Функция ЗагрузитьВидео(Знач Видео, Знач Наименование, Знач Описание = "", Знач Альбом = "", Знач Параметры = "") Экспорт +Функция ЗагрузитьВидеоНаСервер(Знач Видео + , Знач Наименование + , Знач Описание = "" + , Знач Альбом = "" + , Знач Параметры = "") Экспорт Параметры = ПолучитьСтандартныеПараметры(Параметры); @@ -392,6 +423,74 @@ КонецФункции +// Загрузить фото на сервер +// Загружает фото на сервер для его дальнейшего использования +// +// Параметры: +// Картинка - Строка, ДвоичныеДанные - Файл картинки - file +// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json +// Вид - Строка - Вид загрузки (Пост, Товар, История, Опрос, Прочее) - type +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK +Функция ЗагрузитьФотоНаСервер(Знач Картинка, Знач Параметры = "", Знач Вид = "Пост") Экспорт + + Параметры = ПолучитьСтандартныеПараметры(Параметры); + Метод = ОпределитьМетодЗагрузкиИзображений(Вид); + Файлы = Новый Соответствие; + + Response = "response"; + URL = "api.vk.com/method/"; + Загрузка = URL + Метод["Загрузка"]; + Сохранение = URL + Метод["Сохранение"]; + + Если ТипЗнч(Картинка) = Тип("Строка") Тогда + КлючКартинка = СтрЗаменить(Картинка, ".", "___"); + OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); + Иначе + КлючКартинка = "image___jpeg"; + КонецЕсли; + + Файлы.Вставить(КлючКартинка, Картинка); + + Для Н = 1 По 5 Цикл + + Ответ = OPI_Инструменты.Get(Загрузка, Параметры); + Результат = Ответ[Response]; + + Если ЗначениеЗаполнено(Результат) Тогда + + URL = Результат["upload_url"]; + + Если Не ЗначениеЗаполнено(URL) Тогда + Возврат Ответ; + КонецЕсли; + + Иначе + Возврат Ответ; + КонецЕсли; + + Параметры.Вставить("upload_url", URL); + Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы); + + Если ТипЗнч(Ответ) = Тип("Соответствие") Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ТипЗнч(Ответ) <> Тип("Соответствие") Тогда + Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ); + КонецЕсли; + + ЗаполнитьПараметрыЗагрузкиФото(Метод, Ответ, Параметры); + + Ответ = OPI_Инструменты.Get(Сохранение, Параметры); + + Возврат Ответ; + +КонецФункции + #КонецОбласти #Область РаботаСОбсуждениями @@ -1710,63 +1809,6 @@ КонецФункции -Функция ЗагрузитьФотоНаСервер(Знач Картинка, Знач Параметры, Знач Вид = "Пост") - - Метод = ОпределитьМетодЗагрузкиИзображений(Вид); - Файлы = Новый Соответствие; - - Response = "response"; - URL = "api.vk.com/method/"; - Загрузка = URL + Метод["Загрузка"]; - Сохранение = URL + Метод["Сохранение"]; - - Если ТипЗнч(Картинка) = Тип("Строка") Тогда - КлючКартинка = СтрЗаменить(Картинка, ".", "___"); - OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); - Иначе - КлючКартинка = "image___jpeg"; - КонецЕсли; - - Файлы.Вставить(КлючКартинка, Картинка); - - Для Н = 1 По 5 Цикл - - Ответ = OPI_Инструменты.Get(Загрузка, Параметры); - Результат = Ответ[Response]; - - Если ЗначениеЗаполнено(Результат) Тогда - - URL = Результат["upload_url"]; - - Если Не ЗначениеЗаполнено(URL) Тогда - Возврат Ответ; - КонецЕсли; - - Иначе - Возврат Ответ; - КонецЕсли; - - Параметры.Вставить("upload_url", URL); - Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы); - - Если ТипЗнч(Ответ) = Тип("Соответствие") Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Если ТипЗнч(Ответ) <> Тип("Соответствие") Тогда - Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ); - КонецЕсли; - - ЗаполнитьПараметрыЗагрузкиФото(Метод, Ответ, Параметры); - - Ответ = OPI_Инструменты.Get(Сохранение, Параметры); - - Возврат Ответ; - -КонецФункции - Функция ОпределитьМетодЗагрузкиИзображений(Знач Вид) СоответствиеМетодов = Новый Соответствие; diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index 98d0585f3..50f2d26fb 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -818,6 +818,32 @@ КонецПроцедуры +Процедура ВК_СоздатьСоставнойПост() Экспорт + + Response = "response"; + Параметры = ПолучитьПараметрыВК(); + Текст = "Пост из автотеста"; + URL = "https://github.com/Bayselonarrend/OpenIntegrations"; + Картинка = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture"); + Видео = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Video"); + + ЗагрузкаКартинки = OPI_VK.ЗагрузитьФотоНаСервер(Картинка, Параметры)["response"][0]; + ЗагрузкаВидео = OPI_VK.ЗагрузитьВидеоНаСервер(Видео, "Новое видео", , , Параметры); + + ВладелецКартинки = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаКартинки["owner_id"]); + ВладелецВидео = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаВидео["owner_id"]); + + IDКартинки = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаКартинки["id"]); + IDВидео = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаВидео["video_id"]); + + МассивВложений = Новый Массив; + МассивВложений.Добавить("photo" + ВладелецКартинки + "_" + IDКартинки); + МассивВложений.Добавить("video" + ВладелецВидео + "_" + IDВидео); + + Результат = OPI_VK.СоздатьСоставнойПост(Текст, МассивВложений, , , Параметры); + +КонецПроцедуры + Процедура ВК_СоздатьОпрос() Экспорт Параметры = ПолучитьПараметрыВК(); diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index e19923cc4..a767feabf 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -109,6 +109,7 @@ НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте); + НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте);