mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-04-19 12:12:37 +02:00
Создание словарей локализации
This commit is contained in:
parent
7e9e058ff1
commit
480fb4e384
0
.github/workflows/os/dictionary.json
vendored
0
.github/workflows/os/dictionary.json
vendored
303
.github/workflows/os/oint_dictionary.os
vendored
303
.github/workflows/os/oint_dictionary.os
vendored
@ -0,0 +1,303 @@
|
|||||||
|
Перем СписокЯзыков;
|
||||||
|
Перем ОбщийМассивСлов;
|
||||||
|
Перем Алфавит;
|
||||||
|
Перем МассивСимволов;
|
||||||
|
|
||||||
|
Процедура ПолучитьСписокЯзыков() Экспорт
|
||||||
|
|
||||||
|
СписокЯзыков = Новый Массив();
|
||||||
|
СписокЯзыков.Добавить("en");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура СоздатьСловари()
|
||||||
|
|
||||||
|
ПолучитьСписокЯзыков();
|
||||||
|
ПолучитьАлфавит();
|
||||||
|
ПолучитьМассивСимволов();
|
||||||
|
|
||||||
|
Для Каждого Язык Из СписокЯзыков Цикл
|
||||||
|
СоздатьСловарь(Язык);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура СоздатьСловарь(Знач Язык)
|
||||||
|
|
||||||
|
ФайлыМодулей = НайтиФайлы("./ru/", "*.os", Истина);
|
||||||
|
СписокСлов = Новый СписокЗначений();
|
||||||
|
|
||||||
|
Для Каждого Модуль Из ФайлыМодулей Цикл
|
||||||
|
ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ПутьСловаря = "./service/dictionaries/" + Язык + ".json";
|
||||||
|
ФайлСловаря = Новый Файл(ПутьСловаря);
|
||||||
|
|
||||||
|
СоответствиеСловаря = Новый Соответствие();
|
||||||
|
СоответствиеСуществующегоСловаря = Новый Соответствие();
|
||||||
|
|
||||||
|
Если ФайлСловаря.Существует() Тогда
|
||||||
|
|
||||||
|
ЧтениеJSON = Новый ЧтениеJSON();
|
||||||
|
ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
|
||||||
|
СоответствиеСуществующегоСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||||
|
ЧтениеJSON.Закрыть();
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
//СписокСлов.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
|
||||||
|
|
||||||
|
Для Каждого Слово Из СписокСлов Цикл
|
||||||
|
|
||||||
|
Значение = Слово.Значение;
|
||||||
|
Существующее = СоответствиеСуществующегоСловаря[Значение];
|
||||||
|
|
||||||
|
Если Существующее = Неопределено Тогда
|
||||||
|
СоответствиеСловаря.Вставить(Значение, "");
|
||||||
|
Иначе
|
||||||
|
СоответствиеСловаря.Вставить(Значение, Существующее);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
|
||||||
|
|
||||||
|
ТекстовыйДок = Новый ТекстовыйДокумент();
|
||||||
|
ТекстовыйДок.ДобавитьСтроку("{");
|
||||||
|
|
||||||
|
ТЗ = Новый ТаблицаЗначений();
|
||||||
|
ТЗ.Колонки.Добавить("Ключ");
|
||||||
|
ТЗ.Колонки.Добавить("Значение");
|
||||||
|
ТЗ.Колонки.Добавить("ДлинаКлюча");
|
||||||
|
ТЗ.Колонки.Добавить("Заполнено");
|
||||||
|
|
||||||
|
Для Каждого Элемент Из СоответствиеСловаря Цикл
|
||||||
|
|
||||||
|
НоваяСтрока = ТЗ.Добавить();
|
||||||
|
НоваяСтрока.Ключ = Элемент.Ключ;
|
||||||
|
НоваяСтрока.Значение = Элемент.Значение;
|
||||||
|
НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
|
||||||
|
НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
|
||||||
|
|
||||||
|
Для Каждого СтрокаТЗ Из ТЗ Цикл
|
||||||
|
Значение = СтрокаТЗ.Значение;
|
||||||
|
Значение = СтрЗаменить(Значение, "\", "\\");
|
||||||
|
Значение = СтрЗаменить(Значение, "/", "\/");
|
||||||
|
Значение = СтрЗаменить(Значение, """", "\""");
|
||||||
|
|
||||||
|
Ключ = СтрокаТЗ.Ключ;
|
||||||
|
Ключ = СтрЗаменить(Ключ, "\", "\\");
|
||||||
|
Ключ = СтрЗаменить(Ключ, "/", "\/");
|
||||||
|
Ключ = СтрЗаменить(Ключ, """", "\""");
|
||||||
|
|
||||||
|
ТекстовыйДок.ДобавитьСтроку("""" + Ключ + """: """ + Значение + """,");
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ТекстовыйДок.ДобавитьСтроку("}");
|
||||||
|
ТекстовыйДок.Записать(ПутьСловаря);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
|
||||||
|
|
||||||
|
Документ = Новый ТекстовыйДокумент();
|
||||||
|
Документ.Прочитать(ПутьКФайлу, "UTF-8");
|
||||||
|
|
||||||
|
Для Н = 1 По Документ.КоличествоСтрок() Цикл
|
||||||
|
|
||||||
|
ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
|
||||||
|
ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
|
||||||
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
|
||||||
|
ТекущаяСтрока = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
||||||
|
|
||||||
|
Для Каждого Элемент Из ТекущаяСтрока Цикл
|
||||||
|
ДобавитьСлово(СписокСлов, Элемент);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СтрНайти(ТекущаяСтрока, """") <> 0 Или СтрНайти(ТекущаяСтрока, "|") <> 0 Тогда
|
||||||
|
ТекущаяСтрока = " " + ТекущаяСтрока;
|
||||||
|
|
||||||
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
|
||||||
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
|
||||||
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
|
||||||
|
|
||||||
|
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
|
||||||
|
|
||||||
|
Цельный = Ложь;
|
||||||
|
Для Каждого Элемент Из МассивСтроки Цикл
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Цельный Тогда
|
||||||
|
ДобавитьСлово(СписокСлов, Элемент);
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Для Каждого Символ Из МассивСимволов Цикл
|
||||||
|
Элемент = СтрЗаменить(Элемент, Символ, "$");
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Пока СтрНайти(Элемент, "$$") <> 0 Цикл
|
||||||
|
Элемент = СтрЗаменить(Элемент, "$$", "$");
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
|
||||||
|
Для Каждого Дробный Из МассивЭлемента Цикл
|
||||||
|
ДобавитьСлово(СписокСлов, Дробный);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Цельный = Не Цельный;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьСлово(Список, Слово)
|
||||||
|
|
||||||
|
Слово = СокрЛП(Слово);
|
||||||
|
|
||||||
|
Нормализовано = Ложь;
|
||||||
|
|
||||||
|
Пока Не Нормализовано Цикл
|
||||||
|
|
||||||
|
ПервыйСимвол = Ложь;
|
||||||
|
ПоследнийСимвол = Ложь;
|
||||||
|
|
||||||
|
Для Каждого Символ Из МассивСимволов Цикл
|
||||||
|
|
||||||
|
ПервыйСимвол = СтрНачинаетсяС(Слово, Символ);
|
||||||
|
ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
|
||||||
|
|
||||||
|
Если ПервыйСимвол Или ПоследнийСимвол Тогда
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если ПервыйСимвол Тогда
|
||||||
|
Слово = Лев(Слово, СтрДлина(Слово) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ПоследнийСимвол Тогда
|
||||||
|
Слово = Прав(Слово, СтрДлина(Слово) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
|
||||||
|
Нормализовано = Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Слово = СокрЛП(Слово);
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СуществующееЗначение = Список.НайтиПоЗначению(Слово);
|
||||||
|
|
||||||
|
Если СуществующееЗначение = Неопределено Тогда
|
||||||
|
Список.Добавить(Слово, СтрДлина(Слово));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьАлфавит()
|
||||||
|
|
||||||
|
Алфавит = Новый Массив;
|
||||||
|
|
||||||
|
Алфавит.Добавить("а");
|
||||||
|
Алфавит.Добавить("б");
|
||||||
|
Алфавит.Добавить("в");
|
||||||
|
Алфавит.Добавить("г");
|
||||||
|
Алфавит.Добавить("д");
|
||||||
|
Алфавит.Добавить("е");
|
||||||
|
Алфавит.Добавить("ё");
|
||||||
|
Алфавит.Добавить("ж");
|
||||||
|
Алфавит.Добавить("з");
|
||||||
|
Алфавит.Добавить("и");
|
||||||
|
Алфавит.Добавить("й");
|
||||||
|
Алфавит.Добавить("к");
|
||||||
|
Алфавит.Добавить("л");
|
||||||
|
Алфавит.Добавить("м");
|
||||||
|
Алфавит.Добавить("н");
|
||||||
|
Алфавит.Добавить("о");
|
||||||
|
Алфавит.Добавить("п");
|
||||||
|
Алфавит.Добавить("р");
|
||||||
|
Алфавит.Добавить("с");
|
||||||
|
Алфавит.Добавить("т");
|
||||||
|
Алфавит.Добавить("у");
|
||||||
|
Алфавит.Добавить("ф");
|
||||||
|
Алфавит.Добавить("х");
|
||||||
|
Алфавит.Добавить("ц");
|
||||||
|
Алфавит.Добавить("ч");
|
||||||
|
Алфавит.Добавить("ш");
|
||||||
|
Алфавит.Добавить("щ");
|
||||||
|
Алфавит.Добавить("ъ");
|
||||||
|
Алфавит.Добавить("ы");
|
||||||
|
Алфавит.Добавить("ь");
|
||||||
|
Алфавит.Добавить("э");
|
||||||
|
Алфавит.Добавить("ю");
|
||||||
|
Алфавит.Добавить("я");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьМассивСимволов()
|
||||||
|
|
||||||
|
МассивСимволов = Новый Массив();
|
||||||
|
МассивСимволов.Добавить(";");
|
||||||
|
МассивСимволов.Добавить(".");
|
||||||
|
МассивСимволов.Добавить(",");
|
||||||
|
МассивСимволов.Добавить(")");
|
||||||
|
МассивСимволов.Добавить("(");
|
||||||
|
МассивСимволов.Добавить("/");
|
||||||
|
МассивСимволов.Добавить("\");
|
||||||
|
МассивСимволов.Добавить("[");
|
||||||
|
МассивСимволов.Добавить("]");
|
||||||
|
МассивСимволов.Добавить("=");
|
||||||
|
МассивСимволов.Добавить("+");
|
||||||
|
МассивСимволов.Добавить("-");
|
||||||
|
МассивСимволов.Добавить("*");
|
||||||
|
МассивСимволов.Добавить("#");
|
||||||
|
МассивСимволов.Добавить(" ");
|
||||||
|
МассивСимволов.Добавить("""");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция НайтиКириллицу(Знач Слово)
|
||||||
|
|
||||||
|
СловоНРег = НРег(Слово);
|
||||||
|
|
||||||
|
Для Каждого Буква Из Алфавит Цикл
|
||||||
|
Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
|
||||||
|
Возврат Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
СоздатьСловари();
|
||||||
|
|
37
.github/workflows/os/opi_translate.os
vendored
Normal file
37
.github/workflows/os/opi_translate.os
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
Процедура СоздатьЛокализацию(Знач Язык)
|
||||||
|
|
||||||
|
КаталогИсточник = Новый Файл(".\ru\OPI");
|
||||||
|
КаталогПриемник = Новый Файл(".\" + Язык + "\OPI");
|
||||||
|
|
||||||
|
СкопироватьФайлы(КаталогИсточник.ПолноеИмя, КаталогПриемник.ПолноеИмя);
|
||||||
|
ФайлыМодулей = НайтиФайлы("./" + Язык + "/", "*.bsl", Истина);
|
||||||
|
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
|
||||||
|
|
||||||
|
Если Прав(КаталогИсточник, 1) <> "\" Тогда
|
||||||
|
КаталогИсточник = КаталогИсточник + "\";
|
||||||
|
КонецЕсли;
|
||||||
|
Если Прав(КаталогПриемник, 1) <> "\" Тогда
|
||||||
|
КаталогПриемник = КаталогПриемник + "\";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СоздатьКаталог(КаталогПриемник);
|
||||||
|
|
||||||
|
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
|
||||||
|
|
||||||
|
Для Каждого Файл Из МассивФайлов Цикл
|
||||||
|
ПолноеИмяИсточник = Файл.ПолноеИмя;
|
||||||
|
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
|
||||||
|
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
СоздатьКаталог(ПолноеИмяПриемник);
|
||||||
|
Иначе
|
||||||
|
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
@ -19,18 +19,18 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Ключ = "oynqxds...";
|
КлючПриложения = "oynqxds...";
|
||||||
Секрет = "tk2oewn...";
|
СекретПриложения = "tk2oewn...";
|
||||||
Рефреш = "MJIG2TBhD-kAAAAAAAAAAd3oNph_4iTy...";
|
РефрешТокен = "oZFWg3DmZ_IAAAAAAAAAAWilOA0M1SjV...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ОбновитьТокен(Ключ, Секрет, Рефреш);
|
Результат = OPI_Dropbox.ОбновитьТокен(КлючПриложения, СекретПриложения, РефрешТокен);
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ОбновитьТокен --appkey %appkey% --appsecret %appsecret% --refresh %refresh%
|
oint dropbox ОбновитьТокен --appkey "oynqxds..." --appsecret "tk2oewn..." --refresh "oZFWg3DmZ_IAAAAAAAAAAWilOA0M1SjV..."
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьДанныеИспользованияПространства(Токен);
|
Результат = OPI_Dropbox.ПолучитьДанныеИспользованияПространства(Токен);
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьДанныеИспользованияПространства --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..."
|
oint dropbox ПолучитьДанныеИспользованияПространства --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..."
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьИнформациюОбАккаунте(Токен);
|
Результат = OPI_Dropbox.ПолучитьИнформациюОбАккаунте(Токен);
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьИнформациюОбАккаунте --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --account %account%
|
oint dropbox ПолучитьИнформациюОбАккаунте --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --account %account%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -17,15 +17,15 @@ sidebar_position: 1
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Ключ = "oynqxds...";
|
КлючПриложения = "oynqxds...";
|
||||||
Результат = OPI_Dropbox.ПолучитьСсылкуАвторизации(Ключ);
|
Результат = OPI_Dropbox.ПолучитьСсылкуАвторизации(КлючПриложения);
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьСсылкуАвторизации --appkey %appkey%
|
oint dropbox ПолучитьСсылкуАвторизации --appkey "oynqxds..."
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -19,13 +19,18 @@ sidebar_position: 2
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
|
КлючПриложения = "oynqxds...";
|
||||||
|
СекретПриложения = "tk2oewn...";
|
||||||
|
Код = "bTCiUTzxe6kAAAAAAAAAMgkkeJxqxqAO0YhahYskSmo";
|
||||||
|
|
||||||
|
Результат = OPI_Dropbox.ПолучитьТокен(КлючПриложения, СекретПриложения, Код);
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьТокен --appkey %appkey% --appsecret %appsecret% --code %code%
|
oint dropbox ПолучитьТокен --appkey "oynqxds..." --appsecret "tk2oewn..." --code "bTCiUTzxe6kAAAAAAAAAMgkkeJxqxqAO0YhahYskSmo"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Почта = "h5bk6ft62s@privaterelay.appleid.com";
|
Почта = "h5bk6ft62s@privaterelay.appleid.com";
|
||||||
Папка = "4999224241"; // shared_folder_id
|
Папка = "5008139809"; // shared_folder_id
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почта, Ложь);
|
Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почта, Ложь);
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ДобавитьПользователейКПапке --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --folder %folder% --emails %emails% --readonly %readonly%
|
oint dropbox ДобавитьПользователейКПапке --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --folder %folder% --emails %emails% --readonly %readonly%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Почта = "h5bk6ft62s@privaterelay.appleid.com";
|
Почта = "h5bk6ft62s@privaterelay.appleid.com";
|
||||||
Файл = "kJU6-a-pT48AAAAAAAAABw";
|
Файл = "kJU6-a-pT48AAAAAAAAABw";
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ДобавитьПользователейКФайлу --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --fileid %fileid% --emails %emails% --readonly %readonly%
|
oint dropbox ДобавитьПользователейКФайлу --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --fileid %fileid% --emails %emails% --readonly %readonly%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 1
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New";
|
Путь = "/New";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ОпубликоватьПапку(Токен, Путь);
|
Результат = OPI_Dropbox.ОпубликоватьПапку(Токен, Путь);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 1
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ОпубликоватьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
|
oint dropbox ОпубликоватьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,13 +18,17 @@ sidebar_position: 6
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
Файл = "kJU6-a-pT48AAAAAAAAABw";
|
||||||
|
|
||||||
|
Результат = OPI_Dropbox.ОтменитьПубликациюФайла(Токен, Файл);
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ОтменитьПубликациюФайла --token %token% --fileid %fileid%
|
oint dropbox ОтменитьПубликациюФайла --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --fileid %fileid%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,17 +18,25 @@ sidebar_position: 2
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Папка = "4999224241";
|
Папка = "5008139809";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
|
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
|
||||||
|
ТекущийСтатус = "in_progress";
|
||||||
|
IDРаботы = Результат["async_job_id"];
|
||||||
|
|
||||||
|
Пока ТекущийСтатус = "in_progress" Цикл
|
||||||
|
Результат = OPI_Dropbox.ПолучитьСтатусАсинхронногоИзменения(Токен, IDРаботы);
|
||||||
|
ТекущийСтатус = Результат[".tag"];
|
||||||
|
OPI_Инструменты.Пауза(3);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ОтменитьПубликациюПапки --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --folder %folder%
|
oint dropbox ОтменитьПубликациюПапки --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --folder %folder%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 8
|
|||||||
|
|
||||||
Оригинал = "/New/pic.png";
|
Оригинал = "/New/pic.png";
|
||||||
Копия = "/New/pic_copy.png";
|
Копия = "/New/pic_copy.png";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.КопироватьОбъект(Токен, Оригинал, Копия);
|
Результат = OPI_Dropbox.КопироватьОбъект(Токен, Оригинал, Копия);
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 8
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox КопироватьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --form %form% --to %to%
|
oint dropbox КопироватьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --form %form% --to %to%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 9
|
|||||||
|
|
||||||
ОригиналныйПуть = "/New/pic.png";
|
ОригиналныйПуть = "/New/pic.png";
|
||||||
ЦелевойПуть = "/pic.png";
|
ЦелевойПуть = "/pic.png";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПереместитьОбъект(Токен, ОригиналныйПуть, ЦелевойПуть);
|
Результат = OPI_Dropbox.ПереместитьОбъект(Токен, ОригиналныйПуть, ЦелевойПуть);
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 9
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПереместитьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --form %form% --to %to%
|
oint dropbox ПереместитьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --form %form% --to %to%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 1
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Путь = "/New/pic.png";
|
Путь = "/New/pic.png";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьИнформациюОбОбъекте(Токен, Путь, Истина);
|
Результат = OPI_Dropbox.ПолучитьИнформациюОбОбъекте(Токен, Путь, Истина);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ sidebar_position: 1
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьИнформациюОбОбъекте --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --detail %detail%
|
oint dropbox ПолучитьИнформациюОбОбъекте --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --detail %detail%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New/mydoc.docx";
|
Путь = "/New/mydoc.docx";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьПревью(Токен, Путь);
|
Результат = OPI_Dropbox.ПолучитьПревью(Токен, Путь);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьПревью --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
|
oint dropbox ПолучитьПревью --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 2
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Путь = "/New";
|
Путь = "/New";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьСписокФайловПапки(Токен, Путь, Истина);
|
Результат = OPI_Dropbox.ПолучитьСписокФайловПапки(Токен, Путь, Истина);
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 2
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьСписокФайловПапки --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --detail %detail% --cursor %cursor%
|
oint dropbox ПолучитьСписокФайловПапки --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --detail %detail% --cursor %cursor%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ sidebar_position: 13
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New/pic.png";
|
Путь = "/New/pic.png";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ПолучитьСписокВерсийОбъекта(Токен, Путь, 1);
|
Результат = OPI_Dropbox.ПолучитьСписокВерсийОбъекта(Токен, Путь, 1);
|
||||||
@ -29,7 +29,7 @@ sidebar_position: 13
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьСписокВерсийОбъекта --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --amount %amount%
|
oint dropbox ПолучитьСписокВерсийОбъекта --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --amount %amount%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,8 +18,8 @@ sidebar_position: 6
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
ИДРаботы = "kwvJIcRS7eAAAAAAAAAAAQ";
|
ИДРаботы = "mTzF6hWsswAAAAAAAAAAAQ";
|
||||||
Статус = "in_progress";
|
Статус = "in_progress";
|
||||||
|
|
||||||
Пока Статус = "in_progress" Цикл
|
Пока Статус = "in_progress" Цикл
|
||||||
@ -38,7 +38,7 @@ sidebar_position: 6
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ПолучитьСтатусЗагрузкиПоURL --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --job %job%
|
oint dropbox ПолучитьСтатусЗагрузкиПоURL --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --job %job%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 11
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New/pic.png";
|
Путь = "/New/pic.png";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.СкачатьФайл(Токен, Путь);
|
Результат = OPI_Dropbox.СкачатьФайл(Токен, Путь);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 11
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox СкачатьФайл --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
|
oint dropbox СкачатьФайл --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 12
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New";
|
Путь = "/New";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.СкачатьПапку(Токен, Путь);
|
Результат = OPI_Dropbox.СкачатьПапку(Токен, Путь);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 12
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox СкачатьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
|
oint dropbox СкачатьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 10
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/Новый каталог";
|
Путь = "/Новый каталог";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.СоздатьПапку(Токен, Путь);
|
Результат = OPI_Dropbox.СоздатьПапку(Токен, Путь);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 10
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox СоздатьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
|
oint dropbox СоздатьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 7
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Путь = "/New/pic.png";
|
Путь = "/New/pic.png";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
|
Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ sidebar_position: 7
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox УдалитьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --permanently %permanently%
|
oint dropbox УдалитьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --permanently %permanently%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -19,13 +19,18 @@ sidebar_position: 14
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
|
Версия = "016196bc6e08dda00000001295a2bc1";
|
||||||
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
|
Путь = "/New/pic.png";
|
||||||
|
|
||||||
|
Результат = OPI_Dropbox.ВосстановитьОбъектКВерсии(Токен, Путь, Версия);
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ВосстановитьОбъектКВерсии --token %token% --path %path% --rev %rev%
|
oint dropbox ВосстановитьОбъектКВерсии --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --rev "016196bc6e08dda00000001295a2bc1"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 5
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Путь = "/New/url_doc.docx";
|
Путь = "/New/url_doc.docx";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
URL = "https://openintegrations.dev/test_data/document.docx";
|
URL = "https://openintegrations.dev/test_data/document.docx";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ЗагрузитьФайлПоURL(Токен, URL, Путь);
|
Результат = OPI_Dropbox.ЗагрузитьФайлПоURL(Токен, URL, Путь);
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ЗагрузитьФайлПоURL --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --url %url% --path %path%
|
oint dropbox ЗагрузитьФайлПоURL --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --url %url% --path %path%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 4
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Путь = "/New/pic.png";
|
Путь = "/New/pic.png";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Картинка = "https://openintegrations.dev/test_data/picture.jpg";
|
Картинка = "https://openintegrations.dev/test_data/picture.jpg";
|
||||||
|
|
||||||
КартинкаПуть = ПолучитьИмяВременногоФайла("png");
|
КартинкаПуть = ПолучитьИмяВременногоФайла("png");
|
||||||
@ -34,7 +34,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ЗагрузитьФайл --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --file %file% --path %path% --overwrite %overwrite%
|
oint dropbox ЗагрузитьФайл --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --file %file% --path %path% --overwrite %overwrite%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 2
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Тег = "Важное";
|
Тег = "Важное";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New/mydoc.docx";
|
Путь = "/New/mydoc.docx";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ДобавитьТег(Токен, Путь, Тег);
|
Результат = OPI_Dropbox.ДобавитьТег(Токен, Путь, Тег);
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 2
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox ДобавитьТег --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --tag %tag%
|
oint dropbox ДобавитьТег --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --tag %tag%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 3
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Тег = "Важное";
|
Тег = "Важное";
|
||||||
Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
|
Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
|
||||||
Путь = "/New/mydoc.docx";
|
Путь = "/New/mydoc.docx";
|
||||||
|
|
||||||
Результат = OPI_Dropbox.УдалитьТег(Токен, Путь, Тег);
|
Результат = OPI_Dropbox.УдалитьТег(Токен, Путь, Тег);
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint dropbox УдалитьТег --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --tag %tag%
|
oint dropbox УдалитьТег --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --tag %tag%
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
IDКанала = "@testsichee";
|
IDКанала = "@testsichee";
|
||||||
IDСообщения = "4606";
|
IDСообщения = "4494";
|
||||||
|
|
||||||
Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
|
Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint telegram ОткрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4606"
|
oint telegram ОткрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4494"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
IDКанала = "@testsichee";
|
IDКанала = "@testsichee";
|
||||||
IDСообщения = "4606";
|
IDСообщения = "4494";
|
||||||
|
|
||||||
Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
|
Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint telegram ЗакрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4606"
|
oint telegram ЗакрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4494"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ sidebar_position: 11
|
|||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
IDЧата = "461699897";
|
IDЧата = "461699897";
|
||||||
IDКанала = "@testsichee";
|
IDКанала = "@testsichee";
|
||||||
IDСообщения = "4606";
|
IDСообщения = "4494";
|
||||||
|
|
||||||
Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
|
Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
IDФайла = "CQACAgIAAx0EcNsaZQACEgRmVgMIOr9Q0NEt9l4OXJuwUgbl-wAC3kYAAnFFsUp2dLSNM3JeRjUE";
|
IDФайла = "CQACAgIAAx0EcNsaZQACEZRmUbbz_bhDX_wPiSnMclSID6CD7wACC00AAoaTiEpOTiNykV_72zUE";
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
|
|
||||||
Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
|
Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
|
||||||
@ -28,7 +28,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
```sh title="Пример команд CLI"
|
```sh title="Пример команд CLI"
|
||||||
|
|
||||||
oint telegram СкачатьФайл --token "6129457865:AAFyzNYOAFbu..." --fileid "CQACAgIAAx0EcNsaZQACEgRmVgMIOr9Q0NEt9l4OXJuwUgbl-wAC3kYAAnFFsUp2dLSNM3JeRjUE"
|
oint telegram СкачатьФайл --token "6129457865:AAFyzNYOAFbu..." --fileid "CQACAgIAAx0EcNsaZQACEZRmUbbz_bhDX_wPiSnMclSID6CD7wACC00AAoaTiEpOTiNykV_72zUE"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ sidebar_position: 3
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
Чат = "-1001971186208";
|
Чат = "-1001971186208";
|
||||||
Тема = "2402";
|
Тема = "2325";
|
||||||
НовоеИмя = "Новый тестовый заголовок";
|
НовоеИмя = "Новый тестовый заголовок";
|
||||||
НовяИконка = "5310132165583840589";
|
НовяИконка = "5310132165583840589";
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 10
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
Чат = "-1001971186208";
|
Чат = "-1001971186208";
|
||||||
Тема = "2402";
|
Тема = "2325";
|
||||||
|
|
||||||
Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
|
Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
Чат = "-1001971186208";
|
Чат = "-1001971186208";
|
||||||
Тема = "2402";
|
Тема = "2325";
|
||||||
|
|
||||||
Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
|
Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 6
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
Чат = "-1001971186208";
|
Чат = "-1001971186208";
|
||||||
Тема = "2402";
|
Тема = "2325";
|
||||||
|
|
||||||
Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
|
Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ sidebar_position: 4
|
|||||||
|
|
||||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||||
Чат = "-1001971186208";
|
Чат = "-1001971186208";
|
||||||
Тема = "2402";
|
Тема = "2325";
|
||||||
|
|
||||||
|
|
||||||
Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат); // Закрывает главную тему
|
Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат); // Закрывает главную тему
|
||||||
|
@ -22,13 +22,13 @@ sidebar_position: 8
|
|||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ОписаниеКартинки = "Картинка автотест";
|
ОписаниеКартинки = "Картинка автотест";
|
||||||
ИДАльбома = "304369700";
|
ИДАльбома = "304440188";
|
||||||
|
|
||||||
Картинка = "https://openintegrations.dev/test_data/picture.jpg"; // URL, Путь к файлу или Двоичные данные
|
Картинка = "https://openintegrations.dev/test_data/picture.jpg"; // URL, Путь к файлу или Двоичные данные
|
||||||
ИВФ = ПолучитьИмяВременногоФайла("png");
|
ИВФ = ПолучитьИмяВременногоФайла("png");
|
||||||
КопироватьФайл(Картинка, ИВФ);
|
КопироватьФайл(Картинка, ИВФ);
|
||||||
Картинка = Новый ДвоичныеДанные(ИВФ);
|
|
||||||
|
|
||||||
|
Картинка = Новый ДвоичныеДанные(ИВФ);
|
||||||
|
|
||||||
Результат = OPI_VK.СохранитьКартинкуВАльбом(ИДАльбома, Картинка, ОписаниеКартинки, Параметры);
|
Результат = OPI_VK.СохранитьКартинкуВАльбом(ИДАльбома, Картинка, ОписаниеКартинки, Параметры);
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ sidebar_position: 1
|
|||||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост", "VK");
|
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост", "VK");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Результат = OPI_VK.СоздатьПост(Текст, Картинка, Ложь , , Параметры);
|
Результат = OPI_VK.СоздатьПост(Текст, Картинка, Ложь , , Параметры);
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ sidebar_position: 6
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДАльбома = "304369700";
|
ИДАльбома = "304440188";
|
||||||
|
|
||||||
Результат = OPI_VK.УдалитьАльбом(ИДАльбома, Параметры);
|
Результат = OPI_VK.УдалитьАльбом(ИДАльбома, Параметры);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ sidebar_position: 9
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДКартинки = "457243771";
|
ИДКартинки = "457243842";
|
||||||
|
|
||||||
Результат = OPI_VK.УдалитьКартинку(ИДКартинки, Параметры);
|
Результат = OPI_VK.УдалитьКартинку(ИДКартинки, Параметры);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ sidebar_position: 3
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДПоста = "2021";
|
ИДПоста = "2045";
|
||||||
|
|
||||||
Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры);
|
Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры);
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 4
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДОбсуждения = "51136513";
|
ИДОбсуждения = "51167955";
|
||||||
Сообщение = "Мне больше нравится желтый";
|
Сообщение = "Мне больше нравится желтый";
|
||||||
|
|
||||||
Результат = OPI_VK.НаписатьВОбсуждение(ИДОбсуждения, Сообщение, Параметры);
|
Результат = OPI_VK.НаписатьВОбсуждение(ИДОбсуждения, Сообщение, Параметры);
|
||||||
|
@ -19,7 +19,7 @@ sidebar_position: 3
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДОбсуждения = "51136513";
|
ИДОбсуждения = "51167955";
|
||||||
Результат = OPI_VK.ОткрытьОбсуждение(ИДОбсуждения, Параметры);
|
Результат = OPI_VK.ОткрытьОбсуждение(ИДОбсуждения, Параметры);
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ sidebar_position: 2
|
|||||||
```bsl title="Пример кода"
|
```bsl title="Пример кода"
|
||||||
|
|
||||||
Параметры = ПолучитьПараметрыВК();
|
Параметры = ПолучитьПараметрыВК();
|
||||||
ИДОбсуждения = "51136513";
|
ИДОбсуждения = "51167955";
|
||||||
Результат = OPI_VK.ЗакрытьОбсуждение(ИДОбсуждения, Ложь, Параметры);
|
Результат = OPI_VK.ЗакрытьОбсуждение(ИДОбсуждения, Ложь, Параметры);
|
||||||
|
|
||||||
|
|
||||||
|
18
en/OPI/.project
Normal file
18
en/OPI/.project
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>OPI</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||||
|
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
2
en/OPI/.settings/org.eclipse.core.resources.prefs
Normal file
2
en/OPI/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding/<project>=UTF-8
|
3
en/OPI/DT-INF/PROJECT.PMF
Normal file
3
en/OPI/DT-INF/PROJECT.PMF
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Runtime-Version: 8.3.15
|
||||||
|
Base-Project: OpenIntegrations
|
681
en/OPI/src/CommonModules/OPI_Airtable/Module.bsl
Normal file
681
en/OPI/src/CommonModules/OPI_Airtable/Module.bsl
Normal file
@ -0,0 +1,681 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_Airtable.os
|
||||||
|
// Библиотека: Airtable
|
||||||
|
// Команда CLI: airtable
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСБазами
|
||||||
|
|
||||||
|
// Получить список баз
|
||||||
|
// Получает список доступных баз
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить таблицы базы
|
||||||
|
// Получает схему таблиц базы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы - base
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать базу
|
||||||
|
// Создает новую базу данных
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// РабочееПространство - Строка - Идентификатор рабочего пространства - ws
|
||||||
|
// Наименование - Строка - Наименование новой базы - title
|
||||||
|
// КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц);
|
||||||
|
|
||||||
|
Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура")
|
||||||
|
И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
ВызватьИсключение "Ошибка в данных коллекции таблиц";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
МассивТаблиц = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Таблица Из КоллекцияТаблиц Цикл
|
||||||
|
|
||||||
|
Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение);
|
||||||
|
МассивТаблиц.Добавить(Описание);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСТаблицами
|
||||||
|
|
||||||
|
// Создать таблицу
|
||||||
|
// Создает новую таблицу в базе
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы - base
|
||||||
|
// Наименование - Строка - Наименование новой таблицы - title
|
||||||
|
// МассивПолей - Массив Из Структура - Массив описаний полей - fieldsdata
|
||||||
|
// Описание - Строка - Описание таблицы - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить таблицу
|
||||||
|
// Изменяет наименование и|или описание базы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Наименование - Строка - Новое наименование - title
|
||||||
|
// Описание - Строка - Новое описание - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСПолями
|
||||||
|
|
||||||
|
// Создать поле
|
||||||
|
// Создет новое поле в таблице
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля - fielddata
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля);
|
||||||
|
|
||||||
|
Если Не ТипЗнч(СтруктураПоля) = Тип("Структура")
|
||||||
|
И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
ВызватьИсключение "Ошибка в данных описания поля";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить поле
|
||||||
|
// Изменяет имя и|или описание существующего поля таблицы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы База - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Поле - Строка - Идентификатор поля - field
|
||||||
|
// Наименование - Строка - Новое наименование - title
|
||||||
|
// Описание - Строка - Новое описание - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/meta/bases/"
|
||||||
|
+ База
|
||||||
|
+ "/tables/"
|
||||||
|
+ Таблица
|
||||||
|
+ "/fields/"
|
||||||
|
+ Поле;
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (строковое)
|
||||||
|
// Получает описание поля строкового типа
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование нового поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "richText");
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (числовое)
|
||||||
|
// Получает описание поля числового типа
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование нового поля - title
|
||||||
|
// Точность - Число,Строка - Число знаков после запятой - precision
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность);
|
||||||
|
|
||||||
|
СтруктураОпций = Новый Структура("precision", Точность);
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (файл)
|
||||||
|
// Получает описание поля файлового типа
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеВложения(Знач Наименование) Экспорт
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments");
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (флажок)
|
||||||
|
// Получает описание поля типа булево
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт
|
||||||
|
|
||||||
|
СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright");
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (дата)
|
||||||
|
// Получает описание поля типа дата
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеДаты(Знач Наименование) Экспорт
|
||||||
|
|
||||||
|
СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso");
|
||||||
|
СтруктураОпций = Новый Структура("dateFormat", СтруктураФормата);
|
||||||
|
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (email)
|
||||||
|
// Получает описание поля с электронной почтой
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеПочты(Знач Наименование) Экспорт
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "email");
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (телефон)
|
||||||
|
// Получает описание поля с номером телефона
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber");
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить поле (url)
|
||||||
|
// Получает описание поля с URL
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Наименование - Строка - Наименование поля - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Описание поля
|
||||||
|
Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт
|
||||||
|
Возврат ОписаниеПримитивногоПоля(Наименование, "url");
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСЗаписями
|
||||||
|
|
||||||
|
// Получить список записей
|
||||||
|
// Получает список записей выбранной таблицы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить запись
|
||||||
|
// Получает данные строки таблицы по идентификатору
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Запись - Строка - Идентификатор записи в таблице - record
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать записи
|
||||||
|
// Создает одну или массив записей по описанию или массиву описаний значений полей
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
ДобавитьОписаниеДанных(Данные, Параметры);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить записи
|
||||||
|
// Удаляет одну или массив записей по идентификаторам
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(Записи);
|
||||||
|
|
||||||
|
СтрокаЗаписей = "";
|
||||||
|
|
||||||
|
Для Каждого Запись Из Записи Цикл
|
||||||
|
СтрокаЗаписей = СтрокаЗаписей
|
||||||
|
+ ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?")
|
||||||
|
+ "records[]="
|
||||||
|
+ OPI_Инструменты.ЧислоВСтроку(Запись);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСКомментариями
|
||||||
|
|
||||||
|
// Получить комментарии
|
||||||
|
// Получает список комментариев к записи в таблице
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Запись - Строка - Идентификатор записи в таблице - record
|
||||||
|
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать комментарий
|
||||||
|
// Создает комментарий к записи в таблице
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Запись - Строка - Идентификатор записи в таблице - record
|
||||||
|
// Текст - Строка - Текст комментария - text
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить комментарий
|
||||||
|
// Изменяет текст существующего комментария
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Запись - Строка - Идентификатор записи в таблице - record
|
||||||
|
// Комментарий - Строка - Идентификатор комментария - comment
|
||||||
|
// Текст - Строка - Новый текст комментария - text
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить комментарий
|
||||||
|
// Удаляет комментарий к записи таблицы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - Идентификатор базы данных - base
|
||||||
|
// Таблица - Строка - Идентификатор таблицы - table
|
||||||
|
// Запись - Строка - Идентификатор записи в таблице - record
|
||||||
|
// Комментарий - Строка - Идентификатор комментария - comment
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
|
||||||
|
Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
|
||||||
|
|
||||||
|
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ПолучитьЗаголовокАвторизации(Знач Токен)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Authorization", "Bearer " + Токен);
|
||||||
|
|
||||||
|
Возврат Заголовки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "")
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей);
|
||||||
|
|
||||||
|
ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей);
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы);
|
||||||
|
|
||||||
|
Возврат ОписаниеТаблицы;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "")
|
||||||
|
|
||||||
|
СтруктураПоля = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля);
|
||||||
|
|
||||||
|
Возврат СтруктураПоля;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры)
|
||||||
|
|
||||||
|
Если ТипЗнч(Данные) = Тип("Массив") Тогда
|
||||||
|
|
||||||
|
МассивОтправки = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого ОписаниеЗаписи Из Данные Цикл
|
||||||
|
МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи));
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_Airtable/OPI_Airtable.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Airtable/OPI_Airtable.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="457991ad-c2ad-49b8-a26a-9fc83c8a7d11">
|
||||||
|
<name>OPI_Airtable</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI airtable</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
961
en/OPI/src/CommonModules/OPI_Dropbox/Module.bsl
Normal file
961
en/OPI/src/CommonModules/OPI_Dropbox/Module.bsl
Normal file
@ -0,0 +1,961 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
|
||||||
|
// Библиотека: Dropbox
|
||||||
|
// Команда CLI: dropbox
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область АккаунтИАвторизация
|
||||||
|
|
||||||
|
// Получить ссылку авторизации
|
||||||
|
// Генерирует ссылку авторизации для перехода в браузере
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - URL для перехода в браузере
|
||||||
|
Функция ПолучитьСсылкуАвторизации(Знач КлючПриложения) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючПриложения);
|
||||||
|
Возврат "https://www.dropbox.com/oauth2/authorize?client_id="
|
||||||
|
+ КлючПриложения
|
||||||
|
+ "&response_type=code&token_access_type=offline";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить токен
|
||||||
|
// Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||||
|
// СекретПриложения - Строка - Секрет приложения - appsecret
|
||||||
|
// Код - Строка - Код со страницы авторизации - code
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач Код) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropbox.com/oauth2/token";
|
||||||
|
ТипДанных = "application/x-www-form-urlencoded; charset=utf-8";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("code" , Код , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("grant_type", "authorization_code", "Строка", Параметры);
|
||||||
|
|
||||||
|
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
|
||||||
|
Сервер = СтруктураURL["Сервер"];
|
||||||
|
Адрес = СтруктураURL["Адрес"];
|
||||||
|
|
||||||
|
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес, , ТипДанных);
|
||||||
|
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, КлючПриложения, СекретПриложения);
|
||||||
|
|
||||||
|
СтрокаПараметров = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||||
|
|
||||||
|
Запрос.УстановитьТелоИзСтроки(Данные);
|
||||||
|
|
||||||
|
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить токен
|
||||||
|
// Получает новый токен на основе рефреш токена
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||||
|
// СекретПриложения - Строка - Секрет приложения - appsecret
|
||||||
|
// РефрешТокен - Строка - Рефреш токен - refresh
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ОбновитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач РефрешТокен) Экспорт
|
||||||
|
|
||||||
|
Строка_ = "Строка";
|
||||||
|
URL = "https://api.dropbox.com/oauth2/token";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("refresh_token", РефрешТокен , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("grant_type" , "refresh_token" , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("client_id" , КлючПриложения , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("client_secret", СекретПриложения, Строка_, Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить информацию об аккаунте
|
||||||
|
// Получает информацию об аккаунте
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Аккаунт - Строка - ID аккаунта. Текущий аккаунт токена, если не заполнено - account
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьИнформациюОбАккаунте(Знач Токен, Знач Аккаунт = "") Экспорт
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Аккаунт) Тогда
|
||||||
|
Результат = ПолучитьАккаунт(Токен, Аккаунт);
|
||||||
|
Иначе
|
||||||
|
Результат = ПолучитьСвойАккаунт(Токен);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить данные использования пространства
|
||||||
|
// Получает информацию о количестве использованного дискового пространства
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьДанныеИспользованияПространства(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/users/get_space_usage";
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL
|
||||||
|
, ПолучитьДвоичныеДанныеИзСтроки("null")
|
||||||
|
, Заголовки
|
||||||
|
,
|
||||||
|
, "text/plain; charset=dropbox-cors-hack");
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСФайламиИКаталогами
|
||||||
|
|
||||||
|
// Получить информацию об объекте
|
||||||
|
// Получает информацию о файле или каталоге
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту - path
|
||||||
|
// Подробно - Булево - Добавляет дополнительные поля информации для медиафайлов - detail
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Путь, Знач Подробно = Ложь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/get_metadata";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("include_media_info", Подробно, "Булево", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список файлов папки
|
||||||
|
// Получает список первых файлов каталога или продолжает получение следующих при указании курсора
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к каталогу. Необязателен, если указан курсор - path
|
||||||
|
// Подробно - Булево - Добавляет дополнительные поля информации для медиафайлов - detail
|
||||||
|
// Курсор - Строка - Курсор из предыдущего запроса для получения следующего набора файлов - cursor
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// HTTPОтвет - Получить список файлов папки
|
||||||
|
Функция ПолучитьСписокФайловПапки(Знач Токен, Знач Путь = "", Знач Подробно = Ложь, Знач Курсор = "") Экспорт
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Курсор) Тогда
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/list_folder";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("include_media_info", Подробно , "Булево", Параметры);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/list_folder/continue";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("cursor", Курсор, "Строка", Параметры);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить превью
|
||||||
|
// Получает PDF или HTML превью объекта (только для токументов)
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные - превью документа
|
||||||
|
Функция ПолучитьПревью(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/get_preview";
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить файл
|
||||||
|
// Загружает файл на облачный диск
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Файл - Строка, ДвоичныеДанные - Данные файл для загрузки - file
|
||||||
|
// Путь - Строка - Путь сохранения на Dropbox - path
|
||||||
|
// Перезаписывать - Булево - Перезаписывать файл при конфликте путей - overwrite
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
|
||||||
|
Режим = ?(Перезаписывать, "overwrite", "add");
|
||||||
|
Размер = Файл.Размер();
|
||||||
|
Граница = 100000000;
|
||||||
|
|
||||||
|
Если Размер > Граница Тогда
|
||||||
|
Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
|
||||||
|
Иначе
|
||||||
|
Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить файл по URL
|
||||||
|
// Загружает файл на облачный диск, получая его по указанному URL
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URLФайла - Строка - URL источник файла - url
|
||||||
|
// Путь - Строка - Путь сохранения на Dropbox - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ЗагрузитьФайлПоURL(Знач Токен, Знач URLФайла, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/save_url";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path", Путь , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("url" , URLФайла , "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить статус загрузки по URL
|
||||||
|
// Получает статус загрузки файла по URL
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDРаботы - Строка - ID асинхронной работы из ответа ЗагрузитьФайлПоURL - job
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьСтатусЗагрузкиПоURL(Знач Токен, Знач IDРаботы) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/save_url/check_job_status";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("async_job_id", IDРаботы, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить объект
|
||||||
|
// Удаляет объект с облачного диска
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту удаления - path
|
||||||
|
// БезВозвратно - Строка - Удалить объект без возможности востановления - permanently
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач Безвозвратно = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Безвозвратно);
|
||||||
|
|
||||||
|
Если Безвозвратно Тогда
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/permanently_delete";
|
||||||
|
Иначе
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/delete_v2";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Копировать объект
|
||||||
|
// Копирует файл или каталог по выбранному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Откуда - Строка - Путь к объекту оригинала - form
|
||||||
|
// Куда - Строка - Целевой путь для нового объекта - to
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция КопироватьОбъект(Знач Токен, Знач Откуда, Знач Куда) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/copy_v2";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("from_path", Откуда, "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("to_path" , Куда , "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Переместить объект
|
||||||
|
// Перемещает объект по выбранному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Откуда - Строка - Путь к объекту оригинала - form
|
||||||
|
// Куда - Строка - Целевой путь для нового объекта - to
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПереместитьОбъект(Знач Токен, Знач Откуда, Знач Куда) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/move_v2";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("from_path", Откуда, "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("to_path" , Куда , "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать папку
|
||||||
|
// Создает пустой каталог по выбранному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Целевой путь создания каталога - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/create_folder_v2";
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Скачать файл
|
||||||
|
// Скачивает файл по указанному пути или ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь или ID файла - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные - двоичные данные файла
|
||||||
|
Функция СкачатьФайл(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/download";
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Скачать папку
|
||||||
|
// Скачивает zip архив с содержимым указанного каталога
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь или ID каталога - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные - двоичные данные zip архива с содержимым каталога
|
||||||
|
Функция СкачатьПапку(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/download_zip";
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список версий объекта
|
||||||
|
// Получает список версий (ревизий) объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту - path
|
||||||
|
// Количество - Строка, Число - Число последних версий объекта для отображения - amount
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьСписокВерсийОбъекта(Знач Токен, Знач Путь, Знач Количество = 10) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/list_revisions";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("limit", Количество, "Число" , Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Восстановить объект к версии
|
||||||
|
// Восстанавливает состояние объекта к необходимой версии (ревизии)
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту - path
|
||||||
|
// Версия - Строка - ID версии (ревизии) для востановления - rev
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ВосстановитьОбъектКВерсии(Знач Токен, Знач Путь, Знач Версия) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/restore";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path", Путь , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("rev" , Версия, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСТегами
|
||||||
|
|
||||||
|
// Получить список тегов
|
||||||
|
// Получает список тегов выбранных файлов
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Пути - Строка, Массив Из Строка - Путь или набору путей к файлам - paths
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьСписокТегов(Знач Токен, Знач Пути) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/tags/get";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("paths", Пути, "Массив", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Добавить тег
|
||||||
|
// Добавляет новый текстовый тег к файлу или каталогу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту, для которого необходимо создать тег - path
|
||||||
|
// Тег - Строка - Текст тега - tag
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ДобавитьТег(Знач Токен, Знач Путь, Знач Тег) Экспорт
|
||||||
|
|
||||||
|
Возврат ОбработатьТег(Токен, Путь, Тег);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить тег
|
||||||
|
// Удаляет текстовый тег файла или каталога
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к объекту, тег которого необходимо удалить - path
|
||||||
|
// Тег - Строка - Текст тега - tag
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция УдалитьТег(Знач Токен, Знач Путь, Знач Тег) Экспорт
|
||||||
|
|
||||||
|
Возврат ОбработатьТег(Токен, Путь, Тег, Истина);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область НастройкиСовместногоДоступа
|
||||||
|
|
||||||
|
// Опубликовать папку
|
||||||
|
// Переводит каталог в режим публичного доступа
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к целевому каталогу - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ОпубликоватьПапку(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/share_folder";
|
||||||
|
Ответ = ОбработатьОбъект(Токен, URL, Путь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отменить публикацию папки
|
||||||
|
// Отменяет режим общего доступа для каталога
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDПапки - Строка - ID публичного каталога (shared folder ID) - folder
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ОтменитьПубликациюПапки(Знач Токен, Знач IDПапки) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/unshare_folder";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Добавить пользователя к файлу
|
||||||
|
// Определяет доступ к файлу для стороннего пользователя
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDФайла - Строка - ID файла, к которому предоставляется доступ - fileid
|
||||||
|
// АдресаПочты - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей - emails
|
||||||
|
// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ДобавитьПользователейКФайлу(Знач Токен, Знач IDФайла, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
|
||||||
|
|
||||||
|
Строка_ = "Строка";
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр);
|
||||||
|
|
||||||
|
Если Не СтрНачинаетсяС(IDФайла, "id:") Тогда
|
||||||
|
IDФайла = "id:" + IDФайла;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/add_file_member";
|
||||||
|
|
||||||
|
МассивПользователей = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Адрес Из АдресаПочты Цикл
|
||||||
|
|
||||||
|
ДанныеПользователя = Новый Соответствие;
|
||||||
|
OPI_Инструменты.ДобавитьПоле(".tag" , "email", Строка_, ДанныеПользователя);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("email", Адрес , Строка_, ДанныеПользователя);
|
||||||
|
|
||||||
|
МассивПользователей.Добавить(ДанныеПользователя);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("file" , IDФайла , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("members", МассивПользователей , "Массив", Параметры);
|
||||||
|
|
||||||
|
Режим = ?(ТолькоПросмотр, "viewer", "editor");
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("access_level", Режим , Строка_, Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Добавить пользователей к папке
|
||||||
|
// Предоставляет стороннии пользователям доступ к каталогу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDПапки - Строка - ID публичного каталога (shared folder ID) - folder
|
||||||
|
// АдресаПочты - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей - emails
|
||||||
|
// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено - пустой ответ
|
||||||
|
Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
|
||||||
|
|
||||||
|
Строка_ = "Строка";
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр);
|
||||||
|
Режим = ?(ТолькоПросмотр, "viewer", "editor");
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/add_folder_member";
|
||||||
|
|
||||||
|
МассивПользователей = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Адрес Из АдресаПочты Цикл
|
||||||
|
|
||||||
|
ДанныеПользователя = Новый Соответствие;
|
||||||
|
OPI_Инструменты.ДобавитьПоле(".tag" , "email", Строка_, ДанныеПользователя);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("email", Адрес , Строка_, ДанныеПользователя);
|
||||||
|
|
||||||
|
СтруктураПользователя = Новый Структура("member,access_level", ДанныеПользователя, Режим);
|
||||||
|
|
||||||
|
МассивПользователей.Добавить(СтруктураПользователя);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("members" , МассивПользователей , "Массив", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить статус асинхронного изменения
|
||||||
|
// Получает статус асинхронной работы по изменению доступов
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDРаботы - Строка - ID асинхронной работы - job
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ПолучитьСтатусАсинхронногоИзменения(Знач Токен, Знач IDРаботы) Экспорт
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/check_job_status";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("async_job_id", IDРаботы, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отменить публикацию файла
|
||||||
|
// Запрещает доступ к файлу для внешних пользователей
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDФайла - Строка - ID файла, к которому предоставляется доступ - fileid
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||||
|
Функция ОтменитьПубликациюФайла(Знач Токен, Знач IDФайла) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||||||
|
|
||||||
|
Если Не СтрНачинаетсяС(IDФайла, "id:") Тогда
|
||||||
|
IDФайла = "id:" + IDФайла;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/sharing/unshare_file";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("file", IDФайла, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ОбработатьОбъект(Знач Токен, Знач URL, Знач Путь, Знач ВЗаголовках = Ложь)
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Параметры);
|
||||||
|
|
||||||
|
Если ВЗаголовках Тогда
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
|
||||||
|
Иначе
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОбработатьТег(Знач Токен, Знач Путь, Знач Тег, Знач ЭтоУдаление = Ложь)
|
||||||
|
|
||||||
|
Если ЭтоУдаление Тогда
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/tags/remove";
|
||||||
|
Иначе
|
||||||
|
URL = "https://api.dropboxapi.com/2/files/tags/add";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path" , Путь, "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("tag_text" , Тег , "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Параметры) Тогда
|
||||||
|
|
||||||
|
JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
|
||||||
|
JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
|
||||||
|
|
||||||
|
Заголовки.Вставить("Dropbox-API-Arg", JSON);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Заголовки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
|
||||||
|
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
|
||||||
|
|
||||||
|
РазмерЧасти = 100000000;
|
||||||
|
ТекущаяПозиция = 0;
|
||||||
|
ПрочитаноБайт = 0;
|
||||||
|
ОбщийРазмер = Файл.Размер();
|
||||||
|
Сессия = ОткрытьСессию(Токен);
|
||||||
|
|
||||||
|
Пока ПрочитаноБайт < ОбщийРазмер Цикл
|
||||||
|
|
||||||
|
Отступ = ТекущаяПозиция;
|
||||||
|
Курсор = Новый Структура("offset,session_id", Отступ, Сессия);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("cursor", Курсор);
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||||
|
|
||||||
|
ЧтениеДанных = Новый ЧтениеДанных(Файл);
|
||||||
|
ПрочитаноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция);
|
||||||
|
Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
|
||||||
|
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
|
||||||
|
РазмерТекущих = ТекущиеДанные.Размер();
|
||||||
|
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих;
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL, ТекущиеДанные, Заголовки);
|
||||||
|
|
||||||
|
ТекущаяПозиция = СледующаяПозиция;
|
||||||
|
|
||||||
|
// !OInt КБайт = 1024;
|
||||||
|
// !OInt МБайт = КБайт * КБайт;
|
||||||
|
// !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
|
||||||
|
|
||||||
|
// !OInt ВыполнитьСборкуМусора();
|
||||||
|
// !OInt ОсвободитьОбъект(ТекущиеДанные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Ответ = ЗакрытьСессию(Токен, Путь, Режим, ОбщийРазмер, Сессия);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
|
||||||
|
|
||||||
|
Булево_ = "Булево";
|
||||||
|
Строка_ = "Строка";
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/upload";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("autorename" , Ложь , Булево_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("mode" , Режим, Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("mute" , Ложь , Булево_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path" , Путь , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("strict_conflict", Ложь , Булево_, Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОткрытьСессию(Знач Токен)
|
||||||
|
|
||||||
|
SessionId = "session_id";
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ[SessionId];
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗакрытьСессию(Знач Токен, Знач Путь, Знач Режим, Знач ОбщийРазмер, Знач Сессия)
|
||||||
|
|
||||||
|
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
|
||||||
|
|
||||||
|
Коммит = Новый Структура();
|
||||||
|
OPI_Инструменты.ДобавитьПоле("mode", Режим, "Строка", Коммит);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Коммит);
|
||||||
|
|
||||||
|
Курсор = Новый Структура("offset,session_id", ОбщийРазмер, Сессия);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("commit,cursor", Коммит, Курсор);
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьАккаунт(Знач Токен, Знач Аккаунт)
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/users/get_account";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("account_id", Аккаунт, "Строка", Параметры);
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьСвойАккаунт(Знач Токен)
|
||||||
|
|
||||||
|
URL = "https://api.dropboxapi.com/2/users/get_current_account";
|
||||||
|
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PostBinary(URL
|
||||||
|
, ПолучитьДвоичныеДанныеИзСтроки("null")
|
||||||
|
, Заголовки
|
||||||
|
,
|
||||||
|
, "text/plain; charset=dropbox-cors-hack");
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
15
en/OPI/src/CommonModules/OPI_Dropbox/OPI_Dropbox.mdo
Normal file
15
en/OPI/src/CommonModules/OPI_Dropbox/OPI_Dropbox.mdo
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66ce7792-41e5-47e4-bfad-2dcff1c96287">
|
||||||
|
<name>OPI_Dropbox</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI dropbox</value>
|
||||||
|
</synonym>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Drop box</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
631
en/OPI/src/CommonModules/OPI_GoogleCalendar/Module.bsl
Normal file
631
en/OPI/src/CommonModules/OPI_GoogleCalendar/Module.bsl
Normal file
@ -0,0 +1,631 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_GoogleCalendar.os
|
||||||
|
// Библиотека: Google Calendar
|
||||||
|
// Команда CLI: gcalendar
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСМетаданнымиКалендарей
|
||||||
|
|
||||||
|
// Создать календарь
|
||||||
|
// Создает пустой календарь
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Наименование - Строка - Наименование создаваемого календаря - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("summary" , Наименование);
|
||||||
|
Параметры.Вставить("timeZone", "Europe/Moscow");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить календарь
|
||||||
|
// Получает информацию о календаре по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить календарь
|
||||||
|
// Изменяет свойства существуещего календаря
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// Наименование - Строка - Новое наименование - title
|
||||||
|
// Описание - Строка - Новое описание календаря - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ИзменитьМетаданныеКалендаря(Знач Токен
|
||||||
|
, Знач Календарь
|
||||||
|
, Знач Наименование = ""
|
||||||
|
, Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Наименование) Тогда
|
||||||
|
Параметры.Вставить("summary", Наименование);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Описание) Тогда
|
||||||
|
Параметры.Вставить("description", Описание);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Очистить основной календарь
|
||||||
|
// Очищает список событий основного календаря
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить календарь
|
||||||
|
// Удаляет календарь по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСоСпискомКалендарей
|
||||||
|
|
||||||
|
// Получить список календарей
|
||||||
|
// Получает массив календарей аккаунта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Массив соответствий данных календарей
|
||||||
|
Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
МассивКалендарей = Новый Массив;
|
||||||
|
|
||||||
|
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей);
|
||||||
|
|
||||||
|
Возврат МассивКалендарей;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Добавить календарь в список
|
||||||
|
// Добавляет существующий календарь в список пользователя
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("id", Календарь);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить календарь списка
|
||||||
|
// Получает календарь из списка пользователя по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить календарь из списка
|
||||||
|
// Удаляет календарь из списка пользователя
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить календарь списка
|
||||||
|
// Изменяет свойства календаря из списка пользователей
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// ОсновнойЦвет - Строка - HEX основного цвета (#ffffff) - primary
|
||||||
|
// ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff) - secondary
|
||||||
|
// Скрытый - Булево - Скрытый календарь - hidden
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ИзменитьКалендарьСписка(Знач Токен
|
||||||
|
, Знач Календарь
|
||||||
|
, Знач ОсновнойЦвет
|
||||||
|
, Знач ДополнительныйЦвет
|
||||||
|
, Знач Скрытый = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
|
||||||
|
|
||||||
|
Параметры = Новый Соответствие;
|
||||||
|
Параметры.Вставить("hidden" , Скрытый);
|
||||||
|
Параметры.Вставить("foregroundColor", ОсновнойЦвет);
|
||||||
|
Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаССобытиями
|
||||||
|
|
||||||
|
// Получить описание события !NOCLI
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Пустой макет события
|
||||||
|
Функция ПолучитьОписаниеСобытия() Экспорт
|
||||||
|
|
||||||
|
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
|
||||||
|
Час = 3600;
|
||||||
|
Событие = Новый Соответствие;
|
||||||
|
|
||||||
|
Событие.Вставить("Описание" , ""); // Описание события
|
||||||
|
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
|
||||||
|
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
|
||||||
|
Событие.Вставить("ДатаНачала" , ТекущаяДата); // Дата начала события
|
||||||
|
Событие.Вставить("ДатаОкончания" , ТекущаяДата + Час); // Дата окончания события
|
||||||
|
Событие.Вставить("МассивURLФайловВложений", Новый Соответствие); // Ключ - название, Значение - URL к файлу
|
||||||
|
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам
|
||||||
|
|
||||||
|
Возврат Событие;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список событий
|
||||||
|
// Получает список всех событий календаря
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Массив соответствий событий
|
||||||
|
Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
МассивСобытий = Новый Массив;
|
||||||
|
|
||||||
|
ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
|
||||||
|
|
||||||
|
Возврат МассивСобытий;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить событие
|
||||||
|
// Получает событие по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// Событие - Строка - ID события - event
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||||
|
+ Календарь
|
||||||
|
+ "/events/"
|
||||||
|
+ Событие;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать событие
|
||||||
|
// Создает новое событие
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||||
|
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
|
||||||
|
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Переместить событие
|
||||||
|
// Перемещает событие в другой календарь
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// КалендарьИсточник - Строка - ID календаря источника - from
|
||||||
|
// КалендарьПриемник - Строка - ID календаря приемника - to
|
||||||
|
// Событие - Строка - ID события календаря источника - event
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||||
|
+ КалендарьИсточник
|
||||||
|
+ "/events/"
|
||||||
|
+ Событие
|
||||||
|
+ "/move?destination="
|
||||||
|
+ КалендарьПриемник;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить событие
|
||||||
|
// Изменяет существующее событие
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// ОписаниеСобытия - Строка - Новое описание события - props
|
||||||
|
// Событие - Строка - ID события - event
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
|
||||||
|
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить событие
|
||||||
|
// Удаляет событие по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Календарь - Строка - ID календаря - calendar
|
||||||
|
// Событие - Строка - ID события - event
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||||
|
+ Календарь
|
||||||
|
+ "/events/"
|
||||||
|
+ Событие;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьДату(Знач Дата)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДату(Дата);
|
||||||
|
|
||||||
|
СтруктураДаты = Новый Структура;
|
||||||
|
|
||||||
|
Если Не ТипЗнч(Дата) = Тип("Дата") Тогда
|
||||||
|
Возврат Неопределено;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Дата = НачалоДня(Дата) Тогда
|
||||||
|
ФорматДаты = "ДФ=yyyy-MM-dd";
|
||||||
|
Поле = "date";
|
||||||
|
Иначе
|
||||||
|
ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
|
||||||
|
Поле = "dateTime";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Дата = Формат(Дата, ФорматДаты);
|
||||||
|
СтруктураДаты.Вставить(Поле , Дата);
|
||||||
|
СтруктураДаты.Вставить("timeZone", "Europe/Moscow");
|
||||||
|
|
||||||
|
Возврат СтруктураДаты;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьВложения(Знач Вложения)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения);
|
||||||
|
|
||||||
|
МассивВложений = Новый Массив;
|
||||||
|
|
||||||
|
Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда
|
||||||
|
|
||||||
|
Для Каждого Вложение Из Вложения Цикл
|
||||||
|
|
||||||
|
ТекущеВложение = Новый Структура;
|
||||||
|
ТекущеВложение.Вставить("title" , Вложение.Ключ);
|
||||||
|
ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
|
||||||
|
|
||||||
|
МассивВложений.Добавить(ТекущеВложение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если МассивВложений.Количество() > 0 Тогда
|
||||||
|
Возврат МассивВложений;
|
||||||
|
Иначе
|
||||||
|
Возврат Неопределено;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
Существующее = ЗначениеЗаполнено(Событие);
|
||||||
|
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";
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
Параметры.Вставить("pageToken", Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
|
||||||
|
, Параметры
|
||||||
|
, Заголовки);
|
||||||
|
|
||||||
|
Календари = Результат[Items];
|
||||||
|
Страница = Результат[NPT];
|
||||||
|
|
||||||
|
Для Каждого Календарь Из Календари Цикл
|
||||||
|
МассивКалендарей.Добавить(Календарь);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "")
|
||||||
|
|
||||||
|
Items = "items";
|
||||||
|
NPT = "nextPageToken";
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
Параметры.Вставить("pageToken", Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
|
||||||
|
, Параметры
|
||||||
|
, Заголовки);
|
||||||
|
|
||||||
|
События = Результат[Items];
|
||||||
|
Страница = Результат[NPT];
|
||||||
|
|
||||||
|
Для Каждого Событие Из События Цикл
|
||||||
|
МассивСобытий.Добавить(Событие);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d27d4ffb-31c2-4362-bd6d-d785ce171b49">
|
||||||
|
<name>OPI_GoogleCalendar</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI google calendar</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
719
en/OPI/src/CommonModules/OPI_GoogleDrive/Module.bsl
Normal file
719
en/OPI/src/CommonModules/OPI_GoogleDrive/Module.bsl
Normal file
@ -0,0 +1,719 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_GoogleDrive.os
|
||||||
|
// Библиотека: Google Drive
|
||||||
|
// Команда CLI: gdrive
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСФайламиИКаталогами
|
||||||
|
|
||||||
|
// Получить информацию об объекте
|
||||||
|
// Получает информацию о папке или файле по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор файла или каталога - object
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("fields", "*");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список каталогов
|
||||||
|
// Получает список каталогов диска
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИмяСодержит - Строка - Отбор по имени - querry
|
||||||
|
// Подробно - Булево - Добавляет список файлов к полям каталога - depth
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Массив соответствий каталогов
|
||||||
|
Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
МассивОбъектов = Новый Массив;
|
||||||
|
Отбор = Новый Массив;
|
||||||
|
|
||||||
|
Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'");
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ИмяСодержит) Тогда
|
||||||
|
Отбор.Добавить("name contains '" + ИмяСодержит + "'");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор);
|
||||||
|
|
||||||
|
Если Подробно Тогда
|
||||||
|
РазложитьОбъектыПодробно(Токен, МассивОбъектов);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат МассивОбъектов;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список файлов
|
||||||
|
// Получает список файлов
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИмяСодержит - Строка - Отбор по имени - querry
|
||||||
|
// Каталог - Строка - Отбор по ID каталога родителя - catalog
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Массив соответствий файлов
|
||||||
|
Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
МассивОбъектов = Новый Массив;
|
||||||
|
Отбор = Новый Массив;
|
||||||
|
|
||||||
|
Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'");
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ИмяСодержит) Тогда
|
||||||
|
Отбор.Добавить("name contains '" + ИмяСодержит + "'");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Каталог) Тогда
|
||||||
|
Отбор.Добавить("'" + Каталог + "' in parents");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор);
|
||||||
|
|
||||||
|
Возврат МассивОбъектов;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить файл
|
||||||
|
// Загружает файл на диск
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Файл - ДвоичныеДанные,Строка - Загружаемый файл - file
|
||||||
|
// Описание - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт
|
||||||
|
Возврат УправлениеФайлом(Токен, Файл, Описание);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать папку
|
||||||
|
// Создает пустой каталог на диске
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Имя - Строка - Имя папки - title
|
||||||
|
// Родитель - Строка - Родитель - catalog
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
|
||||||
|
|
||||||
|
Описание = Новый Соответствие;
|
||||||
|
Описание.Вставить("MIME" , "application/vnd.google-apps.folder");
|
||||||
|
Описание.Вставить("Имя" , Имя);
|
||||||
|
Описание.Вставить("Описание", "");
|
||||||
|
Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root"));
|
||||||
|
|
||||||
|
Возврат УправлениеФайлом(Токен, , Описание);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Скачать файл
|
||||||
|
// Получает файл по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор файла - object
|
||||||
|
// ПутьСохранения - Строка - Путь сохранения файла - out
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
|
||||||
|
Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
|
||||||
|
|
||||||
|
Параметры = Новый Соответствие;
|
||||||
|
Параметры.Вставить("alt", "media");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Скоприровать объект
|
||||||
|
// Копирует файл или каталог
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор объекта - object
|
||||||
|
// НовоеИмя - Строка - Новое имя объекта - title
|
||||||
|
// НовыйРодитель - Строка - Новый каталог размещения - catalog
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(НовоеИмя) Тогда
|
||||||
|
Параметры.Вставить("name", НовоеИмя);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(НовыйРодитель) Тогда
|
||||||
|
|
||||||
|
МассивРодителей = Новый Массив;
|
||||||
|
МассивРодителей.Добавить(НовыйРодитель);
|
||||||
|
Параметры.Вставить("parents", МассивРодителей);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить файл
|
||||||
|
// Обновляет двоичные данные файла
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор обновляемого объекта - object
|
||||||
|
// Файл - ДвоичныеДанные,Строка - Файл источник обновления - file
|
||||||
|
// НовоеИмя - Строка - Новое имя файла (если необходимо) - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(НовоеИмя) Тогда
|
||||||
|
Описание = Новый Соответствие;
|
||||||
|
Описание.Вставить("Имя", НовоеИмя);
|
||||||
|
Иначе
|
||||||
|
Описание = "";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить объект
|
||||||
|
// Удаляет файл или каталог по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор объекта для удаления - object
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить описание файла !NOCLI
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Описание файла
|
||||||
|
Функция ПолучитьОписаниеФайла() Экспорт
|
||||||
|
|
||||||
|
Описание = Новый Соответствие;
|
||||||
|
Описание.Вставить("MIME" , "image/jpeg"); // MIME-тип загружаемого файла
|
||||||
|
Описание.Вставить("Имя" , "Новый файл.jpg"); // Имя файла с расширением
|
||||||
|
Описание.Вставить("Описание" , "Это новый файл"); // Описание файла
|
||||||
|
Описание.Вставить("Родитель" , "root"); // ID каталога загрузки или "root" для загрузки в корень
|
||||||
|
|
||||||
|
Возврат Описание;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСКомментариями
|
||||||
|
|
||||||
|
// Создать комментарий
|
||||||
|
// Создает комментарий к файлу или каталогу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object
|
||||||
|
// Комментарий - Строка - Текст комментария - text
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("content", Комментарий);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить комментарий
|
||||||
|
// Получает комментарий по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
|
||||||
|
// ИДКомментария - Строка - Идентификатор комментария - comment
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("fields", "*");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список комментариев
|
||||||
|
// Получает список всех комментариев объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДОбъекта - Строка - Идентификатор объекта - object
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("fields", "*");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить комментарий
|
||||||
|
// Удаляет комментарий по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
|
||||||
|
// ИДКомментария - Строка - Идентификатор комментария - comment
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "")
|
||||||
|
|
||||||
|
URL = "https://www.googleapis.com/drive/v3/files";
|
||||||
|
Files = "files";
|
||||||
|
NPT = "nextPageToken";
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("fields", "*");
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
Параметры.Вставить("pageToken", Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда
|
||||||
|
ОтборСтрока = СтрСоединить(Отбор, " and ");
|
||||||
|
Параметры.Вставить("q", ОтборСтрока);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Объекты = Результат[Files];
|
||||||
|
Страница = Результат[NPT];
|
||||||
|
|
||||||
|
Для Каждого ТекущийОбъект Из Объекты Цикл
|
||||||
|
МассивОбъектов.Добавить(ТекущийОбъект);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
|
||||||
|
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов)
|
||||||
|
|
||||||
|
Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
|
||||||
|
|
||||||
|
МассивФайлов = Новый Массив;
|
||||||
|
ТекущийИД = ТекущийОбъект["id"];
|
||||||
|
|
||||||
|
Результат = ПолучитьСписокФайлов(Токен, , ТекущийИД);
|
||||||
|
|
||||||
|
Для Каждого Файл Из Результат Цикл
|
||||||
|
МассивФайлов.Добавить(Файл);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ТекущийОбъект.Вставить("files", МассивФайлов);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура СформироватьПараметрыЗагрузкиФайла(Описание)
|
||||||
|
|
||||||
|
СформированноеОписание = Новый Соответствие;
|
||||||
|
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание);
|
||||||
|
|
||||||
|
СоответствиеПолей = Новый Соответствие;
|
||||||
|
СоответствиеПолей.Вставить("MIME" , "mimeType");
|
||||||
|
СоответствиеПолей.Вставить("Имя" , "name");
|
||||||
|
СоответствиеПолей.Вставить("Описание" , "description");
|
||||||
|
СоответствиеПолей.Вставить("Родитель" , "parents");
|
||||||
|
СоответствиеПолей.Вставить("Расширение", "fileExtension");
|
||||||
|
|
||||||
|
Для Каждого Элемент Из Описание Цикл
|
||||||
|
|
||||||
|
Если Элемент.Ключ = "Родитель" Тогда
|
||||||
|
|
||||||
|
ТекущееЗначение = Новый Массив;
|
||||||
|
ТекущееЗначение.Добавить(Элемент.Значение);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ТекущееЗначение = Элемент.Значение;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ);
|
||||||
|
СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Описание = СформированноеОписание;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "")
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Описание) Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
MimeType = "mimeType";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||||||
|
MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType];
|
||||||
|
Иначе
|
||||||
|
MIME = Описание["MIME"];
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Описание) Тогда
|
||||||
|
Описание = Новый Соответствие;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
СформироватьПараметрыЗагрузкиФайла(Описание);
|
||||||
|
ОписаниеJSON = OPI_Инструменты.JSONСтрокой(Описание);
|
||||||
|
|
||||||
|
СоответствиеФайла = Новый Соответствие;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Файл) Тогда
|
||||||
|
|
||||||
|
РазмерЧасти = 268435457;
|
||||||
|
Размер = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти);
|
||||||
|
|
||||||
|
СоответствиеФайла.Вставить(Файл, MIME);
|
||||||
|
|
||||||
|
Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
|
||||||
|
Иначе
|
||||||
|
Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
|
||||||
|
|
||||||
|
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||||||
|
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
|
||||||
|
Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
|
||||||
|
Иначе
|
||||||
|
Ответ = OPI_Инструменты.PostMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
|
||||||
|
|
||||||
|
Для Каждого Файл Из СоответствиеФайла Цикл
|
||||||
|
Двоичные = Файл.Ключ;
|
||||||
|
Прервать;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||||||
|
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина);
|
||||||
|
Иначе
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресЗагрузки = Ответ.Заголовки["Location"];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки);
|
||||||
|
Ответ = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ);
|
||||||
|
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки)
|
||||||
|
|
||||||
|
Ответ = "";
|
||||||
|
РазмерЧасти = 268435456;
|
||||||
|
ПрочитаноБайт = 0;
|
||||||
|
ТекущаяПозиция = 0;
|
||||||
|
ОбщийРазмер = Двоичные.Размер();
|
||||||
|
СтрОбщийРазмер = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер);
|
||||||
|
ЧтениеДанных = Новый ЧтениеДанных(Двоичные);
|
||||||
|
ИсходныйПоток = ЧтениеДанных.ИсходныйПоток();
|
||||||
|
|
||||||
|
Пока ПрочитаноБайт < ОбщийРазмер Цикл
|
||||||
|
|
||||||
|
ПрочитаноБайт = ИсходныйПоток.ТекущаяПозиция();
|
||||||
|
Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
|
||||||
|
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
|
||||||
|
РазмерТекущих = ТекущиеДанные.Размер();
|
||||||
|
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1;
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЗаголовокПотока = "bytes "
|
||||||
|
+ OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция)
|
||||||
|
+ "-"
|
||||||
|
+ OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция)
|
||||||
|
+ "/"
|
||||||
|
+ СтрОбщийРазмер;
|
||||||
|
|
||||||
|
ДопЗаголовки = Новый Соответствие;
|
||||||
|
ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих));
|
||||||
|
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
|
||||||
|
ДопЗаголовки.Вставить("Content-Type" , "application/octet-stream");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина);
|
||||||
|
|
||||||
|
РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(РезультатПроверки) Тогда
|
||||||
|
Возврат РезультатПроверки;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// !OInt КБайт = 1024;
|
||||||
|
// !OInt МБайт = КБайт * КБайт;
|
||||||
|
// !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
|
||||||
|
|
||||||
|
// !OInt ВыполнитьСборкуМусора();
|
||||||
|
// !OInt ОсвободитьОбъект(ТекущиеДанные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция)
|
||||||
|
|
||||||
|
НачалоКодовОшибок = 400;
|
||||||
|
КонецКодовПадений = 600;
|
||||||
|
НачалоКодовУспеха = 200;
|
||||||
|
КонецКодовУспеха = 300;
|
||||||
|
Перенаправление = 308;
|
||||||
|
|
||||||
|
Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда
|
||||||
|
|
||||||
|
ЗаголовокПотока = "bytes */" + СтрОбщийРазмер;
|
||||||
|
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
|
||||||
|
|
||||||
|
ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина);
|
||||||
|
|
||||||
|
Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда
|
||||||
|
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(ОтветПроверки);
|
||||||
|
Возврат ОтветПроверки;
|
||||||
|
|
||||||
|
ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда
|
||||||
|
|
||||||
|
ЗагруженныеДанные = Ответ.Заголовки["Range"];
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
ЗагруженныеДанные = Ответ.Заголовки["Range"];
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", "");
|
||||||
|
МассивИнформации = СтрРазделить(ЗагруженныеДанные, "-", Ложь);
|
||||||
|
НеобходимоЧастей = 2;
|
||||||
|
|
||||||
|
Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда
|
||||||
|
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекущаяПозиция = Число(МассивИнформации[1]) + 1;
|
||||||
|
|
||||||
|
Возврат "";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_GoogleDrive/OPI_GoogleDrive.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_GoogleDrive/OPI_GoogleDrive.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3bf39c90-a263-4300-b800-7fd85f7c6d40">
|
||||||
|
<name>OPI_GoogleDrive</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI google drive</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
409
en/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl
Normal file
409
en/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl
Normal file
@ -0,0 +1,409 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_GoogleSheets.os
|
||||||
|
// Библиотека: Google Sheets
|
||||||
|
// Команда CLI: gsheets
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСКнигами
|
||||||
|
|
||||||
|
// Создать книгу
|
||||||
|
// Создает новую книгу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Наименование - Строка - Наименование - title
|
||||||
|
// МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets";
|
||||||
|
|
||||||
|
Свойства = Новый Структура("title" , Наименование);
|
||||||
|
Листы = Новый Массив;
|
||||||
|
|
||||||
|
ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить книгу
|
||||||
|
// Получает информацию о книге по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Идентификатор - Строка - Идентификатор книги - spreadsheet
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить наименование книги
|
||||||
|
// Изменяет наименование существующей книги
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - ID книги - spreadsheet
|
||||||
|
// Наименование - Строка - Новое наименование - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||||
|
|
||||||
|
Изменение = Новый Структура("title", Наименование);
|
||||||
|
ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
|
||||||
|
Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
|
||||||
|
|
||||||
|
МассивЗапросов = Новый Массив;
|
||||||
|
МассивЗапросов.Добавить(Запрос);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("requests", МассивЗапросов);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСЛистами
|
||||||
|
|
||||||
|
// Добавить лист
|
||||||
|
// Добавляет новый лист в книгу
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - Идентификатор книги - spreadsheet
|
||||||
|
// Наименование - Строка - Наименование нового листа - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||||
|
Лист = СоздатьЛист(Наименование);
|
||||||
|
|
||||||
|
Запросы = Новый Массив;
|
||||||
|
Изменение = Новый Структура("addSheet", Лист);
|
||||||
|
Запросы.Добавить(Изменение);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("requests", Запросы);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить лист
|
||||||
|
// Удаляет лист из книги
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - Идентификатор книги - spreadsheet
|
||||||
|
// Лист - Строка - Идентификатор удаляемого листа - sheet
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||||
|
|
||||||
|
Запросы = Новый Массив;
|
||||||
|
Лист = Новый Структура("sheetId" , Лист);
|
||||||
|
Изменение = Новый Структура("deleteSheet", Лист);
|
||||||
|
Запросы.Добавить(Изменение);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("requests", Запросы);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Копировать лист
|
||||||
|
// Копирует лист из одной книги в другую
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Откуда - Строка - ID книги источника - from
|
||||||
|
// Куда - Строка - ID книги приемника - to
|
||||||
|
// Лист - Строка - ID копируемого листа - sheet
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/"
|
||||||
|
+ Откуда
|
||||||
|
+ "/sheets/"
|
||||||
|
+ Лист
|
||||||
|
+ ":copyTo";
|
||||||
|
|
||||||
|
Параметры = Новый Структура("destinationSpreadsheetId", Куда);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСДанными
|
||||||
|
|
||||||
|
// Установить значения ячеек
|
||||||
|
// Устанавливает значения ячеек листа
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - ID книги - spreadsheet
|
||||||
|
// СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data
|
||||||
|
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||||
|
// ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция УстановитьЗначенияЯчеек(Знач Токен
|
||||||
|
, Знач Книга
|
||||||
|
, Знач СоответствиеЗначений
|
||||||
|
, Знач Лист = ""
|
||||||
|
, Знач ОсновноеИзмерение = "COLUMNS") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
|
||||||
|
|
||||||
|
Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
|
||||||
|
И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
|
||||||
|
Возврат "Не удалось привести структуру значений к коллекции";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
|
||||||
|
МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Очистить ячейки
|
||||||
|
// Очищает значение в ячейках
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - ID книги - spreadsheet
|
||||||
|
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells
|
||||||
|
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
|
||||||
|
|
||||||
|
СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("ranges", МассивЯчеек);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить значения ячеек
|
||||||
|
// Получает значения ячеек таблицы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Книга - Строка - ID книги - spreadsheet
|
||||||
|
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells
|
||||||
|
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||||
|
|
||||||
|
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(МассивЯчеек) Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
|
||||||
|
СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
|
||||||
|
|
||||||
|
Первый = Истина;
|
||||||
|
Для Каждого Ячейка Из МассивЯчеек Цикл
|
||||||
|
Разделитель = ?(Первый, "?", "&");
|
||||||
|
URL = URL + Разделитель + "ranges=" + Ячейка;
|
||||||
|
Первый = Ложь;
|
||||||
|
КонецЦикла;
|
||||||
|
Иначе
|
||||||
|
URL = URL + "?ranges='" + Лист + "'";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
|
||||||
|
|
||||||
|
Для Каждого ИмяЛиста Из МассивИмен Цикл
|
||||||
|
|
||||||
|
Лист = СоздатьЛист(ИмяЛиста);
|
||||||
|
МассивЛистов.Добавить(Лист);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Лист) Тогда
|
||||||
|
Ячейка = "'" + Лист + "'!" + Ячейка;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция СоздатьЛист(Знач Наименование)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||||
|
|
||||||
|
СвойстваЛиста = Новый Структура("title" , Наименование);
|
||||||
|
Лист = Новый Структура("properties", СвойстваЛиста);
|
||||||
|
|
||||||
|
Возврат Лист;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||||
|
|
||||||
|
МассивДанных = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
|
||||||
|
|
||||||
|
ТекущееЗначение = ДанныеЯчейки.Значение;
|
||||||
|
ТекущийКлюч = ДанныеЯчейки.Ключ;
|
||||||
|
|
||||||
|
ДобавитьИмяЛиста(ТекущийКлюч, Лист);
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
|
||||||
|
|
||||||
|
ТекущиеДанные = Новый Соответствие;
|
||||||
|
ТекущийМассив = Новый Массив;
|
||||||
|
|
||||||
|
ТекущийМассив.Добавить(ТекущееЗначение);
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
|
||||||
|
|
||||||
|
МассивДанных.Добавить(ТекущиеДанные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат МассивДанных;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||||
|
|
||||||
|
Для Н = 0 По МассивИмен.ВГраница() Цикл
|
||||||
|
ДобавитьИмяЛиста(МассивИмен[Н], Лист);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3890523a-552f-495c-ae7d-2991df8bb175">
|
||||||
|
<name>OPI_GoogleSheets</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI google sheets</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
173
en/OPI/src/CommonModules/OPI_GoogleWorkspace/Module.bsl
Normal file
173
en/OPI/src/CommonModules/OPI_GoogleWorkspace/Module.bsl
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os
|
||||||
|
// Библиотека: Google Workspace
|
||||||
|
// Команда CLI: google
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
// Сформировать ссылку получения кода
|
||||||
|
// Возвращает URL для авторизации в браузере
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientID - Строка - Client ID - id
|
||||||
|
// Calendar - Булево - разрешение на методы Calendar - calendar
|
||||||
|
// Drive - Булево - разрешение на методы Drive - drive
|
||||||
|
// Sheets - Булево - разрешение на методы Sheets - sheets
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Ссылка получения кода
|
||||||
|
Функция СформироватьСсылкуПолученияКода(Знач ClientID
|
||||||
|
, Знач Calendar = Истина
|
||||||
|
, Знач Drive = Истина
|
||||||
|
, Знач Sheets = Истина) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
|
||||||
|
|
||||||
|
URL = "https://accounts.google.com/o/oauth2/auth";
|
||||||
|
|
||||||
|
ПараметрыURL = Новый Структура;
|
||||||
|
ПараметрыURL.Вставить("response_type", "code");
|
||||||
|
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||||
|
ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
|
||||||
|
ПараметрыURL.Вставить("access_type" , "offline");
|
||||||
|
ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
|
||||||
|
|
||||||
|
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||||
|
|
||||||
|
Возврат URL;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить токен по коду
|
||||||
|
// Получает токен по коду из авторизации в бразуере
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientID - Строка - Client ID - id
|
||||||
|
// ClientSecret - Строка - Client secret - secret
|
||||||
|
// Code - Строка - Code из браузера - code
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
|
||||||
|
|
||||||
|
URL = "https://accounts.google.com/o/oauth2/token";
|
||||||
|
|
||||||
|
ПараметрыURL = Новый Структура;
|
||||||
|
ПараметрыURL.Вставить("grant_type" , "authorization_code");
|
||||||
|
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||||
|
ПараметрыURL.Вставить("client_secret", ClientSecret);
|
||||||
|
ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
|
||||||
|
ПараметрыURL.Вставить("code" , Code);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить токен
|
||||||
|
// Обновляет токен по Refresh token
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientID - Строка - Client ID - id
|
||||||
|
// ClientSecret - Строка - Client secret - secret
|
||||||
|
// RefreshToken - Строка - Refresh token - refresh
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||||
|
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
|
||||||
|
|
||||||
|
URL = "https://accounts.google.com/o/oauth2/token";
|
||||||
|
|
||||||
|
ПараметрыURL = Новый Структура;
|
||||||
|
ПараметрыURL.Вставить("grant_type" , "refresh_token");
|
||||||
|
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||||
|
ПараметрыURL.Вставить("client_secret", ClientSecret);
|
||||||
|
ПараметрыURL.Вставить("refresh_token", RefreshToken);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Authorization", "Bearer " + Токен);
|
||||||
|
|
||||||
|
Возврат Заголовки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИфункции
|
||||||
|
|
||||||
|
Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
|
||||||
|
|
||||||
|
МассивРазрешений = Новый Массив;
|
||||||
|
|
||||||
|
Если Calendar Тогда
|
||||||
|
МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Drive Тогда
|
||||||
|
МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Sheets Тогда
|
||||||
|
МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СтрСоединить(МассивРазрешений, " ");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5bf1867-4c83-4724-91f2-931150325ea0">
|
||||||
|
<name>OPI_GoogleWorkspace</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI google workspace</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
889
en/OPI/src/CommonModules/OPI_Notion/Module.bsl
Normal file
889
en/OPI/src/CommonModules/OPI_Notion/Module.bsl
Normal file
@ -0,0 +1,889 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_Notion.os
|
||||||
|
// Библиотека: Notion
|
||||||
|
// Команда CLI: notion
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:NumberOfOptionalParams-off
|
||||||
|
// BSLLS:UsingServiceTag-off
|
||||||
|
|
||||||
|
// @skip-check method-too-many-params
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСоСтраницами
|
||||||
|
|
||||||
|
// Создать страницу
|
||||||
|
// Создает дочернюю страницу над другой страницей-родителем
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Родитель - Строка - ID Родителя - page
|
||||||
|
// Заголовок - Строка - Заголовок страницы - title
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция СоздатьСтраницу(Знач Токен, Знач Родитель, Знач Заголовок) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Свойства = Новый Структура;
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
ДобавитьЗаголовокСтраницы(Заголовок, Свойства);
|
||||||
|
ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры);
|
||||||
|
|
||||||
|
Параметры.Вставить("properties", Свойства);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать страницу в базу
|
||||||
|
// Создает страницу в базе-родителе
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Родитель - Строка - ID родительской базы - base
|
||||||
|
// Данные - Соответствие Из КлючИЗначение - Соответствие свойств - data
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция СоздатьСтраницуВБазу(Знач Токен, Знач Родитель, Знач Данные) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
ДобавитьРодителяСтраницы(Родитель, Истина, Параметры);
|
||||||
|
|
||||||
|
Свойства = ЗаполнитьДанныеПоСхеме(Родитель, Данные, Токен);
|
||||||
|
Параметры.Вставить("properties", Свойства);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить страницу
|
||||||
|
// Получает информацию о странице по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Страница - Строка - ID страницы - page
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ПолучитьСтраницу(Знач Токен, Знач Страница) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Страница);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
ПреобразоватьИД(Страница);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Страница, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить свойства страницы.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Страница - Строка - ID изменяемой страницы - page
|
||||||
|
// Данные - Соответствие Из КлючИЗначение - Соответствие изменяемых параметров - data
|
||||||
|
// Иконка - Строка - URL картинки иконки страницы - icon
|
||||||
|
// Обложка - Строка - URL картинки обложки страницы - cover
|
||||||
|
// Архивирована - Булево - Архивировать страницу или нет (булево) - archive
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ИзменитьСвойстваСтраницы(Знач Токен
|
||||||
|
, Знач Страница
|
||||||
|
, Знач Данные = ""
|
||||||
|
, Знач Иконка = ""
|
||||||
|
, Знач Обложка = ""
|
||||||
|
, Знач Архивирована = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Страница);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Иконка);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Обложка);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Архивирована);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Files = "files";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Данные)
|
||||||
|
И (ТипЗнч(Данные) = Тип("Соответствие") Или ТипЗнч(Данные) = Тип("Структура")) Тогда
|
||||||
|
Свойства = ЗаполнитьДанныеПоСхеме(Страница, Данные, Токен, Ложь);
|
||||||
|
Иначе
|
||||||
|
Свойства = Новый Соответствие;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Иконка) Тогда
|
||||||
|
СоответствиеИконки = Новый Соответствие;
|
||||||
|
СоответствиеИконки.Вставить("Icon", Иконка);
|
||||||
|
|
||||||
|
ОбъектИконка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеИконки);
|
||||||
|
ОбъектИконка = ОбъектИконка[Files][0];
|
||||||
|
ОбъектИконка.Удалить("name");
|
||||||
|
|
||||||
|
Параметры.Вставить("icon", ОбъектИконка);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Обложка) Тогда
|
||||||
|
СоответствиеОбложки = Новый Соответствие;
|
||||||
|
СоответствиеОбложки.Вставить("Cover", Обложка);
|
||||||
|
|
||||||
|
ОбъектОбложка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеОбложки);
|
||||||
|
ОбъектОбложка = ОбъектОбложка[Files][0];
|
||||||
|
ОбъектОбложка.Удалить("name");
|
||||||
|
|
||||||
|
Параметры.Вставить("cover", ОбъектОбложка);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры.Вставить("properties", Свойства);
|
||||||
|
Параметры.Вставить("archived" , Архивирована);
|
||||||
|
|
||||||
|
ПреобразоватьИД(Страница);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/pages/" + Страница, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСБазамиДанных
|
||||||
|
|
||||||
|
// Создать базу данных
|
||||||
|
// Создает базу данных
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Родитель - Строка - ID страницы родителя - page
|
||||||
|
// Заголовок - Строка - Заголовок базы данных - title
|
||||||
|
// Свойства - Структура Из Строка - Свойства базы данных - props
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция СоздатьБазуДанных(Знач Токен, Знач Родитель, Знач Заголовок, Знач Свойства = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Свойства);
|
||||||
|
|
||||||
|
// Пример структуры/соответствия свойств
|
||||||
|
|
||||||
|
// Имя : title
|
||||||
|
// Описание : rich_text
|
||||||
|
// В работе : checkbox
|
||||||
|
// Количество : number
|
||||||
|
// Дата : date
|
||||||
|
// Статус : Соответствие
|
||||||
|
// Активный : green
|
||||||
|
// Неактивный : red
|
||||||
|
// Архив : yellow
|
||||||
|
|
||||||
|
// Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя
|
||||||
|
|
||||||
|
Если Не ТипЗнч(Свойства) = Тип("Структура") И Не ТипЗнч(Свойства) = Тип("Соответствие") Тогда
|
||||||
|
Свойства = Новый Структура("Наименование", "title");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
ДобавитьРодителяБазы(Родитель, Ложь, Параметры);
|
||||||
|
ДобавитьЗаголовокБазы(Заголовок, Параметры);
|
||||||
|
ДобавитьСвойстваБазы(Свойства, Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/databases", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить базу данных
|
||||||
|
// Получить данные о базе данных
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - ID базы данных - base
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ПолучитьБазуДанных(Знач Токен, Знач База) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
ПреобразоватьИД(База);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/databases/" + База, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить свойства базы
|
||||||
|
// Изменяет свойства существующей базы
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// База - Строка - ID целевой базы - base
|
||||||
|
// Свойства - Соответствие из КлючИЗначение - Новые или изменяемые свойства базы данных - props
|
||||||
|
// Заголовок - Строка - Новый заголовок базы - title
|
||||||
|
// Описание - Строка - Новое описание базы - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ИзменитьСвойстваБазы(Знач Токен, Знач База, Знач Свойства = "", Знач Заголовок = "", Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Свойства);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
ПреобразоватьИД(База);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Заголовок) Тогда
|
||||||
|
ДобавитьЗаголовокБазы(Заголовок, Параметры);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Описание) Тогда
|
||||||
|
ДобавитьОписаниеБазы(Описание, Параметры);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Свойства) = Тип("Структура") Или ТипЗнч(Свойства) = Тип("Соответствие") Тогда
|
||||||
|
ДобавитьСвойстваБазы(Свойства, Параметры);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/databases/" + База, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСБлоками
|
||||||
|
|
||||||
|
// Создать блок
|
||||||
|
// Создает новый блок на основе существующего блока
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Родитель - Строка - ID родительского блока или страницы - page
|
||||||
|
// Блок - Строка,Соответствие Из КлючИЗначение - ID блока или сам блок образец - block
|
||||||
|
// ВставитьПосле - Строка - ID блока, после которого необходимо встаивть новый - prev
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция СоздатьБлок(Знач Токен, Знач Родитель, Знач Блок, Знач ВставитьПосле = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ВставитьПосле);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блок);
|
||||||
|
|
||||||
|
Если ТипЗнч(Блок) = Тип("Массив") Тогда
|
||||||
|
Блок = Блок[0];
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
ПреобразоватьИД(Родитель);
|
||||||
|
|
||||||
|
Если ТипЗнч(Блок) = Тип("Строка") Тогда
|
||||||
|
ПреобразоватьИД(Блок);
|
||||||
|
Блок = ВернутьБлок(Токен, Блок);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивБлоков = Новый Массив;
|
||||||
|
МассивБлоков.Добавить(Блок);
|
||||||
|
|
||||||
|
Параметры = Новый Соответствие;
|
||||||
|
Параметры.Вставить("children", МассивБлоков);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ВставитьПосле) Тогда
|
||||||
|
Параметры.Вставить("after", ВставитьПосле);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
URL = "https://api.notion.com/v1/blocks/" + Родитель + "/children";
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Вернуть блок.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДБлока - Строка - ID блока - block
|
||||||
|
// ТолькоОснова - Булево - Истина > служебные поля удаляются, остается только сам блок - core
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ВернутьБлок(Знач Токен, Знач ИДБлока, Знач ТолькоОснова = Истина) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоОснова);
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
||||||
|
|
||||||
|
Если ТолькоОснова Тогда
|
||||||
|
УдалитьЛишниеПоляБлока(Ответ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Вернуть дочерние блоки
|
||||||
|
// Созвращает список дочерних блоков блока-родителя
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДБлока - Строка - ID блока родителя - block
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ВернутьДочерниеБлоки(Знач Токен, Знач ИДБлока) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока + "/children", , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить блок
|
||||||
|
// Удаляет блок по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДБлока - Строка - ID блока - block
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция УдалитьБлок(Знач Токен, Знач ИДБлока) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Delete("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область Пользователи
|
||||||
|
|
||||||
|
// Список пользователей
|
||||||
|
// Возвращает список пользователей рабочего пространства
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция СписокПользователей(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users", , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить данные пользователя
|
||||||
|
// Получает данные пользователя по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИДПользователя - Строка - ID целевого пользователя - user
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
|
||||||
|
Функция ПолучитьДанныеПользователя(Знач Токен, Знач ИДПользователя) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДПользователя);
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДПользователя);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users/" + ИДПользователя, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция СоздатьЗаголовкиЗапроса(Знач Токен)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
|
||||||
|
Заголовки.Вставить("Notion-Version", "2022-06-28");
|
||||||
|
|
||||||
|
Возврат Заголовки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ПреобразоватьИД(Идентификатор)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||||
|
|
||||||
|
Идентификатор = СтрЗаменить(Идентификатор, "-", "");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьРодителяСтраницы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(РодительБаза);
|
||||||
|
|
||||||
|
ПреобразоватьИД(Родитель);
|
||||||
|
|
||||||
|
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
|
||||||
|
СтруктураРодителя = Новый Структура(ПолеИдентификатора, Родитель);
|
||||||
|
|
||||||
|
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьРодителяБазы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(РодительБаза);
|
||||||
|
|
||||||
|
ПреобразоватьИД(Родитель);
|
||||||
|
|
||||||
|
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
|
||||||
|
|
||||||
|
СтруктураРодителя = Новый Структура();
|
||||||
|
СтруктураРодителя.Вставить("type" , ПолеИдентификатора);
|
||||||
|
СтруктураРодителя.Вставить(ПолеИдентификатора, Родитель);
|
||||||
|
|
||||||
|
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьЗаголовокСтраницы(Знач Заголовок, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
||||||
|
|
||||||
|
ПодчиненнаяСтруктура = Новый Структура;
|
||||||
|
СтруктураДанных = Новый Структура;
|
||||||
|
СтруктураТекста = Новый Структура;
|
||||||
|
МассивДанных = Новый Массив;
|
||||||
|
Title = "title";
|
||||||
|
|
||||||
|
СтруктураТекста.Вставить("content", Заголовок);
|
||||||
|
СтруктураТекста.Вставить("link" , Неопределено);
|
||||||
|
|
||||||
|
СтруктураДанных.Вставить("text", СтруктураТекста);
|
||||||
|
СтруктураДанных.Вставить("type", "text");
|
||||||
|
|
||||||
|
МассивДанных.Добавить(СтруктураДанных);
|
||||||
|
|
||||||
|
ПодчиненнаяСтруктура.Вставить("id" , Title);
|
||||||
|
ПодчиненнаяСтруктура.Вставить("type" , Title);
|
||||||
|
ПодчиненнаяСтруктура.Вставить(Title , МассивДанных);
|
||||||
|
|
||||||
|
ОсновнаяСтруктура.Вставить(Title, ПодчиненнаяСтруктура);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьЗаголовокБазы(Знач Заголовок, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
||||||
|
|
||||||
|
Заголовок = ПреобразоватьЗаголовок(Заголовок);
|
||||||
|
ОсновнаяСтруктура.Вставить("title", Заголовок["title"]);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьОписаниеБазы(Знач Описание, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
|
||||||
|
|
||||||
|
Заголовок = ПреобразоватьЗаголовок(Описание);
|
||||||
|
ОсновнаяСтруктура.Вставить("description", Заголовок["title"]);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьСвойстваБазы(Знач Свойства, ОсновнаяСтруктура)
|
||||||
|
|
||||||
|
Если Свойства.Количество() = 0 Тогда
|
||||||
|
ОсновнаяСтруктура.Вставить("properties", Новый Структура);
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СоответствиеПараметров = Новый Соответствие;
|
||||||
|
|
||||||
|
Для Каждого Свойство Из Свойства Цикл
|
||||||
|
|
||||||
|
Если ТипЗнч(Свойство.Значение) = Тип("Строка") Тогда
|
||||||
|
|
||||||
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура(Свойство.Значение, Новый Структура));
|
||||||
|
|
||||||
|
ИначеЕсли ТипЗнч(Свойство.Значение) = Тип("Структура")
|
||||||
|
Или ТипЗнч(Свойство.Значение) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
|
||||||
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения));
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Свойство.Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ОсновнаяСтруктура.Вставить("properties", СоответствиеПараметров);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция СформироватьЗначенияВыбора(Знач СтруктураВариантов)
|
||||||
|
|
||||||
|
МассивВариантов = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Вариант Из СтруктураВариантов Цикл
|
||||||
|
|
||||||
|
СоответствиеВарианта = Новый Соответствие;
|
||||||
|
СоответствиеВарианта.Вставить("name" , Вариант.Ключ);
|
||||||
|
СоответствиеВарианта.Вставить("color", Вариант.Значение);
|
||||||
|
|
||||||
|
МассивВариантов.Добавить(СоответствиеВарианта);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Новый Структура("options", МассивВариантов);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗаполнитьДанныеПоСхеме(Знач Схема, Знач Данные, Знач Токен, Знач ЭтоБаза = Истина)
|
||||||
|
|
||||||
|
Если ЭтоБаза Тогда
|
||||||
|
ДанныеСхемы = ПолучитьБазуДанных(Токен, Схема);
|
||||||
|
Иначе
|
||||||
|
ДанныеСхемы = ПолучитьСтраницу(Токен, Схема);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПоляБазы = ДанныеСхемы["properties"];
|
||||||
|
Свойства = Новый Соответствие;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ПоляБазы) Тогда
|
||||||
|
|
||||||
|
Для Каждого Поле Из ПоляБазы Цикл
|
||||||
|
|
||||||
|
ДанныеПоля = Поле.Значение;
|
||||||
|
ТипПоля = ДанныеПоля["type"];
|
||||||
|
|
||||||
|
ЗаполняемыеДанные = Данные.Получить(Поле.Ключ);
|
||||||
|
|
||||||
|
Если ЗаполняемыеДанные = Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПреобразованныеДанные = ПреобразоватьЗначениеПоТипу(ТипПоля, ЗаполняемыеДанные);
|
||||||
|
|
||||||
|
Если ПреобразованныеДанные = Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Свойства.Вставить(ДанныеПоля["id"], ПреобразованныеДанные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Свойства;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура УдалитьЛишниеПоляБлока(Знач Блок)
|
||||||
|
|
||||||
|
МассивЛишних = Новый Массив;
|
||||||
|
МассивЛишних.Добавить("request_id");
|
||||||
|
МассивЛишних.Добавить("archived");
|
||||||
|
МассивЛишних.Добавить("created_by");
|
||||||
|
МассивЛишних.Добавить("last_edited_time");
|
||||||
|
МассивЛишних.Добавить("created_time");
|
||||||
|
МассивЛишних.Добавить("has_children");
|
||||||
|
МассивЛишних.Добавить("parrent");
|
||||||
|
МассивЛишних.Добавить("last_edited_by");
|
||||||
|
МассивЛишних.Добавить("id");
|
||||||
|
|
||||||
|
Для Каждого Поле Из МассивЛишних Цикл
|
||||||
|
|
||||||
|
Если Не Блок.Получить(Поле) = Неопределено Тогда
|
||||||
|
Блок.Удалить(Поле);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#Область ПреобразованиеТипов
|
||||||
|
|
||||||
|
Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
|
||||||
|
|
||||||
|
Если Тип = "title" Тогда
|
||||||
|
Возврат ПреобразоватьЗаголовок(Значение);
|
||||||
|
ИначеЕсли Тип = "rich_text" Тогда
|
||||||
|
Возврат ПреобразоватьТекст(Значение);
|
||||||
|
ИначеЕсли Тип = "number" Тогда
|
||||||
|
Возврат ПреобразоватьЧисло(Значение);
|
||||||
|
ИначеЕсли Тип = "select" Тогда
|
||||||
|
Возврат ПреобразоватьВариантВыбора(Значение);
|
||||||
|
ИначеЕсли Тип = "multi_select" Тогда
|
||||||
|
Возврат ПреобразоватьМножественныйВыбор(Значение);
|
||||||
|
ИначеЕсли Тип = "status" Тогда
|
||||||
|
Возврат ПреобразоватьСтатус(Значение);
|
||||||
|
ИначеЕсли Тип = "date" Тогда
|
||||||
|
Возврат ПреобразоватьДату(Значение);
|
||||||
|
ИначеЕсли Тип = "relation" Тогда
|
||||||
|
Возврат ПреобразоватьСвязь(Значение);
|
||||||
|
ИначеЕсли Тип = "people" Тогда
|
||||||
|
Возврат ПреобразоватьПользователей(Значение);
|
||||||
|
ИначеЕсли Тип = "files" Тогда
|
||||||
|
Возврат ПреобразоватьФайлы(Значение);
|
||||||
|
ИначеЕсли Тип = "checkbox" Тогда
|
||||||
|
Возврат ПреобразоватьБулево(Значение);
|
||||||
|
ИначеЕсли Тип = "url" Тогда
|
||||||
|
Возврат ПреобразоватьСсылку(Значение);
|
||||||
|
ИначеЕсли Тип = "email" Тогда
|
||||||
|
Возврат ПреобразоватьПочту(Значение);
|
||||||
|
ИначеЕсли Тип = "phone_number" Тогда
|
||||||
|
Возврат ПреобразоватьТелефон(Значение);
|
||||||
|
Иначе
|
||||||
|
Возврат Неопределено;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьЗаголовок(Знач Заголовок)
|
||||||
|
|
||||||
|
СтруктураДанных = Новый Структура;
|
||||||
|
СтруктураТекста = Новый Структура;
|
||||||
|
МассивДанных = Новый Массив;
|
||||||
|
|
||||||
|
СтруктураТекста.Вставить("content", Заголовок);
|
||||||
|
СтруктураТекста.Вставить("link" , Неопределено);
|
||||||
|
|
||||||
|
СтруктураДанных.Вставить("type", "text");
|
||||||
|
СтруктураДанных.Вставить("text", СтруктураТекста);
|
||||||
|
|
||||||
|
МассивДанных.Добавить(СтруктураДанных);
|
||||||
|
|
||||||
|
Возврат Новый Структура("title", МассивДанных);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьТекст(Знач Текст)
|
||||||
|
|
||||||
|
МассивТекста = Новый Массив;
|
||||||
|
СтруктураТекста = Новый Структура;
|
||||||
|
|
||||||
|
СтруктураТекста.Вставить("type", "text");
|
||||||
|
СтруктураТекста.Вставить("text", Новый Структура("content", Текст));
|
||||||
|
|
||||||
|
МассивТекста.Добавить(СтруктураТекста);
|
||||||
|
|
||||||
|
Возврат Новый Структура("rich_text", МассивТекста);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьЧисло(Знач Число)
|
||||||
|
Возврат Новый Структура("number", Число);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьВариантВыбора(Знач Вариант)
|
||||||
|
|
||||||
|
СтруктураВыбора = Новый Структура;
|
||||||
|
СтруктураВыбора.Вставить("select", Новый Структура("name", Вариант));
|
||||||
|
|
||||||
|
Возврат СтруктураВыбора;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьСтатус(Знач Статус)
|
||||||
|
|
||||||
|
СтруктураСтатуса = Новый Структура;
|
||||||
|
СтруктураСтатуса.Вставить("status", Новый Структура("name", Статус));
|
||||||
|
|
||||||
|
Возврат СтруктураСтатуса;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьМножественныйВыбор(Знач МассивВариантов)
|
||||||
|
|
||||||
|
МассивВариантовВыбора = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Вариант Из МассивВариантов Цикл
|
||||||
|
МассивВариантовВыбора.Добавить(Новый Структура("name", Вариант));
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Новый Структура("multi_select", МассивВариантовВыбора);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьДату(Знач Дата)
|
||||||
|
|
||||||
|
СтруктураДаты = Новый Структура;
|
||||||
|
|
||||||
|
Если Дата = НачалоДня(Дата) Тогда
|
||||||
|
ФорматДаты = "ДФ=yyyy-MM-dd";
|
||||||
|
Иначе
|
||||||
|
ФорматДаты = "ДФ=yyyy-MM-ddThh:mm:ssZ";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Дата = Формат(Дата, ФорматДаты);
|
||||||
|
СтруктураДаты.Вставить("start", Дата);
|
||||||
|
|
||||||
|
Возврат Новый Структура("date", СтруктураДаты);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьСвязь(Знач Идентификатор)
|
||||||
|
|
||||||
|
МассивСвязи = Новый Массив;
|
||||||
|
МассивСвязи.Добавить(Новый Структура("id", Идентификатор));
|
||||||
|
|
||||||
|
Возврат Новый Структура("relation", МассивСвязи);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьПользователей(Знач МассивИД)
|
||||||
|
|
||||||
|
Если Не ТипЗнч(МассивИД) = Тип("Массив") Тогда
|
||||||
|
МассивИД_ = Новый Массив;
|
||||||
|
МассивИД_.Добавить(МассивИД);
|
||||||
|
МассивИД = МассивИД_;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивПользователей = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Идентификатор Из МассивИД Цикл
|
||||||
|
|
||||||
|
СтруктураПользователя = Новый Структура;
|
||||||
|
СтруктураПользователя.Вставить("object", "user");
|
||||||
|
СтруктураПользователя.Вставить("id" , Идентификатор);
|
||||||
|
МассивПользователей.Добавить(СтруктураПользователя);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Новый Структура("people", МассивПользователей);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьФайлы(Знач СоответствиеФайлов)
|
||||||
|
|
||||||
|
МассивФайлов = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Файл Из СоответствиеФайлов Цикл
|
||||||
|
|
||||||
|
СтруктураФайла = Новый Структура;
|
||||||
|
СтруктураФайла.Вставить("type" , "external");
|
||||||
|
СтруктураФайла.Вставить("name" , Файл.Ключ);
|
||||||
|
СтруктураФайла.Вставить("external", Новый Структура("url", Файл.Значение));
|
||||||
|
|
||||||
|
МассивФайлов.Добавить(СтруктураФайла);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Новый Структура("files", МассивФайлов);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьБулево(Знач Булево)
|
||||||
|
Возврат Новый Структура("checkbox", Булево);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьСсылку(Знач URL)
|
||||||
|
Возврат Новый Структура("url", URL);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьПочту(Знач Почта)
|
||||||
|
Возврат Новый Структура("email", Почта);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПреобразоватьТелефон(Знач Телефон)
|
||||||
|
Возврат Новый Структура("phone_number", Телефон);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_Notion/OPI_Notion.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Notion/OPI_Notion.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1bef723b-a2a4-4547-b29f-63cf9c78d813">
|
||||||
|
<name>OPI_Notion</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы работы с Notion (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
1055
en/OPI/src/CommonModules/OPI_Slack/Module.bsl
Normal file
1055
en/OPI/src/CommonModules/OPI_Slack/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
11
en/OPI/src/CommonModules/OPI_Slack/OPI_Slack.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Slack/OPI_Slack.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="21b89e7a-e792-4a4c-9d01-c630225fe48a">
|
||||||
|
<name>OPI_Slack</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Slack</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
1253
en/OPI/src/CommonModules/OPI_Telegram/Module.bsl
Normal file
1253
en/OPI/src/CommonModules/OPI_Telegram/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
11
en/OPI/src/CommonModules/OPI_Telegram/OPI_Telegram.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Telegram/OPI_Telegram.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fe603e76-e34a-40fd-977d-ee3c2dbc6620">
|
||||||
|
<name>OPI_Telegram</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы интеграции с Telegram (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
682
en/OPI/src/CommonModules/OPI_Twitter/Module.bsl
Normal file
682
en/OPI/src/CommonModules/OPI_Twitter/Module.bsl
Normal file
@ -0,0 +1,682 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_Twitter.os
|
||||||
|
// Библиотека: Twitter
|
||||||
|
// Команда CLI: twitter
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
// Если в не знаете с чего начать, то стоит найти метод ПолучитьСтандартныеПараметры()
|
||||||
|
// и почитать комментарии
|
||||||
|
|
||||||
|
// BSLLS:Typo-off
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:NumberOfOptionalParams-off
|
||||||
|
// BSLLS:UsingServiceTag-off
|
||||||
|
|
||||||
|
//@skip-check method-too-many-params
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область ДанныеИНастройка
|
||||||
|
|
||||||
|
// Получить ссылку для авторизации
|
||||||
|
// Формирует ссылку для авторизации через браузер
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - URL для перехода в браузере
|
||||||
|
Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт
|
||||||
|
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
|
||||||
|
ПараметрыURL = Новый Структура;
|
||||||
|
|
||||||
|
ПараметрыURL.Вставить("response_type" , "code");
|
||||||
|
ПараметрыURL.Вставить("client_id" , Параметры_["client_id"]);
|
||||||
|
ПараметрыURL.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
|
||||||
|
ПараметрыURL.Вставить("scope" , Параметры_["scope"]);
|
||||||
|
ПараметрыURL.Вставить("state" , "state");
|
||||||
|
ПараметрыURL.Вставить("code_challenge" , "challenge");
|
||||||
|
ПараметрыURL.Вставить("code_challenge_method", "plain");
|
||||||
|
|
||||||
|
ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||||
|
Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL;
|
||||||
|
|
||||||
|
Возврат Линк;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить токен
|
||||||
|
// Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Код - Строка - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Код);
|
||||||
|
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
|
||||||
|
ПараметрыЗапроса = Новый Структура;
|
||||||
|
ПараметрыЗапроса.Вставить("code" , Код);
|
||||||
|
ПараметрыЗапроса.Вставить("grant_type" , "authorization_code");
|
||||||
|
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
|
||||||
|
ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
|
||||||
|
ПараметрыЗапроса.Вставить("code_verifier", "challenge");
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
|
||||||
|
, ПараметрыЗапроса, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить токен
|
||||||
|
// Обновляет v2 токен при помощи refresh_token
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция ОбновитьТокен(Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
Refresh = "refresh_token";
|
||||||
|
|
||||||
|
ПараметрыЗапроса = Новый Структура;
|
||||||
|
ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]);
|
||||||
|
ПараметрыЗапроса.Вставить("grant_type" , Refresh);
|
||||||
|
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
|
||||||
|
, ПараметрыЗапроса, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Метод для вставки в http-сервис, адрес которого указывается в redirect_uri
|
||||||
|
// Вызывает метод получения токена, так как для получения токена из кода, приходящего
|
||||||
|
// на redirect_uri после авторизации через браузер есть всего 30 секунд
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера
|
||||||
|
Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт
|
||||||
|
|
||||||
|
Код = Запрос.ПараметрыЗапроса["code"];
|
||||||
|
ОтветТокен = ПолучитьТокен(Код);
|
||||||
|
|
||||||
|
// BSLLS:CommentedCode-off
|
||||||
|
// Предпочтительное хранение токенов
|
||||||
|
// Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]);
|
||||||
|
// Константы.TwitterToken.Установить(ОтветТокен["access_token"]);
|
||||||
|
// BSLLS:CommentedCode-on
|
||||||
|
|
||||||
|
Возврат ОтветТокен;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область Твиты
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Создать произвольный твит
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита
|
||||||
|
// МассивМедиа - Массив из Строка,ДвоичныеДанные - Массив двоичных данных или путей к файлам
|
||||||
|
// МассивВариантовОпроса - Массив из Строка - Массив вариантов опроса, если необходимо
|
||||||
|
// ДлительностьОпроса - Строка,Число - Длительность опроса, если необходимо (опрос без длительности не создается)
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьПроизвольныйТвит(Знач Текст = ""
|
||||||
|
, Знач МассивМедиа = ""
|
||||||
|
, Знач МассивВариантовОпроса = ""
|
||||||
|
, Знач ДлительностьОпроса = ""
|
||||||
|
, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(МассивМедиа) Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
URL = "https://api.twitter.com/2/tweets";
|
||||||
|
Массив = "Массив";
|
||||||
|
Поля = Новый Соответствие;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Текст) Тогда
|
||||||
|
Поля.Вставить("text", Текст);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
|
||||||
|
|
||||||
|
ДлительностьОпроса = Число(ДлительностьОпроса);
|
||||||
|
|
||||||
|
Если МассивВариантовОпроса.Количество() > 0 Тогда
|
||||||
|
|
||||||
|
СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса);
|
||||||
|
Поля.Вставить("poll", СтруктураВарианта);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
|
||||||
|
Если МассивМедиа.Количество() > 0 Тогда
|
||||||
|
Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать текстовый твит
|
||||||
|
// Создает твит без вложений
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита - text
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт
|
||||||
|
Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать твит картинки
|
||||||
|
// Создает твит с картинкой вложением
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита - text
|
||||||
|
// МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "tweet_image", Параметры);
|
||||||
|
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать твит гифки
|
||||||
|
// Создает твит с вложением-гифкой
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита - text
|
||||||
|
// МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "tweet_gif", Параметры);
|
||||||
|
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать твит видео
|
||||||
|
// Создает твит с видеовложением
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита - text
|
||||||
|
// МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "tweet_video", Параметры);
|
||||||
|
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать твит опрос
|
||||||
|
// Создает твит с опросом
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Текст - Строка - Текст твита - text
|
||||||
|
// МассивВариантов - Массив из Строка - Массив вариантов опроса - options
|
||||||
|
// Длительность - Строка,Число - Длительность опроса - duration
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
|
||||||
|
Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт
|
||||||
|
Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить массив вложений !NOCLI
|
||||||
|
// Загружает файлы на сервер и возвращает их ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// МассивФайлов - Массив из Строка, ДвоичныеДанные - Массив файлов
|
||||||
|
// ТипВложений - Строка - Тип вложений
|
||||||
|
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Массив Из Строка - Массив ID медиа
|
||||||
|
Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов);
|
||||||
|
|
||||||
|
МассивМедиа = Новый Массив;
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
MIS = "media_id_string";
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(МассивФайлов) Тогда
|
||||||
|
|
||||||
|
Для Каждого ФайлОтправки Из МассивФайлов Цикл
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки);
|
||||||
|
|
||||||
|
Ответ = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_);
|
||||||
|
IDМедиа = Ответ[MIS];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(IDМедиа) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивМедиа.Добавить(IDМедиа);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат МассивМедиа;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||||
|
|
||||||
|
ВидЗапроса = "POST";
|
||||||
|
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||||
|
URL = "https://upload.twitter.com/1.1/media/upload.json";
|
||||||
|
|
||||||
|
Если Тип = "tweet_image" Тогда
|
||||||
|
|
||||||
|
Поля = Новый Структура;
|
||||||
|
Поля.Вставить("media_data" , Base64Строка(Файл));
|
||||||
|
Поля.Вставить("media_category", Тип);
|
||||||
|
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры)
|
||||||
|
|
||||||
|
Единица = 1024;
|
||||||
|
Количество = 4;
|
||||||
|
MediaKey = "media_key";
|
||||||
|
MIS = "media_id_string";
|
||||||
|
Command = "command";
|
||||||
|
Размер = Файл.Размер();
|
||||||
|
|
||||||
|
СоответствиеMIME = Новый Соответствие;
|
||||||
|
СоответствиеMIME.Вставить("tweet_image", "image/jpeg");
|
||||||
|
СоответствиеMIME.Вставить("tweet_video", "video/mp4");
|
||||||
|
СоответствиеMIME.Вставить("tweet_gif" , "image/gif");
|
||||||
|
|
||||||
|
РазмерЧасти = Количество * Единица * Единица;
|
||||||
|
МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);
|
||||||
|
|
||||||
|
Поля = Новый Структура;
|
||||||
|
Поля.Вставить(Command , "INIT");
|
||||||
|
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
|
||||||
|
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
|
||||||
|
Поля.Вставить("media_category" , Тип);
|
||||||
|
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);
|
||||||
|
|
||||||
|
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||||
|
KeyИнициализации = ОтветИнициализации[MediaKey];
|
||||||
|
IDИнициализации = ОтветИнициализации[MIS];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
|
||||||
|
Возврат ОтветИнициализации;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Счетчик = 0;
|
||||||
|
|
||||||
|
Для Каждого Часть Из МассивЧтения Цикл
|
||||||
|
|
||||||
|
Поля = Новый Структура;
|
||||||
|
Поля.Вставить(Command , "APPEND");
|
||||||
|
Поля.Вставить("media_key" , KeyИнициализации);
|
||||||
|
Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик));
|
||||||
|
Поля.Вставить("media" , Часть);
|
||||||
|
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);
|
||||||
|
|
||||||
|
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
|
||||||
|
|
||||||
|
Счетчик = Счетчик + 1;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Поля = Новый Структура;
|
||||||
|
Поля.Вставить(Command , "FINALIZE");
|
||||||
|
Поля.Вставить("media_id", IDИнициализации);
|
||||||
|
|
||||||
|
СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL);
|
||||||
|
|
||||||
|
Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
|
||||||
|
Возврат СтатусОбработки;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры)
|
||||||
|
|
||||||
|
ProcessingInfo = "processing_info";
|
||||||
|
Command = "command";
|
||||||
|
Поля = Новый Структура;
|
||||||
|
|
||||||
|
Поля.Вставить(Command , "STATUS");
|
||||||
|
Поля.Вставить("media_id", IDИнициализации);
|
||||||
|
|
||||||
|
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
|
||||||
|
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
|
||||||
|
Информация = Ответ[ProcessingInfo];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Информация) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтатусОбработки = Информация["state"];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если СтатусОбработки = "failed" Тогда
|
||||||
|
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
|
||||||
|
|
||||||
|
// Здесь собрано определение данных, необходимых для работы.
|
||||||
|
// Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API,
|
||||||
|
// которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга.
|
||||||
|
// Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то,
|
||||||
|
// что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести
|
||||||
|
// механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать
|
||||||
|
// на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1,
|
||||||
|
// но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные
|
||||||
|
|
||||||
|
// Мировая гигокорпорация Илона Маска, кстати, напоминаю ;)
|
||||||
|
|
||||||
|
// P.S Далее часто упоминается "страница настроек Twitter Developer" - это
|
||||||
|
// https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем)
|
||||||
|
|
||||||
|
Параметры_ = Новый Соответствие;
|
||||||
|
Разрешения = "tweet.read tweet.write tweet.moderate.write users.read "
|
||||||
|
+ "follows.read follows.write offline.access space.read mute.read "
|
||||||
|
+ "mute.write like.read like.write list.read list.write block.read "
|
||||||
|
+ "block.write bookmark.read bookmark.write";
|
||||||
|
|
||||||
|
// Данные для API v2
|
||||||
|
|
||||||
|
// redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации
|
||||||
|
// scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен
|
||||||
|
// client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
|
||||||
|
// client_secret - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
|
||||||
|
// access_token - ПолучитьСсылкуАвторизации() -> Браузер -> code придет на redirect_uri -> ПолучитьТокен(code)
|
||||||
|
// refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч)
|
||||||
|
// Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token.
|
||||||
|
// При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить
|
||||||
|
// не получится (access_token тоже не получится)
|
||||||
|
|
||||||
|
// |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов
|
||||||
|
// | |refresh_token --|
|
||||||
|
// |--------[через 2 ч.]-------------------|
|
||||||
|
|
||||||
|
// Данные для API v1.1
|
||||||
|
|
||||||
|
// oauth_token - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
|
||||||
|
// oauth_token_secret - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
|
||||||
|
// oauth_consumer_key - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
|
||||||
|
// oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
|
||||||
|
|
||||||
|
// Эти токены обновлять не надо
|
||||||
|
|
||||||
|
Параметры_.Вставить("redirect_uri" , "");
|
||||||
|
Параметры_.Вставить("scope" , Разрешения);
|
||||||
|
Параметры_.Вставить("client_id" , "");
|
||||||
|
Параметры_.Вставить("client_secret" , "");
|
||||||
|
Параметры_.Вставить("access_token" , ""); // Должно быть нечто вроде Константы.TwitterToken.Получить()
|
||||||
|
Параметры_.Вставить("refresh_token" , ""); // Должно быть нечто вроде Константы.TwitterRefresh.Получить()
|
||||||
|
Параметры_.Вставить("oauth_token" , "");
|
||||||
|
Параметры_.Вставить("oauth_token_secret" , "");
|
||||||
|
Параметры_.Вставить("oauth_consumer_key" , "");
|
||||||
|
Параметры_.Вставить("oauth_consumer_secret", "");
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
|
||||||
|
|
||||||
|
Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
|
||||||
|
Для Каждого ПереданныйПараметр Из Параметры Цикл
|
||||||
|
Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Параметры_;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
|
||||||
|
|
||||||
|
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
|
||||||
|
ЗаголовокАвторизации = "";
|
||||||
|
МетодХэширования = "HMAC-SHA1";
|
||||||
|
ВерсияАпи = "1.0";
|
||||||
|
СтрокаСигнатуры = "";
|
||||||
|
Подпись = "";
|
||||||
|
OCK = "oauth_consumer_key";
|
||||||
|
OTK = "oauth_token";
|
||||||
|
ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДата);
|
||||||
|
ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
|
||||||
|
ТаблицаПараметров = Новый ТаблицаЗначений;
|
||||||
|
ТаблицаПараметров.Колонки.Добавить("Ключ");
|
||||||
|
ТаблицаПараметров.Колонки.Добавить("Значение");
|
||||||
|
|
||||||
|
Для Каждого Поле Из Поля Цикл
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = Поле.Ключ;
|
||||||
|
НоваяСтрока.Значение = Поле.Значение;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = OCK;
|
||||||
|
НоваяСтрока.Значение = Параметры[OCK];
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = OTK;
|
||||||
|
НоваяСтрока.Значение = Параметры[OTK];
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = "oauth_version";
|
||||||
|
НоваяСтрока.Значение = ВерсияАпи;
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = "oauth_signature_method";
|
||||||
|
НоваяСтрока.Значение = МетодХэширования;
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = "oauth_timestamp";
|
||||||
|
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||||
|
|
||||||
|
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||||
|
НоваяСтрока.Ключ = "oauth_nonce";
|
||||||
|
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||||
|
|
||||||
|
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||||
|
|
||||||
|
СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
|
||||||
|
СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ТаблицаПараметров.Сортировать("Ключ");
|
||||||
|
|
||||||
|
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||||
|
|
||||||
|
СтрокаСигнатуры = СтрокаСигнатуры
|
||||||
|
+ СтрокаТаблицы.Ключ
|
||||||
|
+ "="
|
||||||
|
+ СтрокаТаблицы.Значение
|
||||||
|
+ "&";
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
|
||||||
|
СтрокаСигнатуры = вРег(ВидЗапроса)
|
||||||
|
+ "&"
|
||||||
|
+ КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL)
|
||||||
|
+ "&"
|
||||||
|
+ КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
|
||||||
|
|
||||||
|
Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL)
|
||||||
|
+ "&"
|
||||||
|
+ КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
|
||||||
|
|
||||||
|
Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
|
||||||
|
, ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
|
||||||
|
, ХешФункция.SHA1
|
||||||
|
, 64);
|
||||||
|
|
||||||
|
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
|
||||||
|
|
||||||
|
Разделитель = """,";
|
||||||
|
ЗаголовокАвторизации = ЗаголовокАвторизации
|
||||||
|
+ "OAuth "
|
||||||
|
+ "oauth_consumer_key=""" + Параметры[OCK] + Разделитель
|
||||||
|
+ "oauth_token=""" + Параметры[OTK] + Разделитель
|
||||||
|
+ "oauth_signature_method=""" + МетодХэширования + Разделитель
|
||||||
|
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель
|
||||||
|
+ "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель
|
||||||
|
+ "oauth_version=""" + ВерсияАпи + Разделитель
|
||||||
|
+ "oauth_signature=""" + Сигнатура;
|
||||||
|
|
||||||
|
СоответствиеЗаголовка = Новый Соответствие;
|
||||||
|
СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации);
|
||||||
|
|
||||||
|
Возврат СоответствиеЗаголовка;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
|
||||||
|
|
||||||
|
СоответствиеВозврата = Новый Соответствие;
|
||||||
|
СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]);
|
||||||
|
|
||||||
|
Возврат СоответствиеВозврата;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL)
|
||||||
|
|
||||||
|
ProcessingInfo = "processing_info";
|
||||||
|
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||||
|
Информация = Ответ[ProcessingInfo];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Информация) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтатусОбработки = Информация["state"];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
Иначе
|
||||||
|
Возврат СтатусОбработки;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_Twitter/OPI_Twitter.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Twitter/OPI_Twitter.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="748f90c6-8251-482b-a249-b0372df0c72e">
|
||||||
|
<name>OPI_Twitter</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы работы с Twitter (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
2190
en/OPI/src/CommonModules/OPI_VK/Module.bsl
Normal file
2190
en/OPI/src/CommonModules/OPI_VK/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
11
en/OPI/src/CommonModules/OPI_VK/OPI_VK.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_VK/OPI_VK.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1ab0a76a-246d-4037-97c3-212d680aa589">
|
||||||
|
<name>OPI_VK</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы интеграции с VK (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
414
en/OPI/src/CommonModules/OPI_Viber/Module.bsl
Normal file
414
en/OPI/src/CommonModules/OPI_Viber/Module.bsl
Normal file
@ -0,0 +1,414 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_Viber.os
|
||||||
|
// Библиотека: Viber
|
||||||
|
// Команда CLI: viber
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область НастройкиИИнформация
|
||||||
|
|
||||||
|
// Установить Webhook
|
||||||
|
// ВАЖНО: Установка Webhook обязательна по правилам Viber. Для этого надо иметь свободный URL,
|
||||||
|
// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
|
||||||
|
// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
|
||||||
|
// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен Viber - token
|
||||||
|
// URL - Строка - URL для установки Webhook - url
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры);
|
||||||
|
|
||||||
|
Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить информацию о канале
|
||||||
|
// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
|
||||||
|
// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
URL = "https://chatapi.viber.com/pa/get_account_info";
|
||||||
|
Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить данные пользователя
|
||||||
|
// Получает информацию о пользователе по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// IDПользователя - Строка, Число - ID пользователя Viber - user
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
|
||||||
|
|
||||||
|
URL = "https://chatapi.viber.com/pa/get_user_details";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить онлайн пользователей
|
||||||
|
// Получает статус пользователя или нескольких пользователей по ID
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен Viber - token
|
||||||
|
// IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
|
||||||
|
|
||||||
|
URL = "https://chatapi.viber.com/pa/get_online";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОтправкаСообщений
|
||||||
|
|
||||||
|
// Отправить текстовое сообщение
|
||||||
|
// Отправляет текстовое сообщение в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Текст - Строка - Текст сообщения - text
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
// Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьТекстовоеСообщение(Знач Токен
|
||||||
|
, Знач Текст
|
||||||
|
, Знач IDПользователя
|
||||||
|
, Знач ОтправкаВКанал
|
||||||
|
, Знач Клавиатура = "") Экспорт
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отправить картинку
|
||||||
|
// Отправляет картинку в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - URL картинки - picture
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
// Описание - Строка - Аннотация к картинке - description
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отправить файл
|
||||||
|
// Отправляет файл (документ) в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - URL файла - file
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
// Расширение - Строка - Расширение файла - ext
|
||||||
|
// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьФайл(Знач Токен
|
||||||
|
, Знач URL
|
||||||
|
, Знач IDПользователя
|
||||||
|
, Знач ОтправкаВКанал
|
||||||
|
, Знач Расширение
|
||||||
|
, Знач Размер = "") Экспорт
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Размер) Тогда
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL);
|
||||||
|
Размер = Ответ.Размер();
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Строка_ = "Строка";
|
||||||
|
Расширение = СтрЗаменить(Расширение, ".", "");
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отправить контакт
|
||||||
|
// Отправляет контакт с номером телефона в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// ИмяКонтакта - Строка - Имя контакта - name
|
||||||
|
// НомерТелефона - Строка - Номер телефона - phone
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьКонтакт(Знач Токен
|
||||||
|
, Знач ИмяКонтакта
|
||||||
|
, Знач НомерТелефона
|
||||||
|
, Знач IDПользователя
|
||||||
|
, Знач ОтправкаВКанал) Экспорт
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отправить локацию
|
||||||
|
// Отправляет географические координаты в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Широта - Строка,Число - Географическая широта - lat
|
||||||
|
// Долгота - Строка,Число - Географическая долгота - long
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отправить ссылку
|
||||||
|
// Отправляет URL с предпросмотром в чат или канал
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - Отправляемая ссылка - url
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||||
|
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||||
|
Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
|
||||||
|
|
||||||
|
Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Сформировать клавиатуру из массива кнопок
|
||||||
|
// Возвращает структура клавиатуры для сообщений
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// МассивКнопок - Массив из Строка - Массив кнопок - buttons
|
||||||
|
// ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Сформировать клавиатуру из массива кнопок:
|
||||||
|
// * Buttons - Массив из Структура - Массив сформированных кнопок
|
||||||
|
// * Type - Строка - Тип клавиатуры
|
||||||
|
Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
|
||||||
|
|
||||||
|
МассивСтруктурКнопок = Новый Массив;
|
||||||
|
СтруктураКлавиатуры = Новый Структура;
|
||||||
|
|
||||||
|
Для Каждого ТекстКнопки Из МассивКнопок Цикл
|
||||||
|
|
||||||
|
СтруктураКнопки = Новый Структура;
|
||||||
|
СтруктураКнопки.Вставить("ActionType", "reply");
|
||||||
|
СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
|
||||||
|
СтруктураКнопки.Вставить("Text" , ТекстКнопки);
|
||||||
|
СтруктураКнопки.Вставить("BgColor" , ЦветКнопок);
|
||||||
|
СтруктураКнопки.Вставить("Coloumns" , 3);
|
||||||
|
|
||||||
|
МассивСтруктурКнопок.Добавить(СтруктураКнопки);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
|
||||||
|
СтруктураКлавиатуры.Вставить("Type" , "keyboard");
|
||||||
|
|
||||||
|
Возврат СтруктураКлавиатуры;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
// Отправить сообщение.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// Тип - Строка - Тип отправляемого сообщения
|
||||||
|
// IDПользователя - Строка,Число - ID пользователя Viber
|
||||||
|
// ЭтоКанал - Булево - Отправка в канал или чат с ботом
|
||||||
|
// Значение - Строка, Структура - Значение:
|
||||||
|
// * URL - Строка - При отправке URL
|
||||||
|
// * Размер - Число, Строка - Размер файла в случае отправке
|
||||||
|
// * Расширение - Строка - Расширение файла в случае отправки
|
||||||
|
// Текст - Строка - Текст сообщения
|
||||||
|
// Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Произвольный, HTTPОтвет - Отправить сообщение
|
||||||
|
Функция ОтправитьСообщение(Знач Токен
|
||||||
|
, Знач Тип
|
||||||
|
, Знач IDПользователя
|
||||||
|
, Знач ЭтоКанал
|
||||||
|
, Знач Значение = ""
|
||||||
|
, Знач Текст = ""
|
||||||
|
, Знач Клавиатура = "")
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
|
||||||
|
|
||||||
|
СтруктураПараметров = ВернутьСтандартныеПараметры();
|
||||||
|
СтруктураПараметров.Вставить("type", Тип);
|
||||||
|
|
||||||
|
Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
|
||||||
|
СтруктураПараметров.Вставить("text", Текст);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
|
||||||
|
СтруктураПараметров.Вставить("keyboard", Клавиатура);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Значение) Тогда
|
||||||
|
|
||||||
|
Если Тип = "file" Тогда
|
||||||
|
СтруктураПараметров.Вставить("media" , Значение["URL"]);
|
||||||
|
СтруктураПараметров.Вставить("size" , Значение["Размер"]);
|
||||||
|
СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
|
||||||
|
ИначеЕсли Тип = "contact" Тогда
|
||||||
|
СтруктураПараметров.Вставить("contact" , Значение);
|
||||||
|
ИначеЕсли Тип = "location" Тогда
|
||||||
|
СтруктураПараметров.Вставить("location" , Значение);
|
||||||
|
Иначе
|
||||||
|
СтруктураПараметров.Вставить("media" , Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЭтоКанал Тогда
|
||||||
|
СтруктураПараметров.Вставить("from", IDПользователя);
|
||||||
|
URL = "https://chatapi.viber.com/pa/post";
|
||||||
|
Иначе
|
||||||
|
СтруктураПараметров.Вставить("receiver", IDПользователя);
|
||||||
|
URL = "https://chatapi.viber.com/pa/send_message";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
||||||
|
Исключение
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ВернутьСтандартныеПараметры()
|
||||||
|
|
||||||
|
СтруктураОтправителя = Новый Структура;
|
||||||
|
СтруктураОтправителя.Вставить("name" , "Bot");
|
||||||
|
СтруктураОтправителя.Вставить("avatar", "");
|
||||||
|
|
||||||
|
СтруктураПараметров = Новый Структура;
|
||||||
|
СтруктураПараметров.Вставить("sender", СтруктураОтправителя);
|
||||||
|
СтруктураПараметров.Вставить("min_api_version", 1);
|
||||||
|
|
||||||
|
Возврат СтруктураПараметров;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ТокенВЗаголовки(Знач Токен)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
СтруктураЗаголовков = Новый Соответствие;
|
||||||
|
СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
|
||||||
|
Возврат СтруктураЗаголовков;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_Viber/OPI_Viber.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Viber/OPI_Viber.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ece78a60-71c0-4443-a6e4-63dd8a7b10d0">
|
||||||
|
<name>OPI_Viber</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы интеграции с Viber (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
635
en/OPI/src/CommonModules/OPI_YandexDisk/Module.bsl
Normal file
635
en/OPI/src/CommonModules/OPI_YandexDisk/Module.bsl
Normal file
@ -0,0 +1,635 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_YandexDisk.os
|
||||||
|
// Библиотека: Yandex Disk
|
||||||
|
// Команда CLI: yadisk
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:NumberOfOptionalParams-off
|
||||||
|
// BSLLS:UsingServiceTag-off
|
||||||
|
|
||||||
|
//@skip-check method-too-many-params
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область РаботаСФайламиИПапками
|
||||||
|
|
||||||
|
// Получить информацию о диске
|
||||||
|
// Получает информацию о текущем диске
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать папку
|
||||||
|
// Создает каталог на диске
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к созаваемой папке - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://cloud-api.yandex.net/v1/disk/resources";
|
||||||
|
Href = "href";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
URLОтвета = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URLОтвета) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить объект
|
||||||
|
// Получает информацию об объекте диска по заданному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к папке или файлу - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить объект
|
||||||
|
// Удаляет объект по заданному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к удаляемой папке или файлу - path
|
||||||
|
// ВКорзину - Булево - В корзину - can
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path" , Путь);
|
||||||
|
Параметры.Вставить("permanently", Не ВКорзину);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать копию объекта
|
||||||
|
// Создает копию объекта по заданному пути и пути к оригиналу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Оригинал - Строка - Путь к оригинальному файлу или каталогу - from
|
||||||
|
// Путь - Строка - Путь назначения для копии - to
|
||||||
|
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
|
||||||
|
Href = "href";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("from" , Оригинал);
|
||||||
|
Параметры.Вставить("path" , Путь);
|
||||||
|
Параметры.Вставить("overwrite" , Перезаписывать);
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
URLОтвета = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URLОтвета) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить ссылку для скачивания
|
||||||
|
// Получает ссылку для скачивания файла
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к файлу для скачивания - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Скачать файл
|
||||||
|
// Скачивает файл по указанному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к файлу для скачивания - path
|
||||||
|
// ПутьСохранения - Строка - Путь сохранения файла - out
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
|
||||||
|
Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения);
|
||||||
|
Ответ = ПолучитьСсылкуДляСкачивания(Токен, Путь);
|
||||||
|
URL = Ответ["href"];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URL) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список файлов
|
||||||
|
// Получает список файлов с или без отбора по типу
|
||||||
|
// Список доступных типов: audio, backup, book, compressed, data, development,
|
||||||
|
// diskimage, document, encoded, executable, flash, font,
|
||||||
|
// mage, settings, spreadsheet, text, unknown, video, web
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Количество - Число,Строка - Количество возвращаемых объектов - amount
|
||||||
|
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
|
||||||
|
// ОтборПоТипу - Строка - Отбор по типу файла - type
|
||||||
|
// СортироватьПоДате - Булево - Истина > сортировать по дате, Ложь > по алфавиту - datesort
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьСписокФайлов(Знач Токен
|
||||||
|
, Знач Количество = 0
|
||||||
|
, Знач СмещениеОтНачала = 0
|
||||||
|
, Знач ОтборПоТипу = ""
|
||||||
|
, Знач СортироватьПоДате = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Количество) Тогда
|
||||||
|
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
|
||||||
|
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ОтборПоТипу) Тогда
|
||||||
|
Параметры.Вставить("media_type", ОтборПоТипу);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СортироватьПоДате Тогда
|
||||||
|
Назначение = "last-uploaded";
|
||||||
|
Иначе
|
||||||
|
Назначение = "files";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Переместить объект
|
||||||
|
// Перемещает объект по заданному пути и пути к оригиналу
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Оригинал - Строка - Путь к оригинальному файлу или папке - from
|
||||||
|
// Путь - Строка - Путь назначение для перемещения - to
|
||||||
|
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
|
||||||
|
Href = "href";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("from" , Оригинал);
|
||||||
|
Параметры.Вставить("path" , Путь);
|
||||||
|
Параметры.Вставить("overwrite" , Перезаписывать);
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
|
||||||
|
URLОтвета = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URLОтвета) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить файл
|
||||||
|
// Загружает файл на диск по заданному пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь для сохранение файла на Диске - path
|
||||||
|
// Файл - Строка,ДвоичныеДанные - Файл для загрузки - file
|
||||||
|
// Перезаписывать - Булево - Перезаписывать, если файл с таким именем уже существует - rewrite
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
Href = "href";
|
||||||
|
Файл = Новый Структура("file", Файл);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path" , Путь);
|
||||||
|
Параметры.Вставить("overwrite" , Перезаписывать);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки);
|
||||||
|
URL = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URL) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Загрузить файл по URL
|
||||||
|
// Загружает файл на диск, забирая его по заданному URL
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь помещения загруженного файла - path
|
||||||
|
// Адрес - Строка - URL файла - url
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.URLВКодировкеURL));
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область УправлениеПубличнымДоступом
|
||||||
|
|
||||||
|
// Опубликовать объект
|
||||||
|
// Публикует объект диска в публичный доступ
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к публикуемому объекту - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт
|
||||||
|
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Отменить публикацию объекта
|
||||||
|
// Отменяет публикацию ранее опубликованного объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Путь - Строка - Путь к опубликованному ранее объекту - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт
|
||||||
|
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить список опубликованных объектов.
|
||||||
|
// Получает список опубликованных объектов
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// Количество - Число - Количество возвращаемых объектов - amount
|
||||||
|
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Количество) Тогда
|
||||||
|
Параметры.Вставить("limit", Количество);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
|
||||||
|
Параметры.Вставить("offset", СмещениеОтНачала);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить публичный объект
|
||||||
|
// Получает информацию об опубликованном объекте по его URL
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - Адрес объекта - url
|
||||||
|
// Количество - Число - Количество возвращаемых вложенных объектов (для каталога) - amount
|
||||||
|
// СмещениеОтНачала - Число - Смещение для получение вложенных объектов не из начала списка - offset
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Количество) Тогда
|
||||||
|
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
|
||||||
|
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры.Вставить("public_key", URL);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить ссылку скачивания публичного объекта
|
||||||
|
// Получает прямую ссылку для скачивания публичного объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - Адрес объекта - url
|
||||||
|
// Путь - Строка - Путь внутри объекта - path
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Путь) Тогда
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры.Вставить("public_key", URL);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Сохранить публичный объект на диск
|
||||||
|
// Сохраняет публичный объект на ваш диск
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен - token
|
||||||
|
// URL - Строка - Адрес объекта - url
|
||||||
|
// Откуда - Строка - Путь внутри публичного каталога (только для папок) - from
|
||||||
|
// Куда - Строка - Путь сохранения файла - to
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
|
||||||
|
Href = "href";
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("public_key", URL);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Откуда) Тогда
|
||||||
|
Параметры.Вставить("path", Откуда);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Куда) Тогда
|
||||||
|
Параметры.Вставить("save_path", Куда);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
URLОтвета = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URLОтвета) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ЗаголовокАвторизации(Знач Токен)
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Authorization", "OAuth " + Токен);
|
||||||
|
|
||||||
|
Возврат Заголовки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ)
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ);
|
||||||
|
|
||||||
|
Заголовки = ЗаголовокАвторизации(Токен);
|
||||||
|
Назначение = ?(ОбщийДоступ, "publish", "unpublish");
|
||||||
|
Href = "href";
|
||||||
|
|
||||||
|
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение;
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("path", Путь);
|
||||||
|
|
||||||
|
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
|
||||||
|
|
||||||
|
URLОтвета = Ответ[Href];
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(URLОтвета) Тогда
|
||||||
|
Возврат Ответ;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_YandexDisk/OPI_YandexDisk.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_YandexDisk/OPI_YandexDisk.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="af0b34e8-10fa-414f-a643-915210c6289a">
|
||||||
|
<name>OPI_YandexDisk</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы работы с Yandex Disk (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
112
en/OPI/src/CommonModules/OPI_YandexID/Module.bsl
Normal file
112
en/OPI/src/CommonModules/OPI_YandexID/Module.bsl
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// Расположение OS: ./OInt/core/Modules/OPI_YandexID.os
|
||||||
|
// Библиотека: Yandex ID
|
||||||
|
// Команда CLI: yandex
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
// Получить код подтверждения
|
||||||
|
// Получает код подтверждения и адрес страницы, на которой его необходимо ввести
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientId - Строка - Client id - id
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||||
|
|
||||||
|
Параметры = Новый Структура("client_id", ClientId);
|
||||||
|
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Преобразовать код в токен
|
||||||
|
// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientId - Строка - Client id - id
|
||||||
|
// ClientSecret - Строка - Client secret - secret
|
||||||
|
// КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("grant_type" , "device_code");
|
||||||
|
Параметры.Вставить("code" , КодУстройства);
|
||||||
|
Параметры.Вставить("client_id" , ClientId);
|
||||||
|
Параметры.Вставить("client_secret" , ClientSecret);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить токен
|
||||||
|
// Обновляет токен по Refresh token
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ClientId - Строка - Client id - id
|
||||||
|
// ClientSecret - Строка - Client secret - secret
|
||||||
|
// RefreshToken - Строка - Refresh token - refresh
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||||
|
Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("grant_type" , "refresh_token");
|
||||||
|
Параметры.Вставить("refresh_token" , RefreshToken);
|
||||||
|
Параметры.Вставить("client_id" , ClientId);
|
||||||
|
Параметры.Вставить("client_secret" , ClientSecret);
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
en/OPI/src/CommonModules/OPI_YandexID/OPI_YandexID.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_YandexID/OPI_YandexID.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="32379ca2-0f58-4143-9b34-cb552c54b962">
|
||||||
|
<name>OPI_YandexID</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Методы работы с Yandex ID (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
1229
en/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
Normal file
1229
en/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
11
en/OPI/src/CommonModules/OPI_Инструменты/OPI_Инструменты.mdo
Normal file
11
en/OPI/src/CommonModules/OPI_Инструменты/OPI_Инструменты.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e810f1d2-6714-4c85-94b1-c3ce20788e78">
|
||||||
|
<name>OPI_Инструменты</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>OPI инструменты</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
110
en/OPI/src/CommonModules/OPI_Криптография/Module.bsl
Normal file
110
en/OPI/src/CommonModules/OPI_Криптография/Module.bsl
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
// Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:UnusedLocalVariable-off
|
||||||
|
|
||||||
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область БСП
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (c) 2019, ООО 1С-Софт
|
||||||
|
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||||
|
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||||||
|
// Текст лицензии доступен по ссылке:
|
||||||
|
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
|
||||||
|
|
||||||
|
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Хеш(ДвоичныеДанные, Тип) Экспорт
|
||||||
|
|
||||||
|
Хеширование = Новый ХешированиеДанных(Тип);
|
||||||
|
Хеширование.Добавить(ДвоичныеДанные);
|
||||||
|
|
||||||
|
Возврат Хеширование.ХешСумма;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
|
||||||
|
|
||||||
|
Дважды = 2;
|
||||||
|
|
||||||
|
Если Ключ.Размер() > РазмерБлока Тогда
|
||||||
|
Ключ = Хеш(Ключ, Тип);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Ключ.Размер() <= РазмерБлока Тогда
|
||||||
|
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
|
||||||
|
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
|
||||||
|
|
||||||
|
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
|
||||||
|
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
|
||||||
|
|
||||||
|
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||||
|
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
|
||||||
|
|
||||||
|
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||||
|
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
|
||||||
|
|
||||||
|
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
|
||||||
|
|
||||||
|
МассивДвоичныхДанных = Новый Массив;
|
||||||
|
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
|
||||||
|
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
|
||||||
|
|
||||||
|
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПовторитьСтроку(Строка, Количество) Экспорт
|
||||||
|
|
||||||
|
Части = Новый Массив(Количество);
|
||||||
|
|
||||||
|
Для К = 1 По Количество Цикл
|
||||||
|
Части.Добавить(Строка);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СтрСоединить(Части, "");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="55bb3987-d7ac-4ed7-a6fd-aa4cfeb61c27">
|
||||||
|
<name>OPI_Криптография</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Криптография (OPI)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
470
en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl
Normal file
470
en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl
Normal file
@ -0,0 +1,470 @@
|
|||||||
|
// Расположение OS: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:UsingHardcodePath-off
|
||||||
|
// BSLLS:Typo-off
|
||||||
|
// BSLLS:DeprecatedMessage-off
|
||||||
|
// BSLLS:UsingServiceTag-off
|
||||||
|
// BSLLS:ExecuteExternalCodeInCommonModule-off
|
||||||
|
// BSLLS:DuplicateStringLiteral-off
|
||||||
|
|
||||||
|
//@skip-check use-non-recommended-method
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "./internal"
|
||||||
|
// #Использовать asserts
|
||||||
|
|
||||||
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
|
||||||
|
|
||||||
|
СтандартныеЗависимости = "[Decode, Build]";
|
||||||
|
ЗависимостиГугл = "Testing-GoogleWorkspace";
|
||||||
|
|
||||||
|
Разделы = Новый Структура;
|
||||||
|
Разделы.Вставить("Telegram" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("VK" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("Viber" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("Twitter" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
|
||||||
|
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
|
||||||
|
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
|
||||||
|
Разделы.Вставить("Notion" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("Slack" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("Airtable" , СтандартныеЗависимости);
|
||||||
|
Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
|
||||||
|
|
||||||
|
Возврат Разделы;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьТаблицуТестов() Экспорт
|
||||||
|
|
||||||
|
Телеграм = "Telegram";
|
||||||
|
ВКонтакте = "VK";
|
||||||
|
ЯДиск = "YandexDisk";
|
||||||
|
Календарь = "GoogleCalendar";
|
||||||
|
Твиттер = "Twitter";
|
||||||
|
Вайбер = "Viber";
|
||||||
|
Драйв = "GoogleDrive";
|
||||||
|
ВСпейс = "GoogleWorkspace";
|
||||||
|
Ноушн = "Notion";
|
||||||
|
Слак = "Slack";
|
||||||
|
Таблицы = "GoogleSheets";
|
||||||
|
АирТ = "Airtable";
|
||||||
|
ДропБокс = "Dropbox";
|
||||||
|
|
||||||
|
ТаблицаТестов = Новый ТаблицаЗначений;
|
||||||
|
ТаблицаТестов.Колонки.Добавить("Метод");
|
||||||
|
ТаблицаТестов.Колонки.Добавить("Синоним");
|
||||||
|
ТаблицаТестов.Колонки.Добавить("Раздел");
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио" , "Отправить аудио" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент" , "Отправить документ" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку" , "Отправить гифку" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение" , "Отправить местоположение" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт" , "Отправить контакт" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос" , "Отправить опрос" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение" , "Переслать сообщение" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан" , "Бан/Разбан" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
|
||||||
|
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений" , "Действия с обсуждениями" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику" , "Получить статистику" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов" , "Получить статистику постов" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение" , "Отправить сообщение" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку" , "Создать товар и подборку" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами" , "Создать товар со свойствами" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров" , "Получить список товаров" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок" , "Получить список подборок" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
|
||||||
|
НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта" , "Создать копию объекта" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание" , "Получить ссылку на скачивание" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов" , "Получить список файлов" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
|
||||||
|
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы);
|
||||||
|
НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСКартинкой" , "Твит с картинкой" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКартинку" , "Отправить картинку" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьФайл" , "Отправить файл" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер);
|
||||||
|
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОБазе" , "Получить информацию о базе" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницуВБазу" , "Создать страницу в базу" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_ИзменитьСвойстваСтраницы" , "Изменить свойства страницы" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн);
|
||||||
|
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьСообщение" , "Отправить/Удалить сообщение" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьЭфемерное" , "Отправить/Удалить эфемерное" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьОтложенныеСообщения" , "Получить отложенные сообщения" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал" , "Создать/Архивировать канал" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов" , "Получить список каналов" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
|
||||||
|
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
|
||||||
|
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
|
||||||
|
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
|
||||||
|
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
|
||||||
|
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог" , "Создать каталог" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег" , "Создать/Удалить тег" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс);
|
||||||
|
НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс);
|
||||||
|
|
||||||
|
Возврат ТаблицаТестов;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОжидаетЧто(Значение) Экспорт
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Модуль = ПолучитьОбщийМодуль("ЮТест");
|
||||||
|
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
|
||||||
|
Возврат Модуль.ОжидаетЧто(Значение);
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
Возврат Ожидаем.Что(Значение);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьТестыЯкс() Экспорт
|
||||||
|
|
||||||
|
Модуль = ПолучитьОбщийМодуль("ЮТТесты");
|
||||||
|
Разделы = ПолучитьСоответствиеРазделовТестирования();
|
||||||
|
ТаблицаТестов = ПолучитьТаблицуТестов();
|
||||||
|
|
||||||
|
Для Каждого Раздел Из Разделы Цикл
|
||||||
|
|
||||||
|
ТекущийРаздел = Раздел.Ключ;
|
||||||
|
Отбор = Новый Структура("Раздел", ТекущийРаздел);
|
||||||
|
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
|
||||||
|
|
||||||
|
Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
|
||||||
|
|
||||||
|
Для Каждого Тест Из ТестыРаздела Цикл
|
||||||
|
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат "";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьТестыАссертс() Экспорт
|
||||||
|
|
||||||
|
ТаблицаТестов = ПолучитьТаблицуТестов();
|
||||||
|
МассивТестов = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Тест Из ТаблицаТестов Цикл
|
||||||
|
МассивТестов.Добавить(Тест.Метод);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат МассивТестов;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьПараметр(Параметр) Экспорт
|
||||||
|
|
||||||
|
Путь = ПутьКФайлуДанных();
|
||||||
|
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьДвоичные(Параметр) Экспорт
|
||||||
|
|
||||||
|
Путь = ПутьКФайлуДанных();
|
||||||
|
ПараметрЛокальный = Параметр + "Local";
|
||||||
|
ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь);
|
||||||
|
ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
|
||||||
|
|
||||||
|
ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
|
||||||
|
|
||||||
|
Если ФайлЛокальный.Существует() Тогда
|
||||||
|
Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
|
||||||
|
Иначе
|
||||||
|
Значение = ЗначениеОсновной;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||||
|
Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
|
||||||
|
|
||||||
|
Если СтрНайти(Путь, "http") > 0
|
||||||
|
Или СтрНайти(Путь, "www") > 0 Тогда
|
||||||
|
|
||||||
|
ИВФ = ПолучитьИмяВременногоФайла();
|
||||||
|
КопироватьФайл(Путь, ИВФ);
|
||||||
|
Путь = ИВФ;
|
||||||
|
Двоичные = Новый ДвоичныеДанные(Путь);
|
||||||
|
|
||||||
|
Если СохранятьЛокально Тогда
|
||||||
|
ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
|
||||||
|
Иначе
|
||||||
|
УдалитьФайлы(ИВФ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Двоичные = Новый ДвоичныеДанные(Путь);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Двоичные;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
|
||||||
|
|
||||||
|
Значение = ПолучитьПараметр(Параметр);
|
||||||
|
Коллекция.Вставить(Параметр, Значение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
|
||||||
|
|
||||||
|
Значение = ПолучитьДвоичные(Параметр);
|
||||||
|
Коллекция.Вставить(Параметр, Значение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
|
||||||
|
|
||||||
|
Путь = ПутьКФайлуДанных();
|
||||||
|
ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
|
||||||
|
|
||||||
|
Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Данные = OPI_Инструменты.JSONСтрокой(Результат);
|
||||||
|
Исключение
|
||||||
|
Данные = "Не JSON: " + Строка(Результат);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
Данные = " " + Данные;
|
||||||
|
|
||||||
|
Сообщить(Шапка);
|
||||||
|
Сообщить(Символы.ПС);
|
||||||
|
Сообщить(Данные);
|
||||||
|
Сообщить(Символы.ПС);
|
||||||
|
Сообщить("---------------------------------");
|
||||||
|
Сообщить(Символы.ПС);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Библиотека) Тогда
|
||||||
|
ЗаписатьФайлЛога(Данные, Метод, Библиотека);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
|
||||||
|
|
||||||
|
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
|
||||||
|
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПутьКФайлуДанных()
|
||||||
|
|
||||||
|
Путь = "";
|
||||||
|
ВозможныеПути = Новый Массив;
|
||||||
|
ВозможныеПути.Добавить("./data.json");
|
||||||
|
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
|
||||||
|
ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
|
||||||
|
|
||||||
|
Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
|
||||||
|
|
||||||
|
ФайлРепозитория = Новый Файл(ВозможныйПуть);
|
||||||
|
|
||||||
|
Если ФайлРепозитория.Существует() Тогда
|
||||||
|
Путь = ВозможныйПуть;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Путь;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||||
|
УстановитьБезопасныйРежим(Истина);
|
||||||
|
Модуль = Вычислить(Имя);
|
||||||
|
УстановитьБезопасныйРежим(Ложь);
|
||||||
|
Возврат Модуль;
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
|
||||||
|
|
||||||
|
НовыйТест = ТаблицаЗначений.Добавить();
|
||||||
|
НовыйТест.Метод = Метод;
|
||||||
|
НовыйТест.Синоним = Синоним;
|
||||||
|
НовыйТест.Раздел = Раздел;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
|
||||||
|
|
||||||
|
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
|
||||||
|
Значения.Вставить(Параметр, Значение);
|
||||||
|
|
||||||
|
Запись = Новый ЗаписьJSON;
|
||||||
|
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
|
||||||
|
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
|
||||||
|
ЗаписатьJSON(Запись, Значения);
|
||||||
|
Запись.Закрыть();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
ПутьЛогов = "./docs/results";
|
||||||
|
ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
|
||||||
|
|
||||||
|
КаталогЛогов = Новый Файл(ПутьЛогов);
|
||||||
|
|
||||||
|
Если Не КаталогЛогов.Существует() Тогда
|
||||||
|
СоздатьКаталог(ПутьЛогов);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
|
||||||
|
|
||||||
|
Если Не КаталогЛоговБиблиотеки.Существует() Тогда
|
||||||
|
СоздатьКаталог(ПутьЛоговБиблиотеки);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
|
||||||
|
ФайлЛога = Новый Файл(ПутьКФайлу);
|
||||||
|
|
||||||
|
Если Не ФайлЛога.Существует() Тогда
|
||||||
|
ДокументЛога = Новый ТекстовыйДокумент;
|
||||||
|
ДокументЛога.УстановитьТекст(Данные);
|
||||||
|
ДокументЛога.Записать(ПутьКФайлу);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="546edcad-c9a0-4823-a44c-fefd7200de6c">
|
||||||
|
<name>OPI_ПолучениеДанныхТестов</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI получение данных тестов</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
320
en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/Module.bsl
Normal file
320
en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/Module.bsl
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
// Расположение OS: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
||||||
|
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
// Copyright (c) 2023 Anton Tsitavets
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||||
|
|
||||||
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||||
|
// BSLLS:IncorrectLineBreak-off
|
||||||
|
// BSLLS:UnusedLocalVariable-off
|
||||||
|
|
||||||
|
// #Использовать "./internal"
|
||||||
|
|
||||||
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
Возврат;
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Файл = Новый Файл(Значение);
|
||||||
|
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
Значение = Новый ДвоичныеДанные(Значение);
|
||||||
|
|
||||||
|
ИначеЕсли СтрНайти(Значение, "//") Тогда
|
||||||
|
|
||||||
|
Значение = OPI_Инструменты.Get(Значение);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Значение = Base64Значение(Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
|
||||||
|
ПолучитьДвоичныеДанные(Значение);
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Файл = Новый Файл(Значение);
|
||||||
|
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);
|
||||||
|
Иначе
|
||||||
|
ПолучитьДвоичныеДанные(Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьКоллекцию(Значение) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
ИсходноеЗначение = Значение;
|
||||||
|
|
||||||
|
Если ЭтоКоллекция(Значение) Тогда
|
||||||
|
Возврат;
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||||
|
Иначе
|
||||||
|
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Файл = Новый Файл(Значение);
|
||||||
|
ЧтениеJSON = Новый ЧтениеJSON;
|
||||||
|
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
|
||||||
|
ЧтениеJSON.ОткрытьФайл(Значение);
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
|
||||||
|
|
||||||
|
ИВФ = ПолучитьИмяВременногоФайла();
|
||||||
|
КопироватьФайл(Значение, ИВФ);
|
||||||
|
ЧтениеJSON.ОткрытьФайл(ИВФ);
|
||||||
|
ЧтениеJSON.Прочитать();
|
||||||
|
|
||||||
|
УдалитьФайлы(ИВФ);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
|
||||||
|
ЧтениеJSON.Закрыть();
|
||||||
|
|
||||||
|
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
|
||||||
|
|
||||||
|
Значение = ИсходноеЗначение;
|
||||||
|
ПолучитьМассив(Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
|
||||||
|
Значение = ИсходноеЗначение;
|
||||||
|
ПолучитьМассив(Значение);
|
||||||
|
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьМассив(Значение) Экспорт
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Строка")
|
||||||
|
И СтрНачинаетсяС(Значение, "[")
|
||||||
|
И СтрЗаканчиваетсяНа(Значение, "]") Тогда
|
||||||
|
|
||||||
|
ЗапятаяВКавычках = "','";
|
||||||
|
|
||||||
|
Значение = СтрЗаменить(Значение, "['" , "");
|
||||||
|
Значение = СтрЗаменить(Значение, "']" , "");
|
||||||
|
Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
|
||||||
|
Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
|
||||||
|
Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
|
||||||
|
|
||||||
|
Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
|
||||||
|
|
||||||
|
Для Н = 0 По Значение.ВГраница() Цикл
|
||||||
|
Значение[Н] = СокрЛП(Значение[Н]);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Число") Тогда
|
||||||
|
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
OPI_Инструменты.ЗначениеВМассив(Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьБулево(Значение) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||||
|
Возврат;
|
||||||
|
Иначе
|
||||||
|
Значение = Булево(Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
ВызватьИсключение "Ошибка получения данных булево из параметра";
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Если ЭтоСимвольное(Значение) Тогда
|
||||||
|
|
||||||
|
Если Не ИзИсточника Тогда
|
||||||
|
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||||
|
Файл = Новый Файл(Значение);
|
||||||
|
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
|
||||||
|
ЧтениеТекста = Новый ЧтениеТекста(Значение);
|
||||||
|
Значение = ЧтениеТекста.Прочитать();
|
||||||
|
ЧтениеТекста.Закрыть();
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
|
||||||
|
|
||||||
|
ИВФ = ПолучитьИмяВременногоФайла();
|
||||||
|
КопироватьФайл(Значение, ИВФ);
|
||||||
|
|
||||||
|
ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
|
||||||
|
Значение = ЧтениеТекста.Прочитать();
|
||||||
|
ЧтениеТекста.Закрыть();
|
||||||
|
|
||||||
|
УдалитьФайлы(ИВФ);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Возврат;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
|
||||||
|
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||||
|
|
||||||
|
ИначеЕсли ЭтоКоллекция(Значение) Тогда
|
||||||
|
|
||||||
|
Значение = OPI_Инструменты.JSONСтрокой(Значение);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
Значение = Строка(Значение);
|
||||||
|
Возврат;
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьДату(Значение) Экспорт
|
||||||
|
|
||||||
|
Если Значение = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Дата = "Дата";
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип(Дата) Тогда
|
||||||
|
Возврат;
|
||||||
|
Иначе
|
||||||
|
Значение = XMLЗначение(Тип(Дата), Значение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
ООД = Новый ОписаниеТипов(Дата);
|
||||||
|
Значение = ООД.ПривестиЗначение(Значение);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПолучитьЧисло(Значение) Экспорт
|
||||||
|
|
||||||
|
ОписаниеТипа = Новый ОписаниеТипов("Число");
|
||||||
|
Значение = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ЭтоКоллекция(Знач Значение)
|
||||||
|
|
||||||
|
Возврат ТипЗнч(Значение) = Тип("Массив")
|
||||||
|
Или ТипЗнч(Значение) = Тип("Структура")
|
||||||
|
Или ТипЗнч(Значение) = Тип("Соответствие");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЭтоСимвольное(Знач Значение)
|
||||||
|
|
||||||
|
Возврат ТипЗнч(Значение) = Тип("Строка")
|
||||||
|
Или ТипЗнч(Значение) = Тип("Число")
|
||||||
|
Или ТипЗнч(Значение) = Тип("Дата");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e15aee63-1565-4f37-ba54-4d4e79723fc5">
|
||||||
|
<name>OPI_ПреобразованиеТипов</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Преобразование типов (OPI)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
5307
en/OPI/src/CommonModules/OPI_Тесты/Module.bsl
Normal file
5307
en/OPI/src/CommonModules/OPI_Тесты/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
15
en/OPI/src/CommonModules/OPI_Тесты/OPI_Тесты.mdo
Normal file
15
en/OPI/src/CommonModules/OPI_Тесты/OPI_Тесты.mdo
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca6868b2-8987-4ae3-9d97-50a8becc72df">
|
||||||
|
<name>OPI_Тесты</name>
|
||||||
|
<synonym>
|
||||||
|
<key></key>
|
||||||
|
<value>OPI тесты</value>
|
||||||
|
</synonym>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Тесты для YaxUnit (ОПИ)</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
70
en/OPI/src/Configuration/Configuration.mdo
Normal file
70
en/OPI/src/Configuration/Configuration.mdo
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="aa51f610-7ed3-4091-8908-8ecccf0aaf0f">
|
||||||
|
<name>OpenIntegrations</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Открытый пакет интеграций</value>
|
||||||
|
</synonym>
|
||||||
|
<objectBelonging>Adopted</objectBelonging>
|
||||||
|
<extension xsi:type="mdclassExtension:ConfigurationExtension">
|
||||||
|
<defaultRunMode>Checked</defaultRunMode>
|
||||||
|
<usePurposes>Checked</usePurposes>
|
||||||
|
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
|
||||||
|
</extension>
|
||||||
|
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="12689443-2950-4e3b-b313-9a692b6acac7"/>
|
||||||
|
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f6f98fbd-010a-4aba-8f11-01203bbc59c7"/>
|
||||||
|
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="33990ba2-16f0-473d-851f-a9132c777ed6"/>
|
||||||
|
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="917bb154-d76e-42a4-b161-336b7c57a1ac"/>
|
||||||
|
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="793db0b3-8d01-4f55-982c-73cb3d4547da"/>
|
||||||
|
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="c67ca98f-c017-4f18-8175-02819e09b383"/>
|
||||||
|
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="c9ed170a-ffaa-4859-9d92-fd1cbc7051b3"/>
|
||||||
|
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
|
||||||
|
<namePrefix>OPI_</namePrefix>
|
||||||
|
<configurationExtensionCompatibilityMode>8.3.9</configurationExtensionCompatibilityMode>
|
||||||
|
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
|
||||||
|
<defaultRunMode>ManagedApplication</defaultRunMode>
|
||||||
|
<usePurposes>PersonalComputer</usePurposes>
|
||||||
|
<scriptVariant>Russian</scriptVariant>
|
||||||
|
<vendor>Bayselonarrend</vendor>
|
||||||
|
<version>1.9.0</version>
|
||||||
|
<detailedInformation>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Открытый пакет интеграций - набор библиотек для интеграции с некоторыми популярными API для 1C:Enterprise. Он состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех.</value>
|
||||||
|
</detailedInformation>
|
||||||
|
<vendorInformationAddress>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>https://github.com/Bayselonarrend</value>
|
||||||
|
</vendorInformationAddress>
|
||||||
|
<configurationInformationAddress>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>https://github.com/Bayselonarrend/OpenIntegrations</value>
|
||||||
|
</configurationInformationAddress>
|
||||||
|
<languages uuid="0e858b44-34f3-4d20-986d-13290bb5ba5a">
|
||||||
|
<name>Русский</name>
|
||||||
|
<objectBelonging>Adopted</objectBelonging>
|
||||||
|
<extension xsi:type="mdclassExtension:LanguageExtension">
|
||||||
|
<languageCode>Checked</languageCode>
|
||||||
|
</extension>
|
||||||
|
<languageCode>ru</languageCode>
|
||||||
|
</languages>
|
||||||
|
<subsystems>Subsystem.OPI_Интеграция</subsystems>
|
||||||
|
<commonModules>CommonModule.OPI_Инструменты</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Криптография</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_ПреобразованиеТипов</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Telegram</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_VK</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Viber</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Twitter</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Notion</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_YandexID</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_YandexDisk</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_GoogleCalendar</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_GoogleDrive</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_GoogleSheets</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Slack</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Airtable</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Dropbox</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_Тесты</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
|
||||||
|
</mdclass:Configuration>
|
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
28
en/OPI/src/Subsystems/OPI_Интеграция/OPI_Интеграция.mdo
Normal file
28
en/OPI/src/Subsystems/OPI_Интеграция/OPI_Интеграция.mdo
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="86c261d7-2729-405f-9d39-5d9104a56bd1">
|
||||||
|
<name>OPI_Интеграция</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Интеграция</value>
|
||||||
|
</synonym>
|
||||||
|
<includeHelpInContents>true</includeHelpInContents>
|
||||||
|
<includeInCommandInterface>true</includeInCommandInterface>
|
||||||
|
<content>CommonModule.OPI_Инструменты</content>
|
||||||
|
<content>CommonModule.OPI_Криптография</content>
|
||||||
|
<content>CommonModule.OPI_ПреобразованиеТипов</content>
|
||||||
|
<content>CommonModule.OPI_VK</content>
|
||||||
|
<content>CommonModule.OPI_Telegram</content>
|
||||||
|
<content>CommonModule.OPI_Viber</content>
|
||||||
|
<content>CommonModule.OPI_Twitter</content>
|
||||||
|
<content>CommonModule.OPI_Notion</content>
|
||||||
|
<content>CommonModule.OPI_YandexID</content>
|
||||||
|
<content>CommonModule.OPI_YandexDisk</content>
|
||||||
|
<content>CommonModule.OPI_GoogleWorkspace</content>
|
||||||
|
<content>CommonModule.OPI_GoogleCalendar</content>
|
||||||
|
<content>CommonModule.OPI_GoogleDrive</content>
|
||||||
|
<content>CommonModule.OPI_GoogleSheets</content>
|
||||||
|
<content>CommonModule.OPI_Slack</content>
|
||||||
|
<content>CommonModule.OPI_Airtable</content>
|
||||||
|
<content>CommonModule.OPI_Тесты</content>
|
||||||
|
<content>CommonModule.OPI_ПолучениеДанныхТестов</content>
|
||||||
|
</mdclass:Subsystem>
|
2804
service/dictionaries/backup/en.json
Normal file
2804
service/dictionaries/backup/en.json
Normal file
File diff suppressed because it is too large
Load Diff
2804
service/dictionaries/en.json
Normal file
2804
service/dictionaries/en.json
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user