mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-11-28 09:08:38 +02:00
Merge pull request #5 from Bayselonarrend/dev
Финальная часть реализации Google Calendar
This commit is contained in:
commit
08504ad86b
@ -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 И ЗначениеЗаполнено(Страница) Тогда
|
||||
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -111,4 +111,5 @@
|
||||
Возврат СтрСоединить(МассивРазрешений, " ");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -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"];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -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 Тогда
|
||||
Возврат;
|
||||
|
@ -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Ответа, , Заголовки);
|
||||
|
||||
|
@ -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
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
@ -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.ПолучитьСписокСобытий(Токен, Календарь);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат)
|
||||
.ИмеетТип("Массив");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -10,8 +10,9 @@
|
||||
|
||||
|
||||
<br>
|
||||
Проект состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех. Реализованные методы выполняют конечные задачи (вроде ОтправитьСообщение() или СоздатьПост()), что позволяет использовать их без углубления в реализацию. Однако, код, при этом, достаточно сильно декомпозирован - методы авторизации, получения данных и пр. по возможности вынесены в отдельные функции. Это позволяет легко добавлять новые методы, даже если они еще не реализованы в самой библиотеке на текущий момент. <br><br>
|
||||
|
||||
|
||||
Проект состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех. Реализованные методы выполняют конечные задачи (вроде ОтправитьСообщение() или СоздатьПост()), что позволяет использовать их без углубления в реализацию. Однако, код, при этом, достаточно сильно декомпозирован - методы авторизации, получения данных и пр. по возможности вынесены в отдельные функции. Это позволяет легко добавлять новые методы, даже если они еще не реализованы в самой библиотеке на текущий момент. <br><br>
|
||||
|
||||
На данный момент реализованы методы для работы со следующими API:
|
||||
<br>
|
||||
<div>
|
||||
|
@ -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"
|
||||
}
|
||||
|
||||
```
|
@ -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"
|
||||
}
|
||||
|
||||
```
|
@ -0,0 +1,29 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# Удалить событие
|
||||
Удаляет событие по ID
|
||||
|
||||
*Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт*
|
||||
|
||||
| Параметр | Тип | Назначение |
|
||||
|-|-|-|
|
||||
| Токен | Строка | Токен доступа |
|
||||
| Календарь | Строка | ID календаря |
|
||||
| Событие | Строка | ID события |
|
||||
|
||||
Вовзращаемое значение: Пустая строка
|
||||
|
||||
```bsl title="Пример кода"
|
||||
|
||||
Ответ = OPI_GoogleCalendar.УдалитьСобытие(Токен, "55868c32be16935f0...", "j4nonfcc0m2..."); //Соответствие
|
||||
Ответ = OPI_Инструменты.JSONСтрокой(Ответ); //Строка
|
||||
|
||||
```
|
||||
|
||||
```json title="Результат"
|
||||
|
||||
""
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user