1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-11-28 09:08:38 +02:00

Merge remote-tracking branch 'origin/dev'

This commit is contained in:
Anton 2024-02-25 13:50:14 +03:00
commit 126f0d0e51
10 changed files with 984 additions and 231 deletions

View File

@ -24,6 +24,120 @@
#Область ПрограммныйИнтерфейс
#Область РаботаСМетаданнымиКалендарей
// Создать календарь.
//
// Параметры:
// Токен - Строка - Токен
// Наименование - Строка - Наименование создаваемого календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура;
Параметры.Вставить("summary" , Наименование);
Параметры.Вставить("timeZone", ЧасовойПояс());
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Изменить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Наименование - Строка - Новое наименование
// Описание - Строка - Новое описание календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ИзменитьМетаданныеКалендаря(Знач Токен
, Знач Календарь
, Знач Наименование = ""
, Знач Описание = "") Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Параметры = Новый Структура;
Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование);
КонецЕсли;
Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание);
КонецЕсли;
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Возврат Ответ;
КонецФункции
// Очистить основной календарь.
//
// Параметры:
// Токен - Строка - Токен
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
Возврат Ответ;
КонецФункции
// Удалить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСоСпискомКалендарей
// Получить список календарей.
@ -66,74 +180,66 @@
КонецФункции
#КонецОбласти
#Область РаботаСКалендарями
// Создать календарь.
//
// Параметры:
// Токен - Строка - Токен
// Наименование - Строка - Наименование создаваемого календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура;
Параметры.Вставить("summary", Наименование);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить календарь.
// Получить календарь списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ПолучитьКалендарь(Знач Токен, Знач Календарь) Экспорт
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Изменить календарь.
// Удалить календарь из списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Наименование - Строка - Новое наименование
// Описание - Строка - Новое описание календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ИзменитьКалендарь(Знач Токен, Знач Календарь, Знач Наименование = "", Знач Описание = "") Экспорт
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Параметры = Новый Структура;
Возврат Ответ;
КонецФункции
// Изменить календарь списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// ОсновнойЦвет - Строка - HEX основного цвета (#ffffff)
// ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff)
// Скрытый - Булево - Скрытый календарь
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ИзменитьКалендарьСписка(Знач Токен
, Знач Календарь
, Знач ОсновнойЦвет
, Знач ДополнительныйЦвет
, Знач Скрытый = Ложь) Экспорт
Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование);
КонецЕсли;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание);
КонецЕсли;
Параметры = Новый Соответствие;
Параметры.Вставить("hidden" , Скрытый);
Параметры.Вставить("foregroundColor", ОсновнойЦвет);
Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
@ -141,19 +247,144 @@
КонецФункции
// Удалить календарь.
#КонецОбласти
#Область РаботаССобытиями
// Получить описание события.
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Пустой макет события
Функция ПолучитьОписаниеСобытия() Экспорт
Час = 3600;
Событие = Новый Соответствие;
Событие.Вставить("Описание" , ""); // Описание события
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
Событие.Вставить("ДатаНачала" , ТекущаяДатаСеанса()); // Дата начала события
Событие.Вставить("ДатаОкончания" , Событие["ДатаНачала"] + Час); // Дата окончания события
Событие.Вставить("МассивURLФайловВложений", Новый Соответствие); // Ключ - название, Значение - URL к файлу
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам
Возврат Событие;
КонецФункции
// Получить список событий.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
// Соответствие Из КлючИЗначение - Массив соответствий событий
Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
МассивСобытий = Новый Массив;
ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
Возврат МассивСобытий;
КонецФункции
// Получить событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Событие - Строка - ID события
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь
+ "/events/"
+ Событие;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Создать событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
КонецФункции
// Переместить событие.
//
// Параметры:
// Токен - Строка - Токен
// КалендарьИсточник - Строка - ID календаря источника
// КалендарьПриемник - Строка - ID календаря приемника
// Событие - Строка - ID события календаря источника
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ КалендарьИсточник
+ "/events/"
+ Событие
+ "/move?destination="
+ КалендарьПриемник;
Ответ = OPI_Инструменты.Post(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Изменить событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// ОписаниеСобытия - Строка - Новое описание события
// Событие - Строка - ID события
//
// Возвращаемое значение:
// HTTPОтвет - Изменить событие
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
КонецФункции
// Удалить событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Событие - Строка - ID события
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь
+ "/events/"
+ Событие;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ;
@ -174,8 +405,103 @@
КонецФункции
Функция ПреобразоватьДату(Знач Дата)
СтруктураДаты = Новый Структура;
Если Не ТипЗнч(Дата) = Тип("Дата") Тогда
Возврат Неопределено;
КонецЕсли;
Если Дата = НачалоДня(Дата) Тогда
ФорматДаты = "ДФ=yyyy-MM-dd";
Поле = "date";
Иначе
ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
Поле = "dateTime";
КонецЕсли;
Дата = Формат(Дата, ФорматДаты);
СтруктураДаты.Вставить(Поле , Дата);
СтруктураДаты.Вставить("timeZone", ЧасовойПояс());
Возврат СтруктураДаты;
КонецФункции
Функция ПреобразоватьВложения(Знач Вложения)
МассивВложений = Новый Массив;
Если ТипЗнч(Вложения) = Тип("Соответствие") Тогда
Для Каждого Вложение Из Вложения Цикл
ТекущеВложение = Новый Структура;
ТекущеВложение.Вставить("title" , Вложение.Ключ);
ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
МассивВложений.Добавить(ТекущеВложение);
КонецЦикла;
КонецЕсли;
Если МассивВложений.Количество() > 0 Тогда
Возврат МассивВложений;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Существующее = ЗначениеЗаполнено(Событие);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь
+ "/events"
+ ?(Существующее, "/" + Событие, "");
Дата0 = ОписаниеСобытия["ДатаНачала"];
Дата1 = ОписаниеСобытия["ДатаОкончания"];
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
Вложения = ПреобразоватьВложения(Вложения);
Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено
, Ложь
, ОписаниеСобытия["ОтправлятьУведомления"]);
Параметры = Новый Структура;
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
Параметры.Вставить("attachments", Вложения);
ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false"));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);
Если Существующее Тогда
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Иначе
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
КонецЕсли;
Возврат Ответ;
КонецФункции
Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "")
Items = "items";
NPT = "nextPageToken";
Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда
@ -186,8 +512,8 @@
,
, Заголовки);
Календари = Результат["items"];
Страница = Результат["nextPageToken"];
Календари = Результат[Items];
Страница = Результат[NPT];
Для Каждого Календарь Из Календари Цикл
МассивКалендарей.Добавить(Календарь);
@ -199,4 +525,31 @@
КонецПроцедуры
Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "")
Items = "items";
NPT = "nextPageToken";
Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница);
КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
,
, Заголовки);
События = Результат[Items];
Страница = Результат[NPT];
Для Каждого Событие Из События Цикл
МассивСобытий.Добавить(Событие);
КонецЦикла;
Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -111,4 +111,5 @@
Возврат СтрСоединить(МассивРазрешений, " ");
КонецФункции
#КонецОбласти

View File

@ -286,6 +286,7 @@
МассивМедиа = Новый Массив;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
MIS = "media_id_string";
Если ЗначениеЗаполнено(МассивФайлов) Тогда
@ -301,7 +302,7 @@
ФайлОтправки = Новый ДвоичныеДанные(ФайлОтправки);
КонецЕсли;
IDМедиа = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_)["media_id_string"];
IDМедиа = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_)[MIS];
МассивМедиа.Добавить(IDМедиа);
КонецЦикла;
@ -320,6 +321,9 @@
Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры)
ProcessingInfo = "processing_info";
MediaKey = "media_key";
MIS = "media_id_string";
Command = "command";
ВидЗапроса = "POST";
Единица = 1024;
@ -362,8 +366,8 @@
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации["media_key"];
IDИнициализации = ОтветИнициализации["media_id_string"];
KeyИнициализации = ОтветИнициализации[MediaKey];
IDИнициализации = ОтветИнициализации[MIS];
Счетчик = 0;
Для Каждого Часть Из МассивЧтения Цикл
@ -390,7 +394,7 @@
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
СтатусОбработки = Ответ["processing_info"]["state"];
СтатусОбработки = Ответ[ProcessingInfo]["state"];
Поля = Новый Структура;
Поля.Вставить(Command , "STATUS");
@ -400,7 +404,7 @@
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "GET", URL);
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
СтатусОбработки = Ответ["processing_info"]["state"];
СтатусОбработки = Ответ[ProcessingInfo]["state"];
КонецЦикла;

View File

@ -141,6 +141,8 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.getPhotoUploadServer", Параметры_);
Response = "response";
Hash = "hash";
Photo = "photo";
URL = Ответ[Response]["upload_url"];
IDФото = "";
@ -162,8 +164,8 @@
Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, Файлы);
Параметры_.Вставить("hash" , Ответ["hash"]);
Параметры_.Вставить("photo" , Ответ["photo"]);
Параметры_.Вставить(Hash , Ответ[Hash]);
Параметры_.Вставить(Photo , Ответ[Photo]);
Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_);
IDФото = Ответ.Получить(Response)["id"];
@ -543,13 +545,14 @@
// Строка - Сокращенный URL
Функция СократитьСсылку(Знач URL, Знач Параметры = "") Экспорт
Response = "response";
Параметры_ = Новый Структура;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("url", URL);
Ответ = OPI_Инструменты.Get("https://api.vk.com/method/utils.getShortLink", Параметры_);
Возврат Ответ["response"]["short_url"];
Возврат Ответ[Response]["short_url"];
КонецФункции
@ -597,6 +600,7 @@
МассивОтветов = Новый Массив;
МассивНабора = Новый Массив;
МаксимумПостов = 30;
Response = "response";
Для Каждого Пост Из МассивИДПостов Цикл
@ -608,7 +612,7 @@
Параметры_.Вставить("post_ids", СтрокаНомеров);
Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
МассивСтатистики = Статистика["response"];
МассивСтатистики = Статистика[Response];
Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
МассивОтветов.Добавить(ЭлементСтатистики);
@ -624,7 +628,7 @@
Параметры_.Вставить("post_ids", СтрокаНомеров);
Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
МассивСтатистики = Статистика["response"];
МассивСтатистики = Статистика[Response];
Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
МассивОтветов.Добавить(ЭлементСтатистики);
@ -795,13 +799,14 @@
// Соответствие Из Строка - Ключ - ID, Значение - Имя
Функция ПолучитьСписокКатегорийТоваров(Знач Параметры = "") Экспорт
Response = "response";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);
Количество = Ответ["response"]["count"];
Количество = Ответ[Response]["count"];
Параметры_.Вставить("count", Количество);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);
Категории = Ответ["response"]["items"];
Категории = Ответ[Response]["items"];
СоответствиеКатегорий = Новый Соответствие;
@ -1199,10 +1204,11 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера
Функция ПолучитьСписокСвойств(Знач Параметры = "") Экспорт
Response = "response";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getProperties", Параметры_);
Свойства = Ответ["response"]["items"];
Свойства = Ответ[Response]["items"];
Возврат Свойства;
@ -1435,6 +1441,7 @@
Функция ЗагрузитьФотоНаСервер(Знач Картинка, Параметры, Знач Вид = "Пост")
Response = "response";
Файлы = Новый Соответствие;
Метод = ОпределитьМетодЗагрузкиИзображений(Вид);
URL = "api.vk.com/method/";
@ -1454,7 +1461,7 @@
Файлы.Вставить(КлючКартинка, ЗначениеКартинка);
Ответ = OPI_Инструменты.Get(Загрузка, Параметры);
URL = Ответ["response"]["upload_url"];
URL = Ответ[Response]["upload_url"];
Параметры.Вставить("upload_url", URL);
Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы);
@ -1532,7 +1539,8 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("v", "5.199");
Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка);
Response = "response";
Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка);
ЗаполнитьПоляЗапросаТовара(ОписаниеТовара, Параметры_);
@ -1546,7 +1554,7 @@
Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);
Если Не ЗначениеЗаполнено(ИДТовара) Тогда
ИДТовара = Ответ["response"]["market_item_id"];
ИДТовара = Ответ[Response]["market_item_id"];
ИДТовара = OPI_Инструменты.ЧислоВСтроку(ИДТовара);
КонецЕсли;
@ -1568,11 +1576,12 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
PhotoID = "photo_id";
Response = "response";
Если ЗначениеЗаполнено(Картинка) Тогда
Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Товар");
ИДФото = Ответ["response"][PhotoID];
ИДФото = Ответ[Response][PhotoID];
ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
Параметры_.Вставить(PhotoID, ИДФото);
@ -1582,7 +1591,7 @@
Если ЗначениеЗаполнено(ИДПодборки) Тогда
Подборки = ПолучитьПодборкиПоИД(ИДПодборки, Параметры_);
Подборки = Подборки["response"]["items"];
Подборки = Подборки[Response]["items"];
Если Не Подборки.Количество() = 0 Тогда
ИДФото = Подборки[0]["photo"]["id"];
@ -1612,7 +1621,8 @@
КонецФункции
Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры)
Response = "response";
Способ = Метод["Способ"];
СтандартныйСпособ = 1;
НовыйСпособ = 2;
@ -1644,7 +1654,7 @@
Иначе
Параметры.Вставить("upload_results", Ответ["response"]["upload_result"]);
Параметры.Вставить("upload_results", Ответ[Response]["upload_result"]);
КонецЕсли;
@ -1652,13 +1662,14 @@
Процедура ЗаполнитьПоляЗапросаТовара(Знач ОписаниеТовара, Параметры)
Response = "response";
ОсновноеФото = ОписаниеТовара["ОсновноеФото"];
ДопФото = ОписаниеТовара["ДополнительныеФото"];
Свойства = ОписаниеТовара["ЗначенияСвойств"];
Если ЗначениеЗаполнено(ОсновноеФото) Тогда
Ответ = ЗагрузитьФотоНаСервер(ОсновноеФото, Параметры, "Товар");
ИДФото = Ответ["response"]["photo_id"];
ИДФото = Ответ[Response]["photo_id"];
ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
Параметры.Вставить("main_photo_id", ИДФото);
КонецЕсли;
@ -1699,11 +1710,12 @@
Если МассивФото.Количество() > 0 Тогда
СтрокаФотографий = "";
Response = "response";
Для Каждого Фото Из МассивФото Цикл
Ответ = ЗагрузитьФотоНаСервер(Фото, Параметры, "Товар");
ИДФото = Ответ["response"]["photo_id"];
ИДФото = Ответ[Response]["photo_id"];
ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
СтрокаФотографий = СтрокаФотографий + ИДФото + ",";
@ -1718,9 +1730,10 @@
Процедура ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 200;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.get", Параметры);
Товары = Ответ["response"]["items"];
Товары = Ответ[Response]["items"];
Если Товары.Количество() = 0 Тогда
Возврат;
@ -1738,9 +1751,10 @@
Процедура ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 100;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbums", Параметры);
Альбомы = Ответ["response"]["items"];
Альбомы = Ответ[Response]["items"];
Если Альбомы.Количество() = 0 Тогда
Возврат;
@ -1758,9 +1772,10 @@
Процедура ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 50;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getGroupOrders", Параметры);
Заказы = Ответ["response"]["items"];
Заказы = Ответ[Response]["items"];
Если Заказы.Количество() = 0 Тогда
Возврат;

View File

@ -54,6 +54,7 @@
Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href";
Параметры = Новый Структура;
Параметры.Вставить("path", Путь);
@ -61,7 +62,7 @@
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ["href"];
URLОтвета = Ответ[Href];
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ;
@ -125,6 +126,7 @@
Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href";
Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал);
@ -134,7 +136,7 @@
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ["href"];
URLОтвета = Ответ[Href];
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ;
@ -227,6 +229,7 @@
Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href";
Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал);
@ -236,7 +239,7 @@
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ["href"];
URLОтвета = Ответ[Href];
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ;
@ -256,6 +259,7 @@
Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт
Заголовки = ЗаголовокАвторизации(Токен);
Href = "href";
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
Файл = Новый ДвоичныеДанные(Файл);
@ -268,7 +272,7 @@
Параметры.Вставить("overwrite" , Перезаписывать);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки);
URL = Ответ["href"];
URL = Ответ[Href];
Ответ = OPI_Инструменты.PutMultipart(URL, , Файл, "multipart", Заголовки);
Возврат Ответ;
@ -430,6 +434,7 @@
Заголовки = ЗаголовокАвторизации(Токен);
Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href";
Параметры = Новый Структура;
Параметры.Вставить("public_key", URL);
@ -445,7 +450,7 @@
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ["href"];
URLОтвета = Ответ[Href];
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ;
@ -471,6 +476,7 @@
Заголовки = ЗаголовокАвторизации(Токен);
Назначение = ?(ОбщийДоступ, "publish", "unpublish");
Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение;
@ -480,7 +486,7 @@
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ["href"];
URLОтвета = Ответ[Href];
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);

View File

@ -21,12 +21,13 @@
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
#Область СлужебныйПрограммныйИнтерфейс
#Область HTTPМетоды
// Без тела
#Область ЗапросыБезТела
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки);
@ -36,7 +37,9 @@
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки);
КонецФункции
// С телом
#КонецОбласти
#Область ЗапросыСТелом
Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON);
@ -50,6 +53,10 @@
Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON);
КонецФункции
#КонецОбласти
#Область ЗапросыMultipart
Функция PostMultipart(Знач URL
, Знач Параметры
, Знач Файлы = ""
@ -70,6 +77,8 @@
КонецФункции
#КонецОбласти
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
СоответствиеВозврата = Новый Соответствие;
@ -110,6 +119,29 @@
КонецПроцедуры
Процедура УдалитьПустыеПоляКоллекции(Коллекция) Экспорт
ТипКоллекции = ТипЗнч(Коллекция);
ВыходнаяКоллекция = Новый(ТипКоллекции);
Если ТипКоллекции = Тип("Соответствие") Или ТипКоллекции = Тип("Структура") Тогда
УдалитьПустыеКлючиЗначения(Коллекция, ВыходнаяКоллекция);
ИначеЕсли ТипКоллекции = Тип("Массив") Тогда
УдалитьПустыеЭлементыМассива(Коллекция, ВыходнаяКоллекция);
Иначе
ВыходнаяКоллекция = Коллекция;
КонецЕсли;
Коллекция = ВыходнаяКоллекция;
КонецПроцедуры
#КонецОбласти
#Область Служебные
@ -181,22 +213,6 @@
Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
КонецФункции
Процедура ВыполнитьСкрипт(Знач Текст) Экспорт
ИмяСкрипта = ПолучитьИмяВременногоФайла(".ps1");
ТекстСкрипта = Новый ТекстовыйДокумент;
ТекстСкрипта.УстановитьТекст(Текст);
ТекстСкрипта.Записать(ИмяСкрипта, КодировкаТекста.UTF8);
КодВозврата = 0;
ЗапуститьПриложение("powershell -file " + ИмяСкрипта + " -noexit", , Истина, КодВозврата);
УдалитьФайлы(ИмяСкрипта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -208,56 +224,26 @@
Если Не ЗначениеЗаполнено(Параметры) Тогда
Параметры = Новый Структура;
КонецЕсли;
Переадресация = 300;
Ошибка = 400;
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
Соединение = СоздатьСоединение(Сервер);
УстановитьТелоЗапроса(Запрос, Параметры, JSON);
GZip = "gzip";
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
СтруктураURL = РазбитьURL(URL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", ТипДанных);
Заголовки.Вставить("Accept-Encoding", GZip);
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Connection", "keep-alive");
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
Для Каждого Заголовок Из ДопЗаголовки Цикл
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
КонецЦикла;
КонецЕсли;
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
Если JSON Тогда
Данные = JSONСтрокой(Параметры);
Иначе
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
КонецЕсли;
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
"content-encoding") = GZip;
Если НужнаРаспаковка Тогда
Ответ = РаспаковатьОтвет(Ответ);
КонецЕсли;
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
Попытка
Ответ = JsonВСтруктуру(Ответ);
Исключение
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
КонецПопытки;
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
Если ЭтоПереадресация Тогда
Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, JSON);
Иначе
ОбработатьОтвет(Ответ);
КонецЕсли;
Возврат Ответ;
@ -270,40 +256,28 @@
Параметры = Новый Структура;
КонецЕсли;
Заголовки = Новый Соответствие;
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
Для Каждого Заголовок Из ДопЗаголовки Цикл
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
КонецЦикла;
КонецЕсли;
СтруктураURL = РазбитьURL(URL);
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
Переадресация = 300;
НеНайдено = 400;
Переадресация = 300;
Ошибка = 400;
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
Если Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < НеНайдено Тогда
Возврат ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
Соединение = СоздатьСоединение(Сервер);
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
Если ЭтоПереадрисация Тогда
Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
Иначе
ОбработатьОтвет(Ответ);
КонецЕсли;
Попытка
ТелоОтвета = JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
Исключение
ТелоОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
КонецПопытки;
Возврат ТелоОтвета;
Возврат Ответ;
КонецФункции
// BSLLS:CognitiveComplexity-off
// BSLLS:Typo-off
Функция ВыполнитьЗапросМультипарт(Знач URL
, Знач Вид
, Знач Параметры
@ -319,44 +293,128 @@
Файлы = Новый Соответствие;
КонецЕсли;
ЗаменаТочки = "___";
GZip = "gzip";
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
СтруктураURL = РазбитьURL(URL);
Переадресация = 300;
Ошибка = 400;
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
РазделительСтрок = Символы.ВК + Символы.ПС;
ТипДанных = "multipart/form-data; boundary=" + Boundary;
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
Соединение = СоздатьСоединение(Сервер);
ТелоЗапроса = Запрос.ПолучитьТелоКакПоток();
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры);
ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы);
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
ЗаписьТекста.Закрыть();
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
Если ЭтоПереадресация Тогда
Ответ = ВыполнитьЗапросМультипарт(Ответ.Заголовки["Location"]
, Вид
, Параметры
, Файлы
, ТипКонтента
, ДопЗаголовки);
Иначе
ОбработатьОтвет(Ответ);
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "")
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
Заголовки.Вставить("Accept-Encoding", GZip);
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Connection", "keep-alive");
Заголовки.Вставить("Accept-Encoding", "gzip");
Заголовки.Вставить("Accept" , "*/*");
Заголовки.Вставить("Connection" , "keep-alive");
Если ЗначениеЗаполнено(ТипДанных) Тогда
Заголовки.Вставить("Content-Type", ТипДанных);
КонецЕсли;
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
Для Каждого Заголовок Из ДопЗаголовки Цикл
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
КонецЦикла;
КонецЕсли;
НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
ТелоЗапроса = НовыйЗапрос.ПолучитьТелоКакПоток();
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
Возврат НовыйЗапрос;
КонецФункции
Функция СоздатьСоединение(Знач Сервер)
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
КонецФункции
Процедура ОбработатьОтвет(Ответ)
GZip = "gzip";
НужнаРаспаковка =
Ответ.Заголовки.Получить("Content-Encoding") = GZip
Или Ответ.Заголовки.Получить("content-encoding") = GZip;
Если НужнаРаспаковка Тогда
Ответ = РаспаковатьОтвет(Ответ);
КонецЕсли;
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
Попытка
Ответ = JsonВСтруктуру(Ответ);
Исключение
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
Если JSON Тогда
Данные = JSONСтрокой(Параметры);
Иначе
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
КонецЕсли;
Запрос.УстановитьТелоИзСтроки(Данные);
КонецПроцедуры
Процедура ЗаписатьПараметрыМультипарт(ЗаписьТекста, Знач Boundary, Знач Параметры)
РазделительСтрок = Символы.ВК + Символы.ПС;
Для Каждого Параметр Из Параметры Цикл
Если Параметр.Значение = Неопределено
Или Параметр.Значение = NULL Тогда
Продолжить;
Продолжить;
КонецЕсли;
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
Если ТипЗнч(Параметр.Значение) = Тип("Строка")
Или ТипЗнч(Параметр.Значение) = Тип("Число") Тогда
@ -366,28 +424,37 @@
ИначеЕсли ТипЗнч(Параметр.Значение) = Тип("Булево") Тогда
ЗаписьТекста.ЗаписатьСтроку(?(Параметр.Значение, "true", "false"));
Иначе
ЗаписьТекста.Записать(Параметр.Значение);
КонецЕсли;
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
КонецЦикла;
КонецПроцедуры
Счетчик = 0;
Процедура ЗаписатьФайлыМультипарт(ЗаписьТекста, Знач Boundary, Знач ТипКонтента, Знач Файлы)
РазделительСтрок = Символы.ВК + Символы.ПС;
ЗаменаТочки = "___";
Для Каждого Файл Из Файлы Цикл
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
Если ТипКонтента = "image/jpeg" Тогда
ИмяФайлаОтправки = "photo";
Иначе
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
ЗаменаТочки, "."));
ЗаменаТочки, "."));
КонецЕсли;
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
+ ИмяФайлаОтправки
@ -400,32 +467,34 @@
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
ЗаписьТекста.Записать(Файл.Значение);
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
Счетчик = Счетчик + 1;
КонецЦикла;
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
КонецПроцедуры
ЗаписьТекста.Закрыть();
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
"content-encoding") = GZip;
Если НужнаРаспаковка Тогда
Ответ = РаспаковатьОтвет(Ответ);
КонецЕсли;
Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные")
, JsonВСтруктуру(Ответ)
, JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()));
Процедура УдалитьПустыеКлючиЗначения(Знач Коллекция, ВыходнаяКоллекция)
Для Каждого ЭлементКоллекции Из Коллекция Цикл
КонецФункции
Если Не ЭлементКоллекции.Значение = Неопределено И Не ЭлементКоллекции.Значение = NULL Тогда
ВыходнаяКоллекция.Вставить(ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// BSLLS:Typo-on
// BSLLS:CognitiveComplexity-on
Процедура УдалитьПустыеЭлементыМассива(Знач Коллекция, ВыходнаяКоллекция)
Для Каждого ЭлементКоллекции Из Коллекция Цикл
Если Не ЭлементКоллекции = Неопределено И Не ЭлементКоллекции = NULL Тогда
ВыходнаяКоллекция.Добавить(ЭлементКоллекции);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#Область GZip
@ -632,6 +701,7 @@
КонецФункции
// BSLLS:LatinAndCyrillicSymbolInWord-on
// BSLLS:Typo-on
#КонецОбласти

View File

@ -65,7 +65,9 @@
.ДобавитьСерверныйТест("ГК_ПолучитьТокен" , "Получить токен")
.ДобавитьСерверныйТест("ГК_ОбновитьТокен" , "Обновить токен")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокКалендарей" , "Получить список календарей")
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/удалить календарь");
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/удалить календарь")
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьСобытие" , "Создать/удалить событие")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокСобытий" , "Получить список событий");
КонецПроцедуры
@ -1238,6 +1240,7 @@
.ИмеетТип("Массив").Заполнено();
КонецПроцедуры
#КонецОбласти
#Область YandexDisk
@ -1558,7 +1561,10 @@
НаименованиеИзмененное = Наименование + " (изм.)";
ТипСоответствие = Тип("Соответствие");
ТипСтрока = Тип("Строка");
Description = "description";
Summary = "summary";
Черный = "#000000";
Желтый = "#ffd800";
Результат = OPI_GoogleCalendar.СоздатьКалендарь(Токен, Наименование);
@ -1569,7 +1575,7 @@
Календарь = Результат["id"];
Результат = OPI_GoogleCalendar.ИзменитьКалендарь(Токен
Результат = OPI_GoogleCalendar.ИзменитьМетаданныеКалендаря(Токен
, Календарь
, НаименованиеИзмененное
, Описание);
@ -1577,23 +1583,139 @@
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("description").Равно(Описание)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ПолучитьКалендарь(Токен, Календарь);
Результат = OPI_GoogleCalendar.ПолучитьМетаданныеКалендаря(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("description").Равно(Описание)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ДобавитьКалендарьВСписок(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ИзменитьКалендарьСписка(Токен, Календарь, Черный, Желтый, Ложь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("foregroundColor").Равно(Черный)
.Свойство("backgroundColor").Равно(Желтый);
Результат = OPI_GoogleCalendar.ПолучитьКалендарьСписка(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("foregroundColor").Равно(Черный)
.Свойство("backgroundColor").Равно(Желтый);
Результат = OPI_GoogleCalendar.ОчиститьОсновнойКалендарь(Токен);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
Результат = OPI_GoogleCalendar.УдалитьКалендарьИзСписка(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
Результат = OPI_GoogleCalendar.УдалитьКалендарь(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
КонецПроцедуры
Процедура ГК_СоздатьУдалитьСобытие() Экспорт
Токен = ПолучитьПараметр("Google_Token");
Календарь = ПолучитьПараметр("Google_Календарь");
Наименование = "Новое событие";
Описание = "Описание тестового события";
ОписаниеИзм = "Описание тестового события (изм.)";
ТипСоответствие = Тип("Соответствие");
ТипСтрока = Тип("Строка");
Summary = "summary";
Description = "description";
UID = "id";
Час = 3600;
Вложения = Новый Соответствие;
Вложения.Вставить("Картинка1"
, "https://opi.neocities.org/assets/images/logo_long-e8fdcca6ff8b32e679ea49a1ccdd3eac.png");
Вложения.Вставить("Картинка2"
, "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1");
СоответствиеСобытия = Новый Соответствие;
СоответствиеСобытия.Вставить("Описание" , Описание);
СоответствиеСобытия.Вставить("Заголовок" , Наименование);
СоответствиеСобытия.Вставить("МестоПроведения" , "В офисе");
СоответствиеСобытия.Вставить("ДатаНачала" , ТекущаяДатаСеанса());
СоответствиеСобытия.Вставить("ДатаОкончания" , СоответствиеСобытия["ДатаНачала"] + Час);
СоответствиеСобытия.Вставить("МассивURLФайловВложений" , Вложения);
СоответствиеСобытия.Вставить("ОтправлятьУведомления" , Истина);
Результат = OPI_GoogleCalendar.СоздатьСобытие(Токен, Календарь, СоответствиеСобытия);
Событие = Результат[UID];
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство(Description).Равно(Описание)
.Свойство(UID).ИмеетТип(ТипСтрока).Заполнено();
СоответствиеСобытия = Новый Соответствие;
СоответствиеСобытия.Вставить("Описание", ОписаниеИзм);
Результат = OPI_GoogleCalendar.ИзменитьСобытие(Токен, Календарь, СоответствиеСобытия, Событие);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство(Description).Равно(ОписаниеИзм)
.Свойство(UID).ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство(Description).Равно(ОписаниеИзм)
.Свойство(UID).ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ПереместитьСобытие(Токен, Календарь, Календарь, Событие);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство(Description).Равно(ОписаниеИзм)
.Свойство(UID).ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
КонецПроцедуры
Процедура ГК_ПолучитьСписокСобытий() Экспорт
Токен = ПолучитьПараметр("Google_Token");
Календарь = ПолучитьПараметр("Google_Календарь");
Результат = OPI_GoogleCalendar.ПолучитьСписокСобытий(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Массив");
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -0,0 +1,78 @@
---
sidebar_position: 6
---
# Изменить событие
Обновляет описание события
*Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт*
| Параметр | Тип | Назначение |
|-|-|-|
| Токен | Строка | Токен доступа |
| Календарь | Строка | ID календаря|
| ОписаниеТовара | Соответствие | Описание создаваемого события. См. [ПолучитьОписаниеТовара](./Poluchit-opisanye-sobytiya) |
| Событие | Строка | ID события для изменения |
Вовзращаемое значение: Соответствие - сериализованный JSON ответа от VK
```bsl title="Пример кода"
СоответствиеСобытия = Новый Соответствие;
СоответствиеСобытия.Вставить("Описание", "Описание тестового события (изм.)");
Ответ = OPI_GoogleCalendar.ИзменитьСобытие(Токен, "55868c32be16935f0...", СоответствиеСобытия, "j4nonfcc0m2...");
Ответ = OPI_Инструменты.JSONСтрокой(Ответ);
```
```json title="Результат"
{
"eventType": "default",
"attachments": [
{
"iconLink": "",
"title": "Картинка2",
"fileUrl": "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1"
},
{
"iconLink": "",
"title": "Картинка1",
"fileUrl": "https://opi.neocities.org/assets/images/logo_long-e8fdcca6ff8b32e679ea49a1ccdd3eac.png"
}
],
"reminders": {
"useDefault": true
},
"sequence": 0,
"start": {
"timeZone": "Europe/Minsk",
"dateTime": "2024-02-24T16:42:28+03:00"
},
"creator": {
"self": true,
"email": "bayselonarrend@gmail.com"
},
"end": {
"timeZone": "Europe/Minsk",
"dateTime": "2024-02-24T17:42:28+03:00"
},
"iCalUID": "7c2s6g3k6ib1mr2v1b7lnt9kfk@google.com",
"description": "Описание тестового события (изм.)",
"updated": "2024-02-24T10:42:42.401Z",
"created": "2024-02-24T10:42:32.000Z",
"htmlLink": "https://www.google.com/calendar/event?eid=N2MyczZnM2s2aWIxbXIydjFiN2xudDlrZmsgYmF5c2Vsb25hcnJlbmRAbQ",
"location": "В офисе",
"summary": "Новое событие",
"organizer": {
"self": true,
"email": "bayselonarrend@gmail.com"
},
"status": "confirmed",
"id": "7c2s6g3k6ib1mr2v1b7lnt9kfk",
"etag": "\"3417542724802000\"",
"kind": "calendar#event"
}
```

View File

@ -0,0 +1,75 @@
---
sidebar_position: 5
---
# Переместить событие
Перемещает событие из одного календаря в другой
*Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт*
| Параметр | Тип | Назначение |
|-|-|-|
| Токен | Строка | Токен доступа |
| КалендарьИсточник | Строка | ID календаря-источника |
| КалендарьПриемник | Строка | ID календаря-приемника |
| Событие | Строка | ID события для перемещения |
Вовзращаемое значение: Соответствие - сериализованный JSON ответа от Google
```bsl title="Пример кода"
Ответ = OPI_GoogleCalendar.ПереместитьСобытие(Токен, "bayselonarrend@gmail.com", "55868c32be16935f0...", "j4nonfcc0m2..."); //Соответствие
Ответ = OPI_Инструменты.JSONСтрокой(Ответ); //Строка
```
```json title="Результат"
{
"eventType": "default",
"attachments": [
{
"iconLink": "",
"title": "Картинка2",
"fileUrl": "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1"
},
{
"iconLink": "",
"title": "Картинка1",
"fileUrl": "https://opi.neocities.org/assets/images/logo_long-e8fdcca6ff8b32e679ea49a1ccdd3eac.png"
}
],
"reminders": {
"useDefault": true
},
"sequence": 0,
"start": {
"timeZone": "Europe/Minsk",
"dateTime": "2024-02-24T16:20:49+03:00"
},
"creator": {
"self": true,
"email": "bayselonarrend@gmail.com"
},
"end": {
"timeZone": "Europe/Minsk",
"dateTime": "2024-02-24T17:20:49+03:00"
},
"iCalUID": "f9kkj2omsqtt67g12qh2jig8uk@google.com",
"description": "Описание тестового события",
"updated": "2024-02-24T10:20:51.234Z",
"created": "2024-02-24T10:20:49.000Z",
"htmlLink": "https://www.google.com/calendar/event?eid=Zjlra2oyb21zcXR0NjdnMTJxaDJqaWc4dWsgYmF5c2Vsb25hcnJlbmRAbQ",
"location": "В офисе",
"summary": "Новое событие",
"organizer": {
"self": true,
"email": "bayselonarrend@gmail.com"
},
"status": "confirmed",
"id": "f9kkj2omsqtt67g12qh2jig8uk",
"etag": "\"3417540102468000\"",
"kind": "calendar#event"
}
```

View File

@ -0,0 +1,29 @@
---
sidebar_position: 7
---
# Удалить событие
Удаляет событие по ID
*Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт*
| Параметр | Тип | Назначение |
|-|-|-|
| Токен | Строка | Токен доступа |
| Календарь | Строка | ID календаря |
| Событие | Строка | ID события |
Вовзращаемое значение: Пустая строка
```bsl title="Пример кода"
Ответ = OPI_GoogleCalendar.УдалитьСобытие(Токен, "55868c32be16935f0...", "j4nonfcc0m2..."); //Соответствие
Ответ = OPI_Инструменты.JSONСтрокой(Ответ); //Строка
```
```json title="Результат"
""
```