1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-04-02 22:05:37 +02:00

Скрипт автоформатирования модулей

This commit is contained in:
Anton 2024-07-27 14:37:04 +03:00
parent e58b2e318e
commit 0211b78acc
83 changed files with 35392 additions and 35183 deletions

View File

@ -47,6 +47,9 @@ jobs:
- name: Обновить Workflow тестирования OInt (EN) - name: Обновить Workflow тестирования OInt (EN)
run: oscript ./.github/workflows/os/oint_testmaker_en.os run: oscript ./.github/workflows/os/oint_testmaker_en.os
- name: Скрипт форматирования модулей
run: oscript ./.github/workflows/os/format.os
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v5
with: with:

206
.github/workflows/os/format.os vendored Normal file
View File

@ -0,0 +1,206 @@
Процедура ОтформатироватьМодуль(Знач ПутьКМодулю) Экспорт
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ПутьКМодулю, "UTF-8");
БлокиКода = РазобратьМодульНаБлоки(ТекстовыйДокумент);
Для Н = 0 По БлокиКода.ВГраница() Цикл
МассивСтрокБлока = СтрРазделить(БлокиКода[Н], Символы.ПС);
Если МассивСтрокБлока.Количество() < 2 Тогда
Продолжить;
ИначеЕсли СтрНачинаетсяС(СокрЛП(МассивСтрокБлока[1]), "//") Тогда
Продолжить;
Иначе
ВыровнятьЗнакиРавно(МассивСтрокБлока);
ВыровнятьЗапятые(МассивСтрокБлока);
КонецЕсли;
БлокиКода[Н] = СтрСоединить(МассивСтрокБлока, Символы.ПС);
КонецЦикла;
ТекстФайла = СтрСоединить(БлокиКода, "");
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
ТекстовыйДокумент.Записать(ПутьКМодулю);
КонецПроцедуры
Функция РазобратьМодульНаБлоки(Знач ТекстовыйДокумент)
Для Н = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(Н);
Если Не ЗначениеЗаполнено(СокрЛП(ТекущаяСтрока)) Тогда
ТекстовыйДокумент.ЗаменитьСтроку(Н, "⣿");
Иначе
ТекстовыйДокумент.ЗаменитьСтроку(Н, СокрП(ТекущаяСтрока));
КонецЕсли;
КонецЦикла;
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
БлокиФайла = СтрРазделить(ТекстФайла, "⣿");
Возврат БлокиФайла;
КонецФункции
Процедура ВыровнятьЗнакиРавно(МассивСтрокБлока)
СоответствиеРасположений = Новый Соответствие();
МаксимальноеРасположение = 0;
ЧислоЗнаковРавно = 0;
Для Н = 0 По МассивСтрокБлока.ВГраница() Цикл
РасположениеРавно = СтрНайти(МассивСтрокБлока[Н], "=");
СоответствиеРасположений.Вставить(Н, РасположениеРавно);
МаксимальноеРасположение = ?(РасположениеРавно > МаксимальноеРасположение, РасположениеРавно, МаксимальноеРасположение);
Если Не РасположениеРавно = 0 Тогда
ЧислоЗнаковРавно = ЧислоЗнаковРавно + 1;
КонецЕсли;
КонецЦикла;
Если МаксимальноеРасположение = 0 Или ЧислоЗнаковРавно < 2 Тогда
Возврат;
КонецЕсли;
Для Каждого СтрокаБлока Из СоответствиеРасположений Цикл
РасположениеРавно = СтрокаБлока.Значение;
Индекс = СтрокаБлока.Ключ;
Если РасположениеРавно = 0 Или МаксимальноеРасположение - РасположениеРавно > 12 Тогда
Продолжить;
КонецЕсли;
Для Н = РасположениеРавно По МаксимальноеРасположение - 1 Цикл
МассивСтрокБлока[Индекс] = СтрЗаменить(МассивСтрокБлока[Индекс], "=", " =");
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВыровнятьЗапятые(МассивСтрокБлока, СоответствиеМаксимумов = "")
ПолноеСоответствиеРасположений = Новый Соответствие();
СтрокаСЗапятыми = 0;
НачалоСтроки = "";
Для Н = 0 По МассивСтрокБлока.ВГраница() Цикл
МассивУчастков = СтрРазделить(МассивСтрокБлока[Н], ",");
МассивУчастков_ = Новый Массив;
Соединение = Ложь;
СтрокаСоединения = "";
Для Каждого Участок Из МассивУчастков Цикл
ЧислоКавычек = СтрЧислоВхождений(Участок, """");
Если (ЧислоКавычек = 0 Или ЧислоКавычек % 2 = 0 ) И Не Соединение Тогда
МассивУчастков_.Добавить(Участок);
ИначеЕсли Соединение И ЧислоКавычек % 2 <> 0 Тогда
МассивУчастков_.Добавить(СтрокаСоединения + "," + Участок);
СтрокаСоединения = "";
Соединение = Ложь;
Иначе
СтрокаСоединения = ?(ЗначениеЗаполнено(СтрокаСоединения), СтрокаСоединения + "," + Участок, Участок);
Соединение = Истина;
КонецЕсли;
КонецЦикла;
МассивУчастков = МассивУчастков_;
Если МассивУчастков.Количество() < 2 Тогда
Продолжить;
Иначе
СтрокаСЗапятыми = СтрокаСЗапятыми + 1;
КонецЕсли;
МассивНачалаСтроки = СтрРазделить(МассивУчастков[0], "(");
Если МассивНачалаСтроки.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
НачалоСтроки = МассивНачалаСтроки[0];
СоответствиеРасположений = ПолноеСоответствиеРасположений[НачалоСтроки];
Если Не ЗначениеЗаполнено(СоответствиеРасположений) Тогда
СоответствиеРасположений = Новый Соответствие;
КонецЕсли;
Для Р = 0 По МассивУчастков.ВГраница() - 1 Цикл
Если Не ЗначениеЗаполнено(СоответствиеМаксимумов) Тогда
ДлинаУчастка = СтрДлина(МассивУчастков[Р]);
ТекущийМаксимум = СоответствиеРасположений.Получить(Р);
ТекущийМаксимум = ?(ЗначениеЗаполнено(ТекущийМаксимум), ТекущийМаксимум, 0);
ТекущийМаксимум = ?(ДлинаУчастка > ТекущийМаксимум , ДлинаУчастка , ТекущийМаксимум);
СоответствиеРасположений.Вставить(Р, ТекущийМаксимум);
Иначе
ТекущееСоответствиеМаксимумов = СоответствиеМаксимумов[НачалоСтроки];
Если Не ЗначениеЗаполнено(ТекущееСоответствиеМаксимумов) Тогда
Прервать;
КонецЕсли;
НеобходимаяДлина = ТекущееСоответствиеМаксимумов[Р];
Если НеобходимаяДлина = Неопределено Тогда
Продолжить;
КонецЕсли;
Пока СтрДлина(МассивУчастков[Р]) < НеобходимаяДлина Цикл
МассивУчастков[Р] = МассивУчастков[Р] + " ";
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПолноеСоответствиеРасположений.Вставить(НачалоСтроки, СоответствиеРасположений);
МассивСтрокБлока[Н] = СтрСоединить(МассивУчастков, ",");
КонецЦикла;
Если Не ЗначениеЗаполнено(СоответствиеМаксимумов)
И ЗначениеЗаполнено(ПолноеСоответствиеРасположений)
И СтрокаСЗапятыми > 1 Тогда
ВыровнятьЗапятые(МассивСтрокБлока, ПолноеСоответствиеРасположений);
КонецЕсли;
КонецПроцедуры
Для Каждого Файл Из НайтиФайлы("./src", "*.os", Истина) Цикл
Если СтрНайти(Файл.ПолноеИмя, "\cli\") = 0
И СтрНайти(Файл.ПолноеИмя, "/cli/") = 0 Тогда
ОтформатироватьМодуль(Файл.ПолноеИмя);
КонецЕсли;
КонецЦикла;
Для Каждого Файл Из НайтиФайлы("./src", "*.bsl", Истина) Цикл
Если СтрНайти(Файл.ПолноеИмя, "\cli\") = 0
И СтрНайти(Файл.ПолноеИмя, "/cli/") = 0 Тогда
ОтформатироватьМодуль(Файл.ПолноеИмя);
КонецЕсли;
КонецЦикла;

View File

@ -42,91 +42,91 @@
// Get list of bases // Get list of bases
// Gets the list of available bases // Gets the list of available bases
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Indent - String - Next page identifier of the base list from the previous request - offset // Indent - String - Next page identifier of the base list from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetListOfBases(Val Token, Val Indent = "") Export Function GetListOfBases(Val Token, Val Indent = "") Export
OPI_TypeConversion.GetLine(Indent); OPI_TypeConversion.GetLine(Indent);
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get base tables // Get base tables
// Gets the schema of base tables // Gets the schema of base tables
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetDatabaseTables(Val Token, Val Base) Export Function GetDatabaseTables(Val Token, Val Base) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create base // Create base
// Creates a new database // Creates a new database
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Workspace - String - Workspace identifier - ws // Workspace - String - Workspace identifier - ws
// Name - String - New base name - title // Name - String - New base name - title
// TableCollection - Map Of KeyAndValue - Table description: Key > name, Value > array of fields - tablesdata // TableCollection - Map Of KeyAndValue - Table description: Key > name, Value > array of fields - tablesdata
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateDatabase(Val Token, Val Workspace, Val Name, Val TableCollection) Export Function CreateDatabase(Val Token, Val Workspace, Val Name, Val TableCollection) Export
OPI_TypeConversion.GetCollection(TableCollection); OPI_TypeConversion.GetCollection(TableCollection);
If Not TypeOf(TableCollection) = Type("Structure") If Not TypeOf(TableCollection) = Type("Structure")
And Not TypeOf(TableCollection) = Type("Map") Then And Not TypeOf(TableCollection) = Type("Map") Then
Raise "Error in table collection data"; Raise "Error in table collection data";
EndIf; EndIf;
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
TableArray = New Array; TableArray = New Array;
For Each Table In TableCollection Do For Each Table In TableCollection Do
Description = GenerateTableDescription(Table.Key, Table.Value); Description = GenerateTableDescription(Table.Key, Table.Value);
TableArray.Add(Description); TableArray.Add(Description);
EndDo; EndDo;
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("tables" , TableArray , "Array", Parameters); OPI_Tools.AddField("tables" , TableArray , "Array" , Parameters);
OPI_Tools.AddField("workspaceId", Workspace, "String", Parameters); OPI_Tools.AddField("workspaceId", Workspace , "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -137,56 +137,56 @@ EndFunction
// Create table // Create table
// Creates a new table in the base // Creates a new table in the base
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Name - String - New table name - title // Name - String - New table name - title
// FieldArray - Array of Structure - Array of field descriptions - fieldsdata // FieldArray - Array of Structure - Array of field descriptions - fieldsdata
// Description - String - Table description - description // Description - String - Table description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateTable(Val Token, Val Base, Val Name, Val FieldArray, Val Description = "") Export Function CreateTable(Val Token, Val Base, Val Name, Val FieldArray, Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = GenerateTableDescription(Name, FieldArray, Description); Parameters = GenerateTableDescription(Name, FieldArray, Description);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify table // Modify table
// Changes the name and/or description of the base // Changes the name and/or description of the base
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Name - String - New name - title // Name - String - New name - title
// Description - String - New description - description // Description - String - New description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function ModifyTable(Val Token, Val Base, Val Table, Val Name = "", Val Description = "") Export Function ModifyTable(Val Token, Val Base, Val Table, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , Name, "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters); OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -197,40 +197,40 @@ EndFunction
// Create field // Create field
// Creates a new field in the table // Creates a new field in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// FieldStructure - Structure of KeyAndValue - Description of the new field - fielddata // FieldStructure - Structure of KeyAndValue - Description of the new field - fielddata
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateField(Val Token, Val Base, Val Table, Val FieldStructure) Export Function CreateField(Val Token, Val Base, Val Table, Val FieldStructure) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(FieldStructure); OPI_TypeConversion.GetCollection(FieldStructure);
If Not TypeOf(FieldStructure) = Type("Structure") If Not TypeOf(FieldStructure) = Type("Structure")
And Not TypeOf(FieldStructure) = Type("Map") Then And Not TypeOf(FieldStructure) = Type("Map") Then
Raise "Error in field description data"; Raise "Error in field description data";
EndIf; EndIf;
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, FieldStructure, Headers); Response = OPI_Tools.Post(URL, FieldStructure, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify field // Modify field
// Changes the name and/or description of an existing table field // Changes the name and/or description of an existing table field
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier Base - base // Base - String - Base identifier Base - base
@ -238,152 +238,152 @@ EndFunction
// Field - String - Field identifier - field // Field - String - Field identifier - field
// Name - String - New name - title // Name - String - New name - title
// Description - String - New description - description // Description - String - New description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function ModifyField(Val Token, Val Base, Val Table, Val Field, Val Name = "", Val Description = "") Export Function ModifyField(Val Token, Val Base, Val Table, Val Field, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Field); OPI_TypeConversion.GetLine(Field);
URL = "https://api.airtable.com/v0/meta/bases/" URL = "https://api.airtable.com/v0/meta/bases/"
+ Base + Base
+ "/tables/" + "/tables/"
+ Table + Table
+ "/fields/" + "/fields/"
+ Field; + Field;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("name" , Name, "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters); OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get field (string) // Get field (string)
// Gets the description of a string field // Gets the description of a string field
// //
// Parameters: // Parameters:
// Name - String - New field name - title // Name - String - New field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetStringField(Val Name) Export Function GetStringField(Val Name) Export
Return PrimitiveFieldDescription(Name, "richText"); Return PrimitiveFieldDescription(Name, "richText");
EndFunction EndFunction
// Get field (numeric) // Get field (numeric)
// Gets the description of a numeric field // Gets the description of a numeric field
// //
// Parameters: // Parameters:
// Name - String - New field name - title // Name - String - New field name - title
// Precision - Number, String - Number of decimal places - precision // Precision - Number, String - Number of decimal places - precision
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetNumberField(Val Name, Val Precision = 0) Export Function GetNumberField(Val Name, Val Precision = 0) Export
OPI_TypeConversion.GetNumber(Precision); OPI_TypeConversion.GetNumber(Precision);
OptionsStructure = New Structure("precision", Precision); OptionsStructure = New Structure("precision", Precision);
Return PrimitiveFieldDescription(Name, "number", OptionsStructure); Return PrimitiveFieldDescription(Name, "number", OptionsStructure);
EndFunction EndFunction
// Get field (file) // Get field (file)
// Gets the description of a file field // Gets the description of a file field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetAttachmentField(Val Name) Export Function GetAttachmentField(Val Name) Export
Return PrimitiveFieldDescription(Name, "multipleAttachments"); Return PrimitiveFieldDescription(Name, "multipleAttachments");
EndFunction EndFunction
// Get field (checkbox) // Get field (checkbox)
// Gets the description of a boolean field // Gets the description of a boolean field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetCheckboxField(Val Name) Export Function GetCheckboxField(Val Name) Export
OptionsStructure = New Structure("icon,color", "check", "yellowBright"); OptionsStructure = New Structure("icon,color", "check", "yellowBright");
Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure); Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure);
EndFunction EndFunction
// Get field (date) // Get field (date)
// Gets the description of a date field // Gets the description of a date field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetDateField(Val Name) Export Function GetDateField(Val Name) Export
FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso"); FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso");
OptionsStructure = New Structure("dateFormat", FormatStructure); OptionsStructure = New Structure("dateFormat", FormatStructure);
Return PrimitiveFieldDescription(Name, "date", OptionsStructure); Return PrimitiveFieldDescription(Name, "date", OptionsStructure);
EndFunction EndFunction
// Get field (email) // Get field (email)
// Gets the description of an email field // Gets the description of an email field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetEmailField(Val Name) Export Function GetEmailField(Val Name) Export
Return PrimitiveFieldDescription(Name, "email"); Return PrimitiveFieldDescription(Name, "email");
EndFunction EndFunction
// Get field (phone) // Get field (phone)
// Gets the description of a phone number field // Gets the description of a phone number field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetPhoneField(Val Name) Export Function GetPhoneField(Val Name) Export
Return PrimitiveFieldDescription(Name, "phoneNumber"); Return PrimitiveFieldDescription(Name, "phoneNumber");
EndFunction EndFunction
// Get field (url) // Get field (url)
// Gets the description of a URL field // Gets the description of a URL field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetLinkField(Val Name) Export Function GetLinkField(Val Name) Export
Return PrimitiveFieldDescription(Name, "url"); Return PrimitiveFieldDescription(Name, "url");
EndFunction EndFunction
#EndRegion #EndRegion
@ -392,67 +392,67 @@ EndFunction
// Get list of records // Get list of records
// Gets the list of records of the selected table // Gets the list of records of the selected table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Indent - String - Next page identifier of data from the previous request - offset // Indent - String - Next page identifier of data from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetListOfRecords(Val Token, Val Base, Val Table, Val Indent = "") Export Function GetListOfRecords(Val Token, Val Base, Val Table, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table; URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get record // Get record
// Gets row data of the table by identifier // Gets row data of the table by identifier
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetRecord(Val Token, Val Base, Val Table, Val Record) Export Function GetRecord(Val Token, Val Base, Val Table, Val Record) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create records // Create records
// Creates one or an array of records by description or an array of field value descriptions // Creates one or an array of records by description or an array of field value descriptions
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Data - Structure, Array of Structure - Set or array of sets of pairs Key : Value > Field : FieldValue - data // Data - Structure, Array of Structure - Set or array of sets of pairs Key : Value > Field : FieldValue - data
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export
@ -460,52 +460,52 @@ Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(Data); OPI_TypeConversion.GetCollection(Data);
Parameters = New Structure();
AddDataDescription(Data, Parameters);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table; Parameters = New Structure();
AddDataDescription(Data, Parameters);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete records // Delete records
// Deletes one or an array of records by identifiers // Deletes one or an array of records by identifiers
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Records - String, Array of String - Identifier or array of record identifiers - records // Records - String, Array of String - Identifier or array of record identifiers - records
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function DeletePosts(Val Token, Val Base, Val Table, Val Records) Export Function DeletePosts(Val Token, Val Base, Val Table, Val Records) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetArray(Records); OPI_TypeConversion.GetArray(Records);
RecordString = ""; RecordString = "";
For Each Record In Records Do For Each Record In Records Do
RecordString = RecordString RecordString = RecordString
+ ?(ValueIsFilled(RecordString), "&", "?") + ?(ValueIsFilled(RecordString), "&", "?")
+ "records[]=" + "records[]="
+ OPI_Tools.NumberToString(Record); + OPI_Tools.NumberToString(Record);
EndDo; EndDo;
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -514,67 +514,67 @@ EndFunction
// Get comments // Get comments
// Gets the list of comments for a record in the table // Gets the list of comments for a record in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Indent - String - Next page identifier of data from the previous request - offset // Indent - String - Next page identifier of data from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetComments(Val Token, Val Base, Val Table, Val Record, Val Indent = "") Export Function GetComments(Val Token, Val Base, Val Table, Val Record, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments"; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create comment // Create comment
// Creates a comment for a record in the table // Creates a comment for a record in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Text - String - Comment text - text // Text - String - Comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateComment(Val Token, Val Base, Val Table, Val Record, Val Text) Export Function CreateComment(Val Token, Val Base, Val Table, Val Record, Val Text) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments"; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters); OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify comment // Modify comment
// Changes the text of an existing comment // Changes the text of an existing comment
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
@ -582,54 +582,54 @@ EndFunction
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Comment - String - Comment identifier - comment // Comment - String - Comment identifier - comment
// Text - String - New comment text - text // Text - String - New comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function EditComment(Val Token, Val Base, Val Table, Val Record, Val Comment, Val Text) Export Function EditComment(Val Token, Val Base, Val Table, Val Record, Val Comment, Val Text) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters); OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete comment // Delete comment
// Deletes a comment for a table record // Deletes a comment for a table record
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Comment - String - Comment identifier - comment // Comment - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function DeleteComment(Val Token, Val Base, Val Table, Val Record, Val Comment) Export Function DeleteComment(Val Token, Val Base, Val Table, Val Record, Val Comment) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -639,58 +639,58 @@ EndFunction
#Region Private #Region Private
Function GetAuthorizationHeader(Val Token) Function GetAuthorizationHeader(Val Token)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "Bearer " + Token); Headers.Insert("Authorization", "Bearer " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
Function GenerateTableDescription(Val Name, Val FieldArray, Val Description = "") Function GenerateTableDescription(Val Name, Val FieldArray, Val Description = "")
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(FieldArray); OPI_TypeConversion.GetCollection(FieldArray);
TableDescription = New Structure("name,fields", Name, FieldArray); TableDescription = New Structure("name,fields", Name, FieldArray);
OPI_Tools.AddField("description", Description, "String", TableDescription); OPI_Tools.AddField("description", Description, "String", TableDescription);
Return TableDescription; Return TableDescription;
EndFunction EndFunction
Function PrimitiveFieldDescription(Val Name, Val Type, Val Options = "") Function PrimitiveFieldDescription(Val Name, Val Type, Val Options = "")
FieldStructure = New Structure(); FieldStructure = New Structure();
OPI_Tools.AddField("name" , Name, "String" , FieldStructure); OPI_Tools.AddField("name" , Name , "String" , FieldStructure);
OPI_Tools.AddField("type" , Type , "String" , FieldStructure); OPI_Tools.AddField("type" , Type , "String" , FieldStructure);
OPI_Tools.AddField("options", Options , "Collection", FieldStructure); OPI_Tools.AddField("options", Options , "Collection", FieldStructure);
Return FieldStructure; Return FieldStructure;
EndFunction EndFunction
Procedure AddDataDescription(Val Data, Parameters) Procedure AddDataDescription(Val Data, Parameters)
If TypeOf(Data) = Type("Array") Then If TypeOf(Data) = Type("Array") Then
SendArray = New Array; SendArray = New Array;
For Each RecordDescription In Data Do For Each RecordDescription In Data Do
SendArray.Add(New Structure("fields", RecordDescription)); SendArray.Add(New Structure("fields", RecordDescription));
EndDo; EndDo;
OPI_Tools.AddField("records", SendArray, "Array", Parameters); OPI_Tools.AddField("records", SendArray, "Array", Parameters);
Else Else
OPI_Tools.AddField("fields", Data, "Collection", Parameters); OPI_Tools.AddField("fields", Data, "Collection", Parameters);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -43,131 +43,131 @@
// Create calendar // Create calendar
// Creates an empty calendar // Creates an empty calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Name of the created calendar - title // Name - String - Name of the created calendar - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateCalendar(Val Token, Val Name) Export Function CreateCalendar(Val Token, Val Name) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars"; URL = "https://www.googleapis.com/calendar/v3/calendars";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("summary" , Name); Parameters.Insert("summary" , Name);
Parameters.Insert("timeZone", "Europe/Moscow"); Parameters.Insert("timeZone", "Europe/Moscow");
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get calendar // Get calendar
// Gets calendar information by ID // Gets calendar information by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCalendarMetadata(Val Token, Val Calendar) Export Function GetCalendarMetadata(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit calendar // Edit calendar
// Edits properties of an existing calendar // Edits properties of an existing calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Name - String - New name - title // Name - String - New name - title
// Description - String - New calendar description - description // Description - String - New calendar description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditCalendarMetadata(Val Token Function EditCalendarMetadata(Val Token
, Val Calendar , Val Calendar
, Val Name = "" , Val Name = ""
, Val Description = "") Export , Val Description = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Description); OPI_TypeConversion.GetLine(Description);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Name) Then If ValueIsFilled(Name) Then
Parameters.Insert("summary", Name); Parameters.Insert("summary", Name);
EndIf; EndIf;
If ValueIsFilled(Description) Then If ValueIsFilled(Description) Then
Parameters.Insert("description", Description); Parameters.Insert("description", Description);
EndIf; EndIf;
Response = OPI_Tools.Patch(URL, Parameters, Headers, True); Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Return Response; Return Response;
EndFunction EndFunction
// Clear primary calendar // Clear primary calendar
// Clears the event list of the primary calendar // Clears the event list of the primary calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function ClearMainCalendar(Val Token) Export Function ClearMainCalendar(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear"; URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Response = OPI_Tools.Post(URL, , Headers, False); Response = OPI_Tools.Post(URL, , Headers, False);
Return Response; Return Response;
EndFunction EndFunction
// Delete calendar // Delete calendar
// Deletes a calendar by ID // Deletes a calendar by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteCalendar(Val Token, Val Calendar) Export Function DeleteCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -178,105 +178,105 @@ EndFunction
// Get list of calendars // Get list of calendars
// Gets an array of account calendars // Gets an array of account calendars
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of calendar data mappings // Map Of KeyAndValue - Array of calendar data mappings
Function GetCalendarList(Val Token) Export Function GetCalendarList(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfCalendars = New Array; ArrayOfCalendars = New Array;
GetCalendarsListRecursively(Headers, ArrayOfCalendars); GetCalendarsListRecursively(Headers, ArrayOfCalendars);
Return ArrayOfCalendars; Return ArrayOfCalendars;
EndFunction EndFunction
// Add calendar to list // Add calendar to list
// Adds an existing calendar to the user's list // Adds an existing calendar to the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function AddCalendarToList(Val Token, Val Calendar) Export Function AddCalendarToList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("id", Calendar); Parameters.Insert("id", Calendar);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list calendar // Get list calendar
// Gets a calendar from the user's list by ID // Gets a calendar from the user's list by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetListCalendar(Val Token, Val Calendar) Export Function GetListCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Remove calendar from list // Remove calendar from list
// Removes a calendar from the user's list // Removes a calendar from the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteCalendarFromList(Val Token, Val Calendar) Export Function DeleteCalendarFromList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit list calendar // Edit list calendar
// Edits the properties of a calendar from the user's list // Edits the properties of a calendar from the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// PrimaryColor - String - HEX primary color (#ffffff) - primary // PrimaryColor - String - HEX primary color (#ffffff) - primary
// SecondaryColor - String - HEX secondary color (#ffffff) - secondary // SecondaryColor - String - HEX secondary color (#ffffff) - secondary
// Hidden - Boolean - Hidden calendar - hidden // Hidden - Boolean - Hidden calendar - hidden
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditListCalendar(Val Token Function EditListCalendar(Val Token
@ -284,23 +284,23 @@ Function EditListCalendar(Val Token
, Val PrimaryColor , Val PrimaryColor
, Val SecondaryColor , Val SecondaryColor
, Val Hidden = False) Export , Val Hidden = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(PrimaryColor); OPI_TypeConversion.GetLine(PrimaryColor);
OPI_TypeConversion.GetLine(SecondaryColor); OPI_TypeConversion.GetLine(SecondaryColor);
OPI_TypeConversion.GetBoolean(Hidden); OPI_TypeConversion.GetBoolean(Hidden);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat=true"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat =true";
Parameters = New Map; Parameters = New Map;
Parameters.Insert("hidden" , Hidden); Parameters.Insert("hidden" , Hidden);
Parameters.Insert("foregroundColor", PrimaryColor); Parameters.Insert("foregroundColor", PrimaryColor);
Parameters.Insert("backgroundColor", SecondaryColor); Parameters.Insert("backgroundColor", SecondaryColor);
Response = OPI_Tools.Put(URL, Parameters, Headers); Response = OPI_Tools.Put(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -310,167 +310,167 @@ EndFunction
#Region EventManagement #Region EventManagement
// Get event description !NOCLI // Get event description !NOCLI
// //
// Returns: // Returns:
// Map Of KeyAndValue - Empty event template // Map Of KeyAndValue - Empty event template
Function GetEventDescription() Export Function GetEventDescription() Export
CurrentDate = OPI_Tools.GetCurrentDate(); CurrentDate = OPI_Tools.GetCurrentDate();
Hour = 3600; Hour = 3600;
Event = New Map; Event = New Map;
Event.Insert("Description" , ""); // Event description Event.Insert("Description" , ""); // Event description
Event.Insert("Title" , "New event"); // Title events Event.Insert("Title" , "New event"); // Title events
Event.Insert("Venue" , ""); // String description of the venue of the event Event.Insert("Venue" , ""); // String description of the venue of the event
Event.Insert("StartDate" , CurrentDate); // Date of start events Event.Insert("StartDate" , CurrentDate); // Date of start events
Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events
Event.Insert("ArrayOfAttachmentURLs", New Map); // Key - name, Value - URL to file Event.Insert("ArrayOfAttachmentURLs", New Map); // Key - name, Value - URL to file
Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants
Return Event; Return Event;
EndFunction EndFunction
// Get list of events // Get list of events
// Gets the list of all calendar events // Gets the list of all calendar events
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of event maps // Map Of KeyAndValue - Array of event maps
Function GetEventList(Val Token, Val Calendar) Export Function GetEventList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfEvents = New Array; ArrayOfEvents = New Array;
GetEventsListRecursively(Headers, Calendar, ArrayOfEvents); GetEventsListRecursively(Headers, Calendar, ArrayOfEvents);
Return ArrayOfEvents; Return ArrayOfEvents;
EndFunction EndFunction
// Get event // Get event
// Gets an event by ID // Gets an event by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetEvent(Val Token, Val Calendar, Val Event) Export Function GetEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events/" + "/events/"
+ Event; + Event;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create event // Create event
// Creates a new event // Creates a new event
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// EventDescription - Map Of KeyAndValue - Event description - props // EventDescription - Map Of KeyAndValue - Event description - props
// //
// Returns: // Returns:
// String, Arbitrary, HTTPResponse, BinaryData, Undefined - Google server response // String, Arbitrary, HTTPResponse, BinaryData, Undefined - Google server response
Function CreateEvent(Val Token, Val Calendar, Val EventDescription) Export Function CreateEvent(Val Token, Val Calendar, Val EventDescription) Export
Return EventManagement(Token, Calendar, EventDescription); Return EventManagement(Token, Calendar, EventDescription);
EndFunction EndFunction
// Move event // Move event
// Moves an event to another calendar // Moves an event to another calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// SourceCalendar - String - ID of the source calendar - from // SourceCalendar - String - ID of the source calendar - from
// TargetCalendar - String - ID of the target calendar - to // TargetCalendar - String - ID of the target calendar - to
// Event - String - ID of the source calendar event - event // Event - String - ID of the source calendar event - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function MoveEvent(Val Token, Val SourceCalendar, Val TargetCalendar, Val Event) Export Function MoveEvent(Val Token, Val SourceCalendar, Val TargetCalendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(SourceCalendar); OPI_TypeConversion.GetLine(SourceCalendar);
OPI_TypeConversion.GetLine(TargetCalendar); OPI_TypeConversion.GetLine(TargetCalendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ SourceCalendar + SourceCalendar
+ "/events/" + "/events/"
+ Event + Event
+ "/move?destination=" + "/move?destination="
+ TargetCalendar; + TargetCalendar;
Response = OPI_Tools.Post(URL, , Headers); Response = OPI_Tools.Post(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit event // Edit event
// Edits an existing event // Edits an existing event
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// EventDescription - String - New event description - props // EventDescription - String - New event description - props
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditEvent(Val Token, Val Calendar, Val EventDescription, Val Event) Export Function EditEvent(Val Token, Val Calendar, Val EventDescription, Val Event) Export
Return EventManagement(Token, Calendar, EventDescription, Event); Return EventManagement(Token, Calendar, EventDescription, Event);
EndFunction EndFunction
// Delete event // Delete event
// Deletes an event by ID // Deletes an event by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteEvent(Val Token, Val Calendar, Val Event) Export Function DeleteEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events/" + "/events/"
+ Event; + Event;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -482,51 +482,51 @@ EndFunction
#Region Private #Region Private
Function ConvertDate(Val Date) Function ConvertDate(Val Date)
OPI_TypeConversion.GetDate(Date); OPI_TypeConversion.GetDate(Date);
DateStructure = New Structure; DateStructure = New Structure;
If Not TypeOf(Date) = Type("Date") Then If Not TypeOf(Date) = Type("Date") Then
Return Undefined; Return Undefined;
EndIf; EndIf;
If Date = BegOfDay(Date) Then If Date = BegOfDay(Date) Then
DateFormat = "DF=yyyy-MM-dd"; DateFormat = "DF=yyyy-MM-dd";
Field = "date"; Field = "date";
Else Else
DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ"; DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ";
Field = "dateTime"; Field = "dateTime";
EndIf; EndIf;
Date = Format(Date, DateFormat); Date = Format(Date, DateFormat);
DateStructure.Insert(Field , Date); DateStructure.Insert(Field , Date);
DateStructure.Insert("timeZone", "Europe/Moscow"); DateStructure.Insert("timeZone", "Europe/Moscow");
Return DateStructure; Return DateStructure;
EndFunction EndFunction
Function ConvertAttachments(Val Attachments) Function ConvertAttachments(Val Attachments)
OPI_TypeConversion.GetCollection(Attachments); OPI_TypeConversion.GetCollection(Attachments);
AttachmentsArray = New Array; AttachmentsArray = New Array;
If TypeOf(Attachments) = Type("Map") Or TypeOf(Attachments) = Type("Structure") Then If TypeOf(Attachments) = Type("Map") Or TypeOf(Attachments) = Type("Structure") Then
For Each Attachment In Attachments Do For Each Attachment In Attachments Do
CurrentAttachment = New Structure; CurrentAttachment = New Structure;
CurrentAttachment.Insert("title" , Attachment.Key); CurrentAttachment.Insert("title" , Attachment.Key);
CurrentAttachment.Insert("fileUrl", Attachment.Value); CurrentAttachment.Insert("fileUrl", Attachment.Value);
AttachmentsArray.Add(CurrentAttachment); AttachmentsArray.Add(CurrentAttachment);
EndDo; EndDo;
EndIf; EndIf;
If AttachmentsArray.Count() > 0 Then If AttachmentsArray.Count() > 0 Then
Return AttachmentsArray; Return AttachmentsArray;
Else Else
@ -536,105 +536,105 @@ Function ConvertAttachments(Val Attachments)
EndFunction EndFunction
Function EventManagement(Val Token, Val Calendar, Val EventDescription, Val Event = "") Function EventManagement(Val Token, Val Calendar, Val EventDescription, Val Event = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetCollection(EventDescription); OPI_TypeConversion.GetCollection(EventDescription);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
Existing = ValueIsFilled(Event); Existing = ValueIsFilled(Event);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events" + "/events"
+ ?(Existing, "/" + Event, ""); + ?(Existing, "/" + Event, "");
Date0 = EventDescription["StartDate"]; Date0 = EventDescription["StartDate"];
Date1 = EventDescription["EndDate"]; Date1 = EventDescription["EndDate"];
Attachments = EventDescription["ArrayOfAttachmentURLs"]; Attachments = EventDescription["ArrayOfAttachmentURLs"];
Attachments = ConvertAttachments(Attachments); Attachments = ConvertAttachments(Attachments);
Notifications = ?(EventDescription["SendNotifications"] = Undefined Notifications = ?(EventDescription["SendNotifications"] = Undefined
, False , False
, EventDescription["SendNotifications"]); , EventDescription["SendNotifications"]);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("summary" , EventDescription["Title"]); Parameters.Insert("summary" , EventDescription["Title"]);
Parameters.Insert("description", EventDescription["Description"]); Parameters.Insert("description", EventDescription["Description"]);
Parameters.Insert("location" , EventDescription["Venue"]); Parameters.Insert("location" , EventDescription["Venue"]);
Parameters.Insert("start" , ConvertDate(Date0)); Parameters.Insert("start" , ConvertDate(Date0));
Parameters.Insert("end" , ConvertDate(Date1)); Parameters.Insert("end" , ConvertDate(Date1));
Parameters.Insert("attachments", Attachments); Parameters.Insert("attachments", Attachments);
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("sendUpdates" , ?(Notifications, "all", "none")); URLParameters.Insert("sendUpdates" , ?(Notifications , "all" , "none"));
URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false")); URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false"));
URL = URL + OPI_Tools.RequestParametersToString(URLParameters); URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
OPI_Tools.RemoveEmptyCollectionFields(Parameters); OPI_Tools.RemoveEmptyCollectionFields(Parameters);
If Existing Then If Existing Then
Response = OPI_Tools.Patch(URL, Parameters, Headers, True); Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Else Else
Response = OPI_Tools.Post(URL, Parameters, Headers, True); Response = OPI_Tools.Post(URL, Parameters, Headers, True);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Procedure GetCalendarsListRecursively(Val Headers, ArrayOfCalendars, Page = "") Procedure GetCalendarsListRecursively(Val Headers, ArrayOfCalendars, Page = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList" Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Parameters , Parameters
, Headers); , Headers);
Calendars = Result[Items]; Calendars = Result[Items];
Page = Result[NPT]; Page = Result[NPT];
For Each Calendar In Calendars Do For Each Calendar In Calendars Do
ArrayOfCalendars.Add(Calendar); ArrayOfCalendars.Add(Calendar);
EndDo; EndDo;
If Calendars.Count() > 0 And ValueIsFilled(Page) Then If Calendars.Count() > 0 And ValueIsFilled(Page) Then
GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page); GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetEventsListRecursively(Val Headers, Val Calendar, ArrayOfEvents, Page = "") Procedure GetEventsListRecursively(Val Headers, Val Calendar, ArrayOfEvents, Page = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events" Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events"
, Parameters , Parameters
, Headers); , Headers);
Events = Result[Items]; Events = Result[Items];
Page = Result[NPT]; Page = Result[NPT];
For Each Event In Events Do For Each Event In Events Do
ArrayOfEvents.Add(Event); ArrayOfEvents.Add(Event);
EndDo; EndDo;
If Events.Count() > 0 And ValueIsFilled(Page) Then If Events.Count() > 0 And ValueIsFilled(Page) Then
GetEventsListRecursively(Headers, ArrayOfEvents, Page); GetEventsListRecursively(Headers, ArrayOfEvents, Page);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion

View File

@ -43,277 +43,277 @@
// Get object information // Get object information
// Gets information about a folder or file by ID // Gets information about a folder or file by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the file or folder - object // Identifier - String - Identifier of the file or folder - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetObjectInformation(Val Token, Val Identifier) Export Function GetObjectInformation(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list of directories // Get list of directories
// Gets the list of drive directories // Gets the list of drive directories
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// NameContains - String - Filter by name - querry // NameContains - String - Filter by name - querry
// Detailed - Boolean - Adds a list of files to the directory fields - depth // Detailed - Boolean - Adds a list of files to the directory fields - depth
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of directory mappings // Map Of KeyAndValue - Array of directory mappings
Function GetDirectoriesList(Val Token, Val NameContains = "", Val Detailed = False) Export Function GetDirectoriesList(Val Token, Val NameContains = "", Val Detailed = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains); OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetBoolean(Detailed); OPI_TypeConversion.GetBoolean(Detailed);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array; ArrayOfObjects = New Array;
Filter = New Array; Filter = New Array;
Filter.Add("mimeType = 'application/vnd.google-apps.folder'"); Filter.Add("mimeType = 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'"); Filter.Add("name contains '" + NameContains + "'");
EndIf; EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter); GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter);
If Detailed Then If Detailed Then
BreakDownObjectsInDetail(Token, ArrayOfObjects); BreakDownObjectsInDetail(Token, ArrayOfObjects);
EndIf; EndIf;
Return ArrayOfObjects; Return ArrayOfObjects;
EndFunction EndFunction
// Get list of files // Get list of files
// Gets the list of files // Gets the list of files
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// NameContains - String - Filter by name - querry // NameContains - String - Filter by name - querry
// Directory - String - Filter by parent directory ID - catalog // Directory - String - Filter by parent directory ID - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of file mappings // Map Of KeyAndValue - Array of file mappings
Function GetFilesList(Val Token, Val NameContains = "", Val Directory = "") Export Function GetFilesList(Val Token, Val NameContains = "", Val Directory = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains); OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetLine(Directory); OPI_TypeConversion.GetLine(Directory);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array; ArrayOfObjects = New Array;
Filter = New Array; Filter = New Array;
Filter.Add("mimeType != 'application/vnd.google-apps.folder'"); Filter.Add("mimeType != 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'"); Filter.Add("name contains '" + NameContains + "'");
EndIf; EndIf;
If ValueIsFilled(Directory) Then If ValueIsFilled(Directory) Then
Filter.Add("'" + Directory + "' in parents"); Filter.Add("'" + Directory + "' in parents");
EndIf; EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter); GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter);
Return ArrayOfObjects; Return ArrayOfObjects;
EndFunction EndFunction
// Upload file // Upload file
// Uploads a file to the drive // Uploads a file to the drive
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// File - BinaryData,String - File to be uploaded - file // File - BinaryData,String - File to be uploaded - file
// Description - Map Of KeyAndValue - See GetFileDescription - props - JSON description or path to .json // Description - Map Of KeyAndValue - See GetFileDescription - props - JSON description or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function UploadFile(Val Token, Val File, Val Description) Export Function UploadFile(Val Token, Val File, Val Description) Export
Return FileManagement(Token, File, Description); Return FileManagement(Token, File, Description);
EndFunction EndFunction
// Create folder // Create folder
// Creates an empty directory on the drive // Creates an empty directory on the drive
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Folder name - title // Name - String - Folder name - title
// Parent - String - Parent - catalog // Parent - String - Parent - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateFolder(Val Token, Val Name, Val Parent = "") Export Function CreateFolder(Val Token, Val Name, Val Parent = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Parent); OPI_TypeConversion.GetLine(Parent);
Description = New Map; Description = New Map;
Description.Insert("MIME" , "application/vnd.google-apps.folder"); Description.Insert("MIME" , "application/vnd.google-apps.folder");
Description.Insert("Name" , Name); Description.Insert("Name" , Name);
Description.Insert("Description", ""); Description.Insert("Description", "");
Description.Insert("Parent", ?(ValueIsFilled(Parent), Parent, "root")); Description.Insert("Parent" , ?(ValueIsFilled(Parent), Parent, "root"));
Return FileManagement(Token, , Description); Return FileManagement(Token, , Description);
EndFunction EndFunction
// Download file // Download file
// Gets file by ID // Gets file by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - File identifier - object // Identifier - String - File identifier - object
// SavePath - String - File save path - out // SavePath - String - File save path - out
// //
// Returns: // Returns:
// BinaryData,String - Binary data or file path when SavePath parameter is specified // BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Identifier, Val SavePath = "") Export Function DownloadFile(Val Token, Val Identifier, Val SavePath = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Map; Parameters = New Map;
Parameters.Insert("alt", "media"); Parameters.Insert("alt", "media");
Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath); Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath);
Return Response; Return Response;
EndFunction EndFunction
// Copy object // Copy object
// Copies file or directory // Copies file or directory
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Object identifier - object // Identifier - String - Object identifier - object
// NewName - String - New object name - title // NewName - String - New object name - title
// NewParent - String - New parent directory - catalog // NewParent - String - New parent directory - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CopyObject(Val Token, Val Identifier, Val NewName = "", Val NewParent = "") Export Function CopyObject(Val Token, Val Identifier, Val NewName = "", Val NewParent = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NewName); OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewParent); OPI_TypeConversion.GetLine(NewParent);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy"; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(NewName) Then If ValueIsFilled(NewName) Then
Parameters.Insert("name", NewName); Parameters.Insert("name", NewName);
EndIf; EndIf;
If ValueIsFilled(NewParent) Then If ValueIsFilled(NewParent) Then
ArrayOfParents = New Array; ArrayOfParents = New Array;
ArrayOfParents.Add(NewParent); ArrayOfParents.Add(NewParent);
Parameters.Insert("parents", ArrayOfParents); Parameters.Insert("parents", ArrayOfParents);
EndIf; EndIf;
Response = OPI_Tools.Post(URL, Parameters , Headers, True); Response = OPI_Tools.Post(URL, Parameters , Headers, True);
Return Response; Return Response;
EndFunction EndFunction
// Update file // Update file
// Updates file binary data // Updates file binary data
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object to update - object // Identifier - String - Identifier of the object to update - object
// File - BinaryData,String - File source for update - file // File - BinaryData,String - File source for update - file
// NewName - String - New file name (if necessary) - title // NewName - String - New file name (if necessary) - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function UpdateFile(Val Token, Val Identifier, Val File, Val NewName = "") Export Function UpdateFile(Val Token, Val Identifier, Val File, Val NewName = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewName); OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
If ValueIsFilled(NewName) Then If ValueIsFilled(NewName) Then
Description = New Map; Description = New Map;
Description.Insert("Name", NewName); Description.Insert("Name", NewName);
Else Else
Description = ""; Description = "";
EndIf; EndIf;
Return FileManagement(Token, File, Description, Identifier); Return FileManagement(Token, File, Description, Identifier);
EndFunction EndFunction
// Delete object // Delete object
// Deletes file or directory by ID // Deletes file or directory by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object to delete - object // Identifier - String - Identifier of the object to delete - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteObject(Val Token, Val Identifier) Export Function DeleteObject(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get file description !NOCLI // Get file description !NOCLI
// //
// Returns: // Returns:
// Map Of KeyAndValue - File description // Map Of KeyAndValue - File description
Function GetFileDescription() Export Function GetFileDescription() Export
Description = New Map; Description = New Map;
Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file
Description.Insert("Name" , "New file.jpg"); // File name with extension Description.Insert("Name" , "New file.jpg"); // File name with extension
Description.Insert("Description" , "This is a new file"); // File description Description.Insert("Description" , "This is a new file"); // File description
Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root
Return Description; Return Description;
EndFunction EndFunction
#EndRegion #EndRegion
@ -322,107 +322,107 @@ EndFunction
// Create comment // Create comment
// Creates a comment for a file or directory // Creates a comment for a file or directory
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object that needs a comment - object // Identifier - String - Identifier of the object that needs a comment - object
// Comment - String - Comment text - text // Comment - String - Comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateComment(Val Token, Val Identifier, Val Comment) Export Function CreateComment(Val Token, Val Identifier, Val Comment) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields=*"; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields =*";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("content", Comment); Parameters.Insert("content", Comment);
Response = OPI_Tools.POST(URL, Parameters, Headers); Response = OPI_Tools.POST(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get comment // Get comment
// Gets comment by ID // Gets comment by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Identifier of the file or directory where the comment is located - object // ObjectID - String - Identifier of the file or directory where the comment is located - object
// CommentID - String - Comment identifier - comment // CommentID - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetComment(Val Token, Val ObjectID, Val CommentID) Export Function GetComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID); OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list of comments // Get list of comments
// Gets the list of all comments of the object // Gets the list of all comments of the object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Object identifier - object // ObjectID - String - Object identifier - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCommentList(Val Token, Val ObjectID) Export Function GetCommentList(Val Token, Val ObjectID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments"; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete comment // Delete comment
// Deletes comment by ID // Deletes comment by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Identifier of the file or directory where the comment is located - object // ObjectID - String - Identifier of the file or directory where the comment is located - object
// CommentID - String - Comment identifier - comment // CommentID - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteComment(Val Token, Val ObjectID, Val CommentID) Export Function DeleteComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID); OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -433,294 +433,294 @@ EndFunction
#Region Private #Region Private
Procedure GetObjectsListRecursively(Val Headers, ArrayOfObjects, Detailed = False, Filter = "", Page = "") Procedure GetObjectsListRecursively(Val Headers, ArrayOfObjects, Detailed = False, Filter = "", Page = "")
URL = "https://www.googleapis.com/drive/v3/files"; URL = "https://www.googleapis.com/drive/v3/files";
Files = "files"; Files = "files";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
If ValueIsFilled(Filter) And TypeOf(Filter) = Type("Array") Then If ValueIsFilled(Filter) And TypeOf(Filter) = Type("Array") Then
FilterString = StrConcat(Filter, " and "); FilterString = StrConcat(Filter, " and ");
Parameters.Insert("q", FilterString); Parameters.Insert("q", FilterString);
EndIf; EndIf;
Result = OPI_Tools.Get(URL, Parameters, Headers); Result = OPI_Tools.Get(URL, Parameters, Headers);
Objects = Result[Files]; Objects = Result[Files];
Page = Result[NPT]; Page = Result[NPT];
For Each CurrentObject In Objects Do For Each CurrentObject In Objects Do
ArrayOfObjects.Add(CurrentObject); ArrayOfObjects.Add(CurrentObject);
EndDo; EndDo;
If Objects.Count() > 0 And ValueIsFilled(Page) Then If Objects.Count() > 0 And ValueIsFilled(Page) Then
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page); GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure BreakDownObjectsInDetail(Val Token, ArrayOfObjects) Procedure BreakDownObjectsInDetail(Val Token, ArrayOfObjects)
For Each CurrentObject In ArrayOfObjects Do For Each CurrentObject In ArrayOfObjects Do
ArrayOfFiles = New Array; ArrayOfFiles = New Array;
CurrentID = CurrentObject["id"]; CurrentID = CurrentObject["id"];
Result = GetFilesList(Token, , CurrentID); Result = GetFilesList(Token, , CurrentID);
For Each File In Result Do For Each File In Result Do
ArrayOfFiles.Add(File); ArrayOfFiles.Add(File);
EndDo; EndDo;
CurrentObject.Insert("files", ArrayOfFiles); CurrentObject.Insert("files", ArrayOfFiles);
EndDo; EndDo;
EndProcedure EndProcedure
Procedure FormFileUploadParameters(Description) Procedure FormFileUploadParameters(Description)
FormedDescription = New Map; FormedDescription = New Map;
OPI_Tools.RemoveEmptyCollectionFields(Description); OPI_Tools.RemoveEmptyCollectionFields(Description);
FieldMapping = New Map; FieldMapping = New Map;
FieldMapping.Insert("MIME" , "mimeType"); FieldMapping.Insert("MIME" , "mimeType");
FieldMapping.Insert("Name" , "name"); FieldMapping.Insert("Name" , "name");
FieldMapping.Insert("Description" , "description"); FieldMapping.Insert("Description" , "description");
FieldMapping.Insert("Parent" , "parents"); FieldMapping.Insert("Parent" , "parents");
FieldMapping.Insert("Extension", "fileExtension"); FieldMapping.Insert("Extension" , "fileExtension");
For Each Element In Description Do For Each Element In Description Do
If Element.Key = "Parent" Then If Element.Key = "Parent" Then
CurrentValue = New Array; CurrentValue = New Array;
CurrentValue.Add(Element.Value); CurrentValue.Add(Element.Value);
Else Else
CurrentValue = Element.Value; CurrentValue = Element.Value;
EndIf; EndIf;
FieldName = FieldMapping.Get(Element.Key); FieldName = FieldMapping.Get(Element.Key);
FormedDescription.Insert(FieldName, CurrentValue); FormedDescription.Insert(FieldName, CurrentValue);
EndDo; EndDo;
Description = FormedDescription; Description = FormedDescription;
EndProcedure EndProcedure
Function FileManagement(Val Token, Val File = "", Val Description = "", Val Identifier = "") Function FileManagement(Val Token, Val File = "", Val Description = "", Val Identifier = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
If ValueIsFilled(Description) Then If ValueIsFilled(Description) Then
OPI_TypeConversion.GetCollection(Description); OPI_TypeConversion.GetCollection(Description);
EndIf; EndIf;
MimeType = "mimeType"; MimeType = "mimeType";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
MIME = GetObjectInformation(Token, Identifier)[MimeType]; MIME = GetObjectInformation(Token, Identifier)[MimeType];
Else Else
MIME = Description["MIME"]; MIME = Description["MIME"];
EndIf; EndIf;
If Not ValueIsFilled(Description) Then If Not ValueIsFilled(Description) Then
Description = New Map; Description = New Map;
EndIf; EndIf;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
FormFileUploadParameters(Description); FormFileUploadParameters(Description);
JSONDescription = OPI_Tools.JSONString(Description); JSONDescription = OPI_Tools.JSONString(Description);
FileMapping = New Map; FileMapping = New Map;
If ValueIsFilled(File) Then If ValueIsFilled(File) Then
ChunkSize = 268435457; ChunkSize = 268435457;
Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize); Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize);
FileMapping.Insert(File, MIME); FileMapping.Insert(File, MIME);
If Size < ChunkSize And TypeOf(File) = Type("BinaryData") Then If Size < ChunkSize And TypeOf(File) = Type("BinaryData") Then
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier); Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
Else Else
Response = UploadLargeFile(Description, FileMapping, Headers, Identifier); Response = UploadLargeFile(Description, FileMapping, Headers, Identifier);
EndIf; EndIf;
Else Else
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier); Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadSmallFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "") Function UploadSmallFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
URL = StrReplace(URL, "/files", "/files/" + Identifier); URL = StrReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers); Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers);
Else Else
Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers); Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadLargeFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "") Function UploadLargeFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
For Each File In FileMapping Do For Each File In FileMapping Do
Binary = File.Key; Binary = File.Key;
Break; Break;
EndDo; EndDo;
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
URL = StrReplace(URL, "/files", "/files/" + Identifier); URL = StrReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.Patch(URL, Description, Headers, True, True); Response = OPI_Tools.Patch(URL, Description, Headers, True, True);
Else Else
Response = OPI_Tools.Post(URL, Description, Headers, True, True); Response = OPI_Tools.Post(URL, Description, Headers, True, True);
EndIf; EndIf;
UploadURL = Response.Headers["Location"]; UploadURL = Response.Headers["Location"];
If Not ValueIsFilled(UploadURL) Then If Not ValueIsFilled(UploadURL) Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
UploadResponse = UploadFileInParts(Binary, UploadURL); UploadResponse = UploadFileInParts(Binary, UploadURL);
Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response); Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response);
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndFunction EndFunction
Function UploadFileInParts(Val Binary, Val UploadURL) Function UploadFileInParts(Val Binary, Val UploadURL)
Response = ""; Response = "";
ChunkSize = 268435456; ChunkSize = 268435456;
BytesRead = 0; BytesRead = 0;
CurrentPosition = 0; CurrentPosition = 0;
TotalSize = Binary.Size(); TotalSize = Binary.Size();
StrTotalSize = OPI_Tools.NumberToString(TotalSize); StrTotalSize = OPI_Tools.NumberToString(TotalSize);
DataReader = New DataReader(Binary); DataReader = New DataReader(Binary);
SourceStream = DataReader.SourceStream(); SourceStream = DataReader.SourceStream();
WHile BytesRead < TotalSize Do WHile BytesRead < TotalSize Do
BytesRead = SourceStream.CurrentPosition(); BytesRead = SourceStream.CurrentPosition();
Result = DataReader.Read(ChunkSize); Result = DataReader.Read(ChunkSize);
CurrentData = Result.GetBinaryData(); CurrentData = Result.GetBinaryData();
CurrentSize = CurrentData.Size(); CurrentSize = CurrentData.Size();
NextPosition = CurrentPosition + CurrentSize - 1; NextPosition = CurrentPosition + CurrentSize - 1;
If Not ValueIsFilled(CurrentData) Then If Not ValueIsFilled(CurrentData) Then
Break; Break;
EndIf; EndIf;
StreamHeader = "bytes " StreamHeader = "bytes "
+ OPI_Tools.NumberToString(CurrentPosition) + OPI_Tools.NumberToString(CurrentPosition)
+ "-" + "-"
+ OPI_Tools.NumberToString(NextPosition) + OPI_Tools.NumberToString(NextPosition)
+ "/" + "/"
+ StrTotalSize; + StrTotalSize;
AdditionalHeaders = New Map; AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize)); AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize));
AdditionalHeaders.Insert("Content-Range" , StreamHeader); AdditionalHeaders.Insert("Content-Range" , StreamHeader);
AdditionalHeaders.Insert("Content-Type" , "application/octet-stream"); AdditionalHeaders.Insert("Content-Type" , "application/octet-stream");
Response = OPI_Tools.Put(UploadURL, CurrentData, AdditionalHeaders, False, True); Response = OPI_Tools.Put(UploadURL, CurrentData, AdditionalHeaders, False, True);
CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition); CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition);
If ValueIsFilled(CheckResult) Then If ValueIsFilled(CheckResult) Then
Return CheckResult; Return CheckResult;
EndIf; EndIf;
KBytes = 1024; KBytes = 1024;
MByte = KBytes * KBytes; MByte = KBytes * KBytes;
Message(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte)); Message(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte));
RunGarbageCollection(); RunGarbageCollection();
FreeObject(CurrentData); FreeObject(CurrentData);
EndDo; EndDo;
Return Response; Return Response;
EndFunction EndFunction
Function CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition) Function CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition)
StartOfErrorCodes = 400; StartOfErrorCodes = 400;
EndOfFailureCodes = 600; EndOfFailureCodes = 600;
StartOfSuccessCodes = 200; StartOfSuccessCodes = 200;
EndOfSuccessCodes = 300; EndOfSuccessCodes = 300;
Redirection = 308; Redirection = 308;
If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then
StreamHeader = "bytes */" + StrTotalSize; StreamHeader = "bytes */" + StrTotalSize;
AdditionalHeaders.Insert("Content-Range" , StreamHeader); AdditionalHeaders.Insert("Content-Range" , StreamHeader);
CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True); CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True);
If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then
OPI_Tools.ProcessResponse(CheckResponse); OPI_Tools.ProcessResponse(CheckResponse);
Return CheckResponse; Return CheckResponse;
ElsIf CheckResponse.StatusCode = Redirection Then ElsIf CheckResponse.StatusCode = Redirection Then
UploadedData = Response.Headers["Range"]; UploadedData = Response.Headers["Range"];
Else Else
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
Else Else
UploadedData = Response.Headers["Range"]; UploadedData = Response.Headers["Range"];
EndIf; EndIf;
If Not ValueIsFilled(UploadedData) Then If Not ValueIsFilled(UploadedData) Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
UploadedData = StrReplace(UploadedData, "bytes=", ""); UploadedData = StrReplace(UploadedData, "bytes =", "");
ArrayOfInformation = StrSplit(UploadedData, "-", False); ArrayOfInformation = StrSplit(UploadedData, "-", False);
PartsRequired = 2; PartsRequired = 2;
If Not ArrayOfInformation.Count() = PartsRequired Then If Not ArrayOfInformation.Count() = PartsRequired Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
CurrentPosition = Number(ArrayOfInformation[1]) + 1; CurrentPosition = Number(ArrayOfInformation[1]) + 1;
Return ""; Return "";
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -43,90 +43,90 @@
// Create spreadsheet // Create spreadsheet
// Creates a new spreadsheet // Creates a new spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Name - title // Name - String - Name - title
// ArrayOfSheetNames - Array of String - Array of names to add new sheets to the spreadsheet - sheets // ArrayOfSheetNames - Array of String - Array of names to add new sheets to the spreadsheet - sheets
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateSpreadsheet(Val Token, Val Name, Val ArrayOfSheetNames) Export Function CreateSpreadsheet(Val Token, Val Name, Val ArrayOfSheetNames) Export
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(ArrayOfSheetNames); OPI_TypeConversion.GetCollection(ArrayOfSheetNames);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets"; URL = "https://sheets.googleapis.com/v4/spreadsheets";
Properties = New Structure("title" , Name); Properties = New Structure("title" , Name);
Sheets = New Array; Sheets = New Array;
FillSheetArray(ArrayOfSheetNames, Sheets); FillSheetArray(ArrayOfSheetNames, Sheets);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("properties", Properties, "Collection", Parameters); OPI_Tools.AddField("properties", Properties, "Collection", Parameters);
OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters); OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get spreadsheet // Get spreadsheet
// Gets information about the spreadsheet by ID // Gets information about the spreadsheet by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Spreadsheet identifier - spreadsheet // Identifier - String - Spreadsheet identifier - spreadsheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetSpreadsheet(Val Token, Val Identifier) Export Function GetSpreadsheet(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Change spreadsheet name // Change spreadsheet name
// Changes the name of the existing spreadsheet // Changes the name of the existing spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// Name - String - New name - title // Name - String - New name - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditSpreadsheetTitle(Val Token, Val Spreadsheet, Val Name) Export Function EditSpreadsheetTitle(Val Token, Val Spreadsheet, Val Name) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Change = New Structure("title", Name); Change = New Structure("title", Name);
ChangeRequest = New Structure("properties,fields", Change, "title"); ChangeRequest = New Structure("properties,fields", Change, "title");
Request = New Structure("updateSpreadsheetProperties", ChangeRequest); Request = New Structure("updateSpreadsheetProperties", ChangeRequest);
ArrayOfRequests = New Array; ArrayOfRequests = New Array;
ArrayOfRequests.Add(Request); ArrayOfRequests.Add(Request);
Parameters = New Structure("requests", ArrayOfRequests); Parameters = New Structure("requests", ArrayOfRequests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -135,95 +135,95 @@ EndFunction
// Add sheet // Add sheet
// Adds a new sheet to the spreadsheet // Adds a new sheet to the spreadsheet
// //
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - Spreadsheet identifier - spreadsheet // Spreadsheet - String - Spreadsheet identifier - spreadsheet
// Name - String - NewSheetName - title // Name - String - NewSheetName - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function AddSheet(Val Token, Val Spreadsheet, Val Name) Export Function AddSheet(Val Token, Val Spreadsheet, Val Name) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Sheet = CreateSheet(Name); Sheet = CreateSheet(Name);
Requests = New Array; Requests = New Array;
Change = New Structure("addSheet", Sheet); Change = New Structure("addSheet", Sheet);
Requests.Add(Change); Requests.Add(Change);
Parameters = New Structure("requests", Requests); Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete sheet // Delete sheet
// Deletes a sheet from the spreadsheet // Deletes a sheet from the spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - Spreadsheet identifier - spreadsheet // Spreadsheet - String - Spreadsheet identifier - spreadsheet
// Sheet - String - IdentifierOfSheetToDelete - sheet // Sheet - String - IdentifierOfSheetToDelete - sheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteSheet(Val Token, Val Spreadsheet, Val Sheet) Export Function DeleteSheet(Val Token, Val Spreadsheet, Val Sheet) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Requests = New Array; Requests = New Array;
Sheet = New Structure("sheetId" , Sheet); Sheet = New Structure("sheetId" , Sheet);
Change = New Structure("deleteSheet", Sheet); Change = New Structure("deleteSheet", Sheet);
Requests.Add(Change); Requests.Add(Change);
Parameters = New Structure("requests", Requests); Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Copy sheet // Copy sheet
// Copies a sheet from one spreadsheet to another // Copies a sheet from one spreadsheet to another
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// From - String - Source spreadsheet ID - from // From - String - Source spreadsheet ID - from
// Target - String - Destination spreadsheet ID - to // Target - String - Destination spreadsheet ID - to
// Sheet - String - CopiedSheetID - sheet // Sheet - String - CopiedSheetID - sheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CopySheet(Val Token, Val From, Val Target, Val Sheet) Export Function CopySheet(Val Token, Val From, Val Target, Val Sheet) Export
OPI_TypeConversion.GetLine(From); OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(Target); OPI_TypeConversion.GetLine(Target);
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ From + From
+ "/sheets/" + "/sheets/"
+ Sheet + Sheet
+ ":copyTo"; + ":copyTo";
Parameters = New Structure("destinationSpreadsheetId", Target); Parameters = New Structure("destinationSpreadsheetId", Target);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -232,14 +232,14 @@ EndFunction
// Set cell values // Set cell values
// Sets sheet cell values // Sets sheet cell values
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// ValueMapping - Map Of KeyAndValue - Fill data where the key is the cell name like A1 - data // ValueMapping - Map Of KeyAndValue - Fill data where the key is the cell name like A1 - data
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// MajorDimension - String - Main dimension when filling the array range - dim // MajorDimension - String - Main dimension when filling the array range - dim
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function SetCellValues(Val Token Function SetCellValues(Val Token
@ -247,90 +247,90 @@ Function SetCellValues(Val Token
, Val ValueMapping , Val ValueMapping
, Val Sheet = "" , Val Sheet = ""
, Val MajorDimension = "COLUMNS") Export , Val MajorDimension = "COLUMNS") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetCollection(ValueMapping); OPI_TypeConversion.GetCollection(ValueMapping);
If Not TypeOf(ValueMapping) = Type("Structure") If Not TypeOf(ValueMapping) = Type("Structure")
And Not TypeOf(ValueMapping) = Type("Map") Then And Not TypeOf(ValueMapping) = Type("Map") Then
Return "Failed to convert the structure of values to a collection"; Return "Failed to convert the structure of values to a collection";
EndIf; EndIf;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchUpdate";
DataArray = FormCellDataArray(ValueMapping, MajorDimension, Sheet); DataArray = FormCellDataArray(ValueMapping, MajorDimension, Sheet);
Parameters = New Structure("data,valueInputOption", DataArray, "USER_ENTERED"); Parameters = New Structure("data,valueInputOption", DataArray, "USER_ENTERED");
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Clear cells // Clear cells
// Clears the value in cells // Clears the value in cells
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// CellsArray - Array of String - Array of cells like A1 to be cleared - cells // CellsArray - Array of String - Array of cells like A1 to be cleared - cells
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function ClearCells(Val Token, Val Spreadsheet, Val CellsArray, Val Sheet = "") Export Function ClearCells(Val Token, Val Spreadsheet, Val CellsArray, Val Sheet = "") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetCollection(CellsArray); OPI_TypeConversion.GetCollection(CellsArray);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchClear"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchClear";
FormCellNameArray(CellsArray, Sheet); FormCellNameArray(CellsArray, Sheet);
Parameters = New Structure("ranges", CellsArray); Parameters = New Structure("ranges", CellsArray);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get cell values // Get cell values
// Gets cell values of the table // Gets cell values of the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// CellsArray - Array of String - Array of A1 type cells to get (whole sheet if not filled) - cells // CellsArray - Array of String - Array of A1 type cells to get (whole sheet if not filled) - cells
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCellValues(Val Token, Val Spreadsheet, Val CellsArray = "", Val Sheet = "") Export Function GetCellValues(Val Token, Val Spreadsheet, Val CellsArray = "", Val Sheet = "") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchGet"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchGet";
If ValueIsFilled(CellsArray) Then If ValueIsFilled(CellsArray) Then
OPI_TypeConversion.GetCollection(CellsArray); OPI_TypeConversion.GetCollection(CellsArray);
FormCellNameArray(CellsArray, Sheet); FormCellNameArray(CellsArray, Sheet);
First = True; First = True;
For Each Cell In CellsArray Do For Each Cell In CellsArray Do
Delimiter = ?(First, "?", "&"); Delimiter = ?(First, "?", "&");
URL = URL + Delimiter + "ranges=" + Cell; URL = URL + Delimiter + "ranges =" + Cell;
First = False; First = False;
EndDo; EndDo;
Else Else
URL = URL + "?ranges='" + Sheet + "'"; URL = URL + "?ranges ='" + Sheet + "'";
EndIf; EndIf;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -340,75 +340,75 @@ EndFunction
#Region Private #Region Private
Procedure FillSheetArray(Val ArrayOfNames, SheetArray) Procedure FillSheetArray(Val ArrayOfNames, SheetArray)
For Each SheetName In ArrayOfNames Do For Each SheetName In ArrayOfNames Do
Sheet = CreateSheet(SheetName); Sheet = CreateSheet(SheetName);
SheetArray.Add(Sheet); SheetArray.Add(Sheet);
EndDo; EndDo;
EndProcedure EndProcedure
Procedure AddSheetName(Cell, Val Sheet) Procedure AddSheetName(Cell, Val Sheet)
If ValueIsFilled(Sheet) Then If ValueIsFilled(Sheet) Then
Cell = "'" + Sheet + "'!" + Cell; Cell = "'" + Sheet + "'!" + Cell;
EndIf; EndIf;
EndProcedure EndProcedure
Function CreateSheet(Val Name) Function CreateSheet(Val Name)
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
SheetProperties = New Structure("title" , Name); SheetProperties = New Structure("title" , Name);
Sheet = New Structure("properties", SheetProperties); Sheet = New Structure("properties", SheetProperties);
Return Sheet; Return Sheet;
EndFunction EndFunction
Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet) Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet)
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
DataArray = New Array; DataArray = New Array;
For Each CellData In ValueStructure Do For Each CellData In ValueStructure Do
CurrentValue = CellData.Value; CurrentValue = CellData.Value;
CurrentKey = CellData.Key; CurrentKey = CellData.Key;
AddSheetName(CurrentKey, Sheet); AddSheetName(CurrentKey, Sheet);
OPI_TypeConversion.GetArray(CurrentValue); OPI_TypeConversion.GetArray(CurrentValue);
CurrentData = New Map; CurrentData = New Map;
CurrentArray = New Array; CurrentArray = New Array;
CurrentArray.Add(CurrentValue); CurrentArray.Add(CurrentValue);
OPI_Tools.AddField("range" , CurrentKey , "String", CurrentData); OPI_Tools.AddField("range" , CurrentKey , "String", CurrentData);
OPI_Tools.AddField("values" , CurrentArray , "Array", CurrentData); OPI_Tools.AddField("values" , CurrentArray , "Array" , CurrentData);
OPI_Tools.AddField("majorDimension", MajorDimension, "String", CurrentData); OPI_Tools.AddField("majorDimension", MajorDimension, "String", CurrentData);
DataArray.Add(CurrentData); DataArray.Add(CurrentData);
EndDo; EndDo;
Return DataArray; Return DataArray;
EndFunction EndFunction
Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet) Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet)
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
For N = 0 To ArrayOfNames.UBound() Do For N = 0 To ArrayOfNames.UBound() Do
AddSheetName(ArrayOfNames[N], Sheet); AddSheetName(ArrayOfNames[N], Sheet);
EndDo; EndDo;
EndProcedure EndProcedure
#EndRegion #EndRegion

View File

@ -41,97 +41,97 @@
// Generate code retrieval link // Generate code retrieval link
// Returns URL for browser authorization // Returns URL for browser authorization
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// Calendar - Boolean - Calendar methods permission - calendar // Calendar - Boolean - Calendar methods permission - calendar
// Drive - Boolean - Drive methods permission - drive // Drive - Boolean - Drive methods permission - drive
// Sheets - Boolean - Sheets methods permission - sheets // Sheets - Boolean - Sheets methods permission - sheets
// //
// Returns: // Returns:
// String - Code retrieval link // String - Code retrieval link
Function FormCodeRetrievalLink(Val ClientID Function FormCodeRetrievalLink(Val ClientID
, Val Calendar = True , Val Calendar = True
, Val Drive = True , Val Drive = True
, Val Sheets = True) Export , Val Sheets = True) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetBoolean(Calendar); OPI_TypeConversion.GetBoolean(Calendar);
OPI_TypeConversion.GetBoolean(Sheets); OPI_TypeConversion.GetBoolean(Sheets);
OPI_TypeConversion.GetBoolean(Drive); OPI_TypeConversion.GetBoolean(Drive);
URL = "https://accounts.google.com/o/oauth2/auth"; URL = "https://accounts.google.com/o/oauth2/auth";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("response_type", "code"); URLParameters.Insert("response_type", "code");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("redirect_uri" , "http://localhost"); URLParameters.Insert("redirect_uri" , "http://localhost");
URLParameters.Insert("access_type" , "offline"); URLParameters.Insert("access_type" , "offline");
URLParameters.Insert("scope" , GetPermissionsList(Calendar, Drive, Sheets)); URLParameters.Insert("scope" , GetPermissionsList(Calendar, Drive, Sheets));
URL = URL + OPI_Tools.RequestParametersToString(URLParameters); URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
Return URL; Return URL;
EndFunction EndFunction
// Get token by code // Get token by code
// Gets token by code from browser authorization // Gets token by code from browser authorization
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// Code - String - Code from browser - code // Code - String - Code from browser - code
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(Code); OPI_TypeConversion.GetLine(Code);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("grant_type" , "authorization_code"); URLParameters.Insert("grant_type" , "authorization_code");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("client_secret", ClientSecret); URLParameters.Insert("client_secret", ClientSecret);
URLParameters.Insert("redirect_uri" , "http://localhost"); URLParameters.Insert("redirect_uri" , "http://localhost");
URLParameters.Insert("code" , Code); URLParameters.Insert("code" , Code);
Response = OPI_Tools.Post(URL, URLParameters, , False); Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates token by Refresh token // Updates token by Refresh token
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// RefreshToken - String - Refresh token - refresh // RefreshToken - String - Refresh token - refresh
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken); OPI_TypeConversion.GetLine(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("grant_type" , "refresh_token"); URLParameters.Insert("grant_type" , "refresh_token");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("client_secret", ClientSecret); URLParameters.Insert("client_secret", ClientSecret);
URLParameters.Insert("refresh_token", RefreshToken); URLParameters.Insert("refresh_token", RefreshToken);
Response = OPI_Tools.Post(URL, URLParameters, , False); Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
@ -141,14 +141,14 @@ EndFunction
#Region Internal #Region Internal
Function GetAuthorizationHeader(Val Token) Export Function GetAuthorizationHeader(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "Bearer " + Token); Headers.Insert("Authorization", "Bearer " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
#EndRegion #EndRegion
@ -156,23 +156,23 @@ EndFunction
#Region ServiceProceduresAndFunctions #Region ServiceProceduresAndFunctions
Function GetPermissionsList(Calendar, Drive, Sheets) Function GetPermissionsList(Calendar, Drive, Sheets)
PermissionsArray = New Array; PermissionsArray = New Array;
If Calendar Then If Calendar Then
PermissionsArray.Add("https://www.googleapis.com/auth/calendar"); PermissionsArray.Add("https://www.googleapis.com/auth/calendar");
EndIf; EndIf;
If Drive Then If Drive Then
PermissionsArray.Add("https://www.googleapis.com/auth/drive"); PermissionsArray.Add("https://www.googleapis.com/auth/drive");
EndIf; EndIf;
If Sheets Then If Sheets Then
PermissionsArray.Add("https://www.googleapis.com/auth/spreadsheets"); PermissionsArray.Add("https://www.googleapis.com/auth/spreadsheets");
EndIf; EndIf;
Return StrConcat(PermissionsArray, " "); Return StrConcat(PermissionsArray, " ");
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -48,83 +48,83 @@
// Get authorization link // Get authorization link
// Forms a link for authorization via the browser // Forms a link for authorization via the browser
// //
// Parameters: // Parameters:
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// String - URL for browser transition // String - URL for browser transition
Function GetAuthorizationLink(Parameters = "") Export Function GetAuthorizationLink(Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("response_type" , "code"); URLParameters.Insert("response_type" , "code");
URLParameters.Insert("client_id" , Parameters_["client_id"]); URLParameters.Insert("client_id" , Parameters_["client_id"]);
URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]); URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
URLParameters.Insert("scope" , Parameters_["scope"]); URLParameters.Insert("scope" , Parameters_["scope"]);
URLParameters.Insert("state" , "state"); URLParameters.Insert("state" , "state");
URLParameters.Insert("code_challenge" , "challenge"); URLParameters.Insert("code_challenge" , "challenge");
URLParameters.Insert("code_challenge_method", "plain"); URLParameters.Insert("code_challenge_method", "plain");
URLParameters = OPI_Tools.RequestParametersToString(URLParameters); URLParameters = OPI_Tools.RequestParametersToString(URLParameters);
Link = "https://twitter.com/i/oauth2/authorize" + URLParameters; Link = "https://twitter.com/i/oauth2/authorize" + URLParameters;
Return Link; Return Link;
EndFunction EndFunction
// Get token // Get token
// Gets the token by the code received when authorizing using the link from GetAuthorizationLink // Gets the token by the code received when authorizing using the link from GetAuthorizationLink
// //
// Parameters: // Parameters:
// Code - String - Code obtained from authorization See GetAuthorizationLink - code // Code - String - Code obtained from authorization See GetAuthorizationLink - code
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function GetToken(Val Code, Val Parameters = "") Export Function GetToken(Val Code, Val Parameters = "") Export
OPI_TypeConversion.GetLine(Code); OPI_TypeConversion.GetLine(Code);
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
RequestParameters = New Structure; RequestParameters = New Structure;
RequestParameters.Insert("code" , Code); RequestParameters.Insert("code" , Code);
RequestParameters.Insert("grant_type" , "authorization_code"); RequestParameters.Insert("grant_type" , "authorization_code");
RequestParameters.Insert("client_id" , Parameters_["client_id"]); RequestParameters.Insert("client_id" , Parameters_["client_id"]);
RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]); RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
RequestParameters.Insert("code_verifier", "challenge"); RequestParameters.Insert("code_verifier", "challenge");
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token" Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False); , RequestParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates the v2 token using the refresh_token // Updates the v2 token using the refresh_token
// //
// Parameters: // Parameters:
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function RefreshToken(Val Parameters = "") Export Function RefreshToken(Val Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
Refresh = "refresh_token"; Refresh = "refresh_token";
RequestParameters = New Structure; RequestParameters = New Structure;
RequestParameters.Insert(Refresh , Parameters_[Refresh]); RequestParameters.Insert(Refresh , Parameters_[Refresh]);
RequestParameters.Insert("grant_type" , Refresh); RequestParameters.Insert("grant_type" , Refresh);
RequestParameters.Insert("client_id" , Parameters_["client_id"]); RequestParameters.Insert("client_id" , Parameters_["client_id"]);
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token" Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False); , RequestParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
@ -133,23 +133,23 @@ EndFunction
// Method for insertion into an http service, the address of which is specified in redirect_uri // Method for insertion into an http service, the address of which is specified in redirect_uri
// Calls the token acquisition method, as for obtaining a token from the code received // Calls the token acquisition method, as for obtaining a token from the code received
// on redirect_uri after authorization via the browser is only 30 seconds // on redirect_uri after authorization via the browser is only 30 seconds
// //
// Parameters: // Parameters:
// Request - HTTPServiceRequest - Request coming to the http service // Request - HTTPServiceRequest - Request coming to the http service
// //
// Returns: // Returns:
// HTTPResponse, Arbitrary, BinaryData - Result of reading the JSON response from the server // HTTPResponse, Arbitrary, BinaryData - Result of reading the JSON response from the server
Function HandleIncomingRequestAfterAuthorization(Request) Export Function HandleIncomingRequestAfterAuthorization(Request) Export
Code = Request.RequestParameters["code"]; Code = Request.RequestParameters["code"];
TokenResponse = GetToken(Code); TokenResponse = GetToken(Code);
// BSLLS:CommentedCode-off // BSLLS:CommentedCode-off
// Preferred token storage // Preferred token storage
// Constants.TwitterRefresh.Set(ResponseToken["refresh_token"]); // Constants.TwitterRefresh.Set(ResponseToken["refresh_token"]);
// Constants.TwitterToken.Set(ResponseToken["access_token"]); // Constants.TwitterToken.Set(ResponseToken["access_token"]);
// BSLLS:CommentedCode-on // BSLLS:CommentedCode-on
Return TokenResponse; Return TokenResponse;
EndFunction EndFunction
@ -160,189 +160,189 @@ EndFunction
// !NOCLI // !NOCLI
// Create custom tweet // Create custom tweet
// //
// Parameters: // Parameters:
// Text - String - Tweet text // Text - String - Tweet text
// MediaArray - Array of String, BinaryData - Array of binary data or file paths // MediaArray - Array of String, BinaryData - Array of binary data or file paths
// PollOptionsArray - Array of String - Array of poll options, if necessary // PollOptionsArray - Array of String - Array of poll options, if necessary
// PollDuration - String, Number - Poll duration if necessary (poll without duration is not created) // PollDuration - String, Number - Poll duration if necessary (poll without duration is not created)
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateCustomTweet(Val Text = "" Function CreateCustomTweet(Val Text = ""
, Val MediaArray = "" , Val MediaArray = ""
, Val PollOptionsArray = "" , Val PollOptionsArray = ""
, Val PollDuration = "" , Val PollDuration = ""
, Val Parameters = "") Export , Val Parameters = "") Export
OPI_TypeConversion.GetLine(Text); OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetLine(PollDuration); OPI_TypeConversion.GetLine(PollDuration);
If ValueIsFilled(MediaArray) Then If ValueIsFilled(MediaArray) Then
OPI_TypeConversion.GetCollection(MediaArray); OPI_TypeConversion.GetCollection(MediaArray);
EndIf; EndIf;
If ValueIsFilled(PollOptionsArray) Then If ValueIsFilled(PollOptionsArray) Then
OPI_TypeConversion.GetCollection(PollOptionsArray); OPI_TypeConversion.GetCollection(PollOptionsArray);
EndIf; EndIf;
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URL = "https://api.twitter.com/2/tweets"; URL = "https://api.twitter.com/2/tweets";
Array = "Array"; Array = "Array";
Fields = New Map; Fields = New Map;
If ValueIsFilled(Text) Then If ValueIsFilled(Text) Then
Fields.Insert("text", Text); Fields.Insert("text", Text);
EndIf; EndIf;
If TypeOf(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then If TypeOf(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then
PollDuration = Number(PollDuration); PollDuration = Number(PollDuration);
If PollOptionsArray.Count() > 0 Then If PollOptionsArray.Count() > 0 Then
OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration); OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration);
Fields.Insert("poll", OptionStructure); Fields.Insert("poll", OptionStructure);
EndIf; EndIf;
EndIf; EndIf;
If TypeOf(MediaArray) = Type(Array) Then If TypeOf(MediaArray) = Type(Array) Then
If MediaArray.Count() > 0 Then If MediaArray.Count() > 0 Then
Fields.Insert("media", New Structure("media_ids", MediaArray)); Fields.Insert("media", New Structure("media_ids", MediaArray));
EndIf; EndIf;
EndIf; EndIf;
Authorization = CreateAuthorizationHeaderV2(Parameters_); Authorization = CreateAuthorizationHeaderV2(Parameters_);
Response = OPI_Tools.Post(URL, Fields, Authorization); Response = OPI_Tools.Post(URL, Fields, Authorization);
Return Response; Return Response;
EndFunction EndFunction
// Create text tweet // Create text tweet
// Creates a tweet without attachments // Creates a tweet without attachments
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateTextTweet(Val Text, Val Parameters = "") Export Function CreateTextTweet(Val Text, Val Parameters = "") Export
Return CreateCustomTweet(Text, , , , Parameters); Return CreateCustomTweet(Text, , , , Parameters);
EndFunction EndFunction
// Create image tweet // Create image tweet
// Creates a tweet with an image attachment // Creates a tweet with an image attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// ImageArray - Array of String, BinaryData - Image files array - pictures // ImageArray - Array of String, BinaryData - Image files array - pictures
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateImageTweet(Val Text, Val ImageArray, Val Parameters = "") Export Function CreateImageTweet(Val Text, Val ImageArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(ImageArray, "photo", Parameters); MediaArray = UploadAttachmentsArray(ImageArray, "photo", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create gif tweet // Create gif tweet
// Creates a tweet with a gif attachment // Creates a tweet with a gif attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// GifsArray - Array of String, BinaryData - Gif files array - gifs // GifsArray - Array of String, BinaryData - Gif files array - gifs
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateGifTweet(Val Text, Val GifsArray, Val Parameters = "") Export Function CreateGifTweet(Val Text, Val GifsArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(GifsArray, "animated_gif", Parameters); MediaArray = UploadAttachmentsArray(GifsArray, "animated_gif", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create video tweet // Create video tweet
// Creates a tweet with a video attachment // Creates a tweet with a video attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// VideosArray - Array of String, BinaryData - Video files array - videos // VideosArray - Array of String, BinaryData - Video files array - videos
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateVideoTweet(Val Text, Val VideosArray, Val Parameters = "") Export Function CreateVideoTweet(Val Text, Val VideosArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(VideosArray, "video", Parameters); MediaArray = UploadAttachmentsArray(VideosArray, "video", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create poll tweet // Create poll tweet
// Creates a tweet with a poll // Creates a tweet with a poll
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// OptionArray - Array of String - Poll options array - options // OptionArray - Array of String - Poll options array - options
// Duration - String, Number - Poll duration - duration // Duration - String, Number - Poll duration - duration
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreatePollTweet(Val Text, Val OptionArray, Val Duration, Val Parameters = "") Export Function CreatePollTweet(Val Text, Val OptionArray, Val Duration, Val Parameters = "") Export
Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters); Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters);
EndFunction EndFunction
// Upload attachments array !NOCLI // Upload attachments array !NOCLI
// Uploads files to the server and returns their IDs // Uploads files to the server and returns their IDs
// //
// Parameters: // Parameters:
// ArrayOfFiles - Array of String, BinaryData - Files array // ArrayOfFiles - Array of String, BinaryData - Files array
// AttachmentsType - String - Attachments type // AttachmentsType - String - Attachments type
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Array Of String - Media ID array // Array Of String - Media ID array
Function UploadAttachmentsArray(Val ArrayOfFiles, Val AttachmentsType, Val Parameters = "") Export Function UploadAttachmentsArray(Val ArrayOfFiles, Val AttachmentsType, Val Parameters = "") Export
OPI_TypeConversion.GetLine(AttachmentsType); OPI_TypeConversion.GetLine(AttachmentsType);
OPI_TypeConversion.GetCollection(ArrayOfFiles); OPI_TypeConversion.GetCollection(ArrayOfFiles);
MediaArray = New Array; MediaArray = New Array;
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
MIS = "media_id_string"; MIS = "media_id_string";
If ValueIsFilled(ArrayOfFiles) Then If ValueIsFilled(ArrayOfFiles) Then
For Each SendingFile In ArrayOfFiles Do For Each SendingFile In ArrayOfFiles Do
OPI_TypeConversion.GetBinaryData(SendingFile); OPI_TypeConversion.GetBinaryData(SendingFile);
Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_); Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_);
MediaID = Response[MIS]; MediaID = Response[MIS];
If Not ValueIsFilled(MediaID) Then If Not ValueIsFilled(MediaID) Then
Return Response; Return Response;
EndIf; EndIf;
MediaArray.Add(MediaID); MediaArray.Add(MediaID);
EndDo; EndDo;
EndIf; EndIf;
Return MediaArray; Return MediaArray;
EndFunction EndFunction
#EndRegion #EndRegion
@ -351,195 +351,195 @@ EndFunction
#Region Private #Region Private
Function UploadMediaFile(Val File, Val Type, Val Parameters) Function UploadMediaFile(Val File, Val Type, Val Parameters)
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
RequestType = "POST"; RequestType = "POST";
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URL = "https://upload.twitter.com/1.1/media/upload.json"; URL = "https://upload.twitter.com/1.1/media/upload.json";
If Type = "photo" Then If Type = "photo" Then
Fields = New Structure; Fields = New Structure;
Fields.Insert("media_data" , Base64String(File)); Fields.Insert("media_data" , Base64String(File));
Fields.Insert("media_category", Type); Fields.Insert("media_category", Type);
Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False); Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Else Else
Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_); Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadMediaInParts(Val File, Val Type, Val RequestType, Val URL, Parameters) Function UploadMediaInParts(Val File, Val Type, Val RequestType, Val URL, Parameters)
Unit = 1024; Unit = 1024;
Count = 4; Count = 4;
MediaKey = "media_key"; MediaKey = "media_key";
MIS = "media_id_string"; MIS = "media_id_string";
Command = "command"; Command = "command";
Size = File.Size(); Size = File.Size();
MIMETypeMapping = New Map; MIMETypeMapping = New Map;
MIMETypeMapping.Insert("photo" , "image/jpeg"); MIMETypeMapping.Insert("photo" , "image/jpeg");
MIMETypeMapping.Insert("video" , "video/mp4"); MIMETypeMapping.Insert("video" , "video/mp4");
MIMETypeMapping.Insert("animated_gif", "image/gif"); MIMETypeMapping.Insert("animated_gif", "image/gif");
ChunkSize = Count * Unit * Unit; ChunkSize = Count * Unit * Unit;
ArrayReading = SplitBinaryData(File, ChunkSize); ArrayReading = SplitBinaryData(File, ChunkSize);
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "INIT"); Fields.Insert(Command , "INIT");
Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size)); Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size));
Fields.Insert("media_type" , MIMETypeMapping.Get(Type)); Fields.Insert("media_type" , MIMETypeMapping.Get(Type));
Fields.Insert("media_category" , Type); Fields.Insert("media_category" , Type);
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL);
InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False); InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False);
InitializationKey = InitializationResponse[MediaKey]; InitializationKey = InitializationResponse[MediaKey];
InitializationID = InitializationResponse[MIS]; InitializationID = InitializationResponse[MIS];
If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then
Return InitializationResponse; Return InitializationResponse;
EndIf; EndIf;
Counter = 0; Counter = 0;
For Each Part In ArrayReading Do For Each Part In ArrayReading Do
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "APPEND"); Fields.Insert(Command , "APPEND");
Fields.Insert("media_key" , InitializationKey); Fields.Insert("media_key" , InitializationKey);
Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter)); Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter));
Fields.Insert("media" , Part); Fields.Insert("media" , Part);
Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL);
OPI_Tools.PostMultipart(URL, Fields, , , Authorization); OPI_Tools.PostMultipart(URL, Fields, , , Authorization);
Counter = Counter + 1; Counter = Counter + 1;
EndDo; EndDo;
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "FINALIZE"); Fields.Insert(Command , "FINALIZE");
Fields.Insert("media_id", InitializationID); Fields.Insert("media_id", InitializationID);
ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL); ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL);
If Not TypeOf(ProcessingStatus) = Type("String") Then If Not TypeOf(ProcessingStatus) = Type("String") Then
Return ProcessingStatus; Return ProcessingStatus;
EndIf; EndIf;
Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters); Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters);
Return Response; Return Response;
EndFunction EndFunction
Function WaitForProcessingCompletion(Val ProcessingStatus, Val InitializationID, Val URL, Val Parameters) Function WaitForProcessingCompletion(Val ProcessingStatus, Val InitializationID, Val URL, Val Parameters)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Command = "command"; Command = "command";
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "STATUS"); Fields.Insert(Command , "STATUS");
Fields.Insert("media_id", InitializationID); Fields.Insert("media_id", InitializationID);
WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL);
Response = OPI_Tools.Get(URL, Fields, Authorization); Response = OPI_Tools.Get(URL, Fields, Authorization);
Information = Response[ProcessingInfo]; Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then If Not ValueIsFilled(Information) Then
Return Response; Return Response;
EndIf; EndIf;
ProcessingStatus = Information["state"]; ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then If Not ValueIsFilled(ProcessingStatus) Then
Return Response; Return Response;
EndIf; EndIf;
EndDo; EndDo;
If ProcessingStatus = "failed" Then If ProcessingStatus = "failed" Then
Raise "Twitter could not process the video you uploaded"; Raise "Twitter could not process the video you uploaded";
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function GetStandardParameters(Val Parameters = "") Function GetStandardParameters(Val Parameters = "")
// The definition of the data required for the work is collected here. // The definition of the data required for the work is collected here.
// For Twitter, this is quite a significant set, which is due to the presence of 2 APIs at once, // For Twitter, this is quite a significant set, which is due to the presence of 2 APIs at once,
// which, at the same time, are not created for different tasks, but are simply versions of each other. // which, at the same time, are not created for different tasks, but are simply versions of each other.
// The current version of the API is v2 and it requires obtaining temporary tokens. Despite the fact, // The current version of the API is v2 and it requires obtaining temporary tokens. Despite the fact,
// that Twitter insists on using this latest version, they somehow managed not to transfer // that Twitter insists on using this latest version, they somehow managed not to transfer
// file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done // file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done
// on version 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1, // on version 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1,
// but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different // but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different
// The world gigacorporation of Elon Musk, by the way, a reminder ;) // The world gigacorporation of Elon Musk, by the way, a reminder ;)
// P.S The following is often referred to as the "Twitter Developer settings page" - this // P.S The following is often referred to as the "Twitter Developer settings page" - this
// https://developer.twitter.com/en/portal/dashboard and chosing of project from list (key icon) // https://developer.twitter.com/en/portal/dashboard and chosing of project from list (key icon)
Parameters_ = New Map; Parameters_ = New Map;
Permissions = "tweet.read tweet.write tweet.moderate.write users.read " Permissions = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read " + "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read " + "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write"; + "block.write bookmark.read bookmark.write";
// Data for API v2 // Data for API v2
// redirect_uri - URL of your http service (or other request handler) for authorization // redirect_uri - URL of your http service (or other request handler) for authorization
// scope - a set of permissions for the received key. Can be any, but offline.access is mandatory // scope - a set of permissions for the received key. Can be any, but offline.access is mandatory
// client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer // client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer // client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// access_token - GetAuthorizationLink() -> Browser -> code will come to redirect_uri -> GetToken(code) // access_token - GetAuthorizationLink() -> Browser -> code will come to redirect_uri -> GetToken(code)
// refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 hr) // refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 hr)
// The update is done using the UpdateToken method with new access_token and refresh_token. // The update is done using the UpdateToken method with new access_token and refresh_token.
// For the next update, you need to use a new refresh_token, so hardcode // For the next update, you need to use a new refresh_token, so hardcode
// won't work (access_token won't work either) // won't work (access_token won't work either)
// |--> RefreshToken() ->|access_token --> 2 hrs. lifetime // |--> RefreshToken() ->|access_token --> 2 hrs. lifetime
// | |refresh_token --| // | |refresh_token --|
// |--------[after 2 hrs.]-------------------| // |--------[after 2 hrs.]-------------------|
// Data for API v1.1 // Data for API v1.1
// oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer // oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer // oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer // oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer // oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// These tokens do not need to be updated // These tokens do not need to be updated
Parameters_.Insert("redirect_uri" , ""); Parameters_.Insert("redirect_uri" , "");
Parameters_.Insert("scope" , Permissions); Parameters_.Insert("scope" , Permissions);
Parameters_.Insert("client_id" , ""); Parameters_.Insert("client_id" , "");
Parameters_.Insert("client_secret" , ""); Parameters_.Insert("client_secret" , "");
Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get() Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get()
Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get() Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get()
Parameters_.Insert("oauth_token" , ""); Parameters_.Insert("oauth_token" , "");
Parameters_.Insert("oauth_token_secret" , ""); Parameters_.Insert("oauth_token_secret" , "");
Parameters_.Insert("oauth_consumer_key" , ""); Parameters_.Insert("oauth_consumer_key" , "");
Parameters_.Insert("oauth_consumer_secret", ""); Parameters_.Insert("oauth_consumer_secret", "");
OPI_TypeConversion.GetCollection(Parameters); OPI_TypeConversion.GetCollection(Parameters);
If TypeOf(Parameters) = Type("Structure") Or TypeOf(Parameters) = Type("Map") Then If TypeOf(Parameters) = Type("Structure") Or TypeOf(Parameters) = Type("Map") Then
For Each PassedParameter In Parameters Do For Each PassedParameter In Parameters Do
Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value)); Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value));
@ -551,137 +551,137 @@ Function GetStandardParameters(Val Parameters = "")
EndFunction EndFunction
Function CreateAuthorizationHeaderV1(Val Parameters, Val Fields, Val RequestType, Val URL) Function CreateAuthorizationHeaderV1(Val Parameters, Val Fields, Val RequestType, Val URL)
CurrentDate = OPI_Tools.GetCurrentDate(); CurrentDate = OPI_Tools.GetCurrentDate();
AuthorizationHeader = ""; AuthorizationHeader = "";
HashingMethod = "HMAC-SHA1"; HashingMethod = "HMAC-SHA1";
APIVersion = "1.0"; APIVersion = "1.0";
SignatureString = ""; SignatureString = "";
Signature = ""; Signature = "";
OCK = "oauth_consumer_key"; OCK = "oauth_consumer_key";
OTK = "oauth_token"; OTK = "oauth_token";
CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate); CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate);
CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate); CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate);
ParametersTable = New ValueTable; ParametersTable = New ValueTable;
ParametersTable.Columns.Add("Key"); ParametersTable.Columns.Add("Key");
ParametersTable.Columns.Add("Value"); ParametersTable.Columns.Add("Value");
For Each Field In Fields Do For Each Field In Fields Do
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = Field.Key; NewLine.Key = Field.Key;
NewLine.Value = Field.Value; NewLine.Value = Field.Value;
EndDo; EndDo;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = OCK; NewLine.Key = OCK;
NewLine.Value = Parameters[OCK]; NewLine.Value = Parameters[OCK];
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = OTK; NewLine.Key = OTK;
NewLine.Value = Parameters[OTK]; NewLine.Value = Parameters[OTK];
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_version"; NewLine.Key = "oauth_version";
NewLine.Value = APIVersion; NewLine.Value = APIVersion;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_signature_method"; NewLine.Key = "oauth_signature_method";
NewLine.Value = HashingMethod; NewLine.Value = HashingMethod;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_timestamp"; NewLine.Key = "oauth_timestamp";
NewLine.Value = CurrentUNIXDate; NewLine.Value = CurrentUNIXDate;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_nonce"; NewLine.Key = "oauth_nonce";
NewLine.Value = CurrentUNIXDate; NewLine.Value = CurrentUNIXDate;
For Each TableRow In ParametersTable Do For Each TableRow In ParametersTable Do
TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding); TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding);
TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding); TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding);
EndDo; EndDo;
ParametersTable.Sort("Key"); ParametersTable.Sort("Key");
For Each TableRow In ParametersTable Do For Each TableRow In ParametersTable Do
SignatureString = SignatureString SignatureString = SignatureString
+ TableRow.Key + TableRow.Key
+ "=" + " ="
+ TableRow.Value + TableRow.Value
+ "&"; + "&";
EndDo; EndDo;
SignatureString = Left(SignatureString, StrLen(SignatureString) - 1); SignatureString = Left(SignatureString, StrLen(SignatureString) - 1);
SignatureString = Upper(RequestType) SignatureString = Upper(RequestType)
+ "&" + "&"
+ EncodeString(URL, StringEncodingMethod.URLencoding) + EncodeString(URL , StringEncodingMethod.URLencoding)
+ "&" + "&"
+ EncodeString(SignatureString, StringEncodingMethod.URLencoding); + EncodeString(SignatureString, StringEncodingMethod.URLencoding);
Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding) Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding)
+ "&" + "&"
+ EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding); + EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding);
Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature) Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature)
, GetBinaryDataFromString(SignatureString) , GetBinaryDataFromString(SignatureString)
, HashFunction.SHA1 , HashFunction.SHA1
, 64); , 64);
Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding); Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding);
Delimiter = ""","; Delimiter = """,";
AuthorizationHeader = AuthorizationHeader AuthorizationHeader = AuthorizationHeader
+ "OAuth " + "OAuth "
+ "oauth_consumer_key=""" + Parameters[OCK] + Delimiter + "oauth_consumer_key =""" + Parameters[OCK] + Delimiter
+ "oauth_token=""" + Parameters[OTK] + Delimiter + "oauth_token =""" + Parameters[OTK] + Delimiter
+ "oauth_signature_method=""" + HashingMethod + Delimiter + "oauth_signature_method=""" + HashingMethod + Delimiter
+ "oauth_timestamp=""" + CurrentUNIXDate + Delimiter + "oauth_timestamp =""" + CurrentUNIXDate + Delimiter
+ "oauth_nonce=""" + CurrentUNIXDate + Delimiter + "oauth_nonce =""" + CurrentUNIXDate + Delimiter
+ "oauth_version=""" + APIVersion + Delimiter + "oauth_version =""" + APIVersion + Delimiter
+ "oauth_signature=""" + Signature; + "oauth_signature =""" + Signature;
HeaderMapping = New Map; HeaderMapping = New Map;
HeaderMapping.Insert("authorization", AuthorizationHeader); HeaderMapping.Insert("authorization", AuthorizationHeader);
Return HeaderMapping; Return HeaderMapping;
EndFunction EndFunction
Function CreateAuthorizationHeaderV2(Val Parameters) Function CreateAuthorizationHeaderV2(Val Parameters)
ReturnMapping = New Map; ReturnMapping = New Map;
ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]); ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]);
Return ReturnMapping; Return ReturnMapping;
EndFunction EndFunction
Function GetProcessingStatus(Val Parameters, Val Fields, Val URL) Function GetProcessingStatus(Val Parameters, Val Fields, Val URL)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False); Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Information = Response[ProcessingInfo]; Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then If Not ValueIsFilled(Information) Then
Return Response; Return Response;
EndIf; EndIf;
ProcessingStatus = Information["state"]; ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then If Not ValueIsFilled(ProcessingStatus) Then
Return Response; Return Response;
Else Else
Return ProcessingStatus; Return ProcessingStatus;
EndIf; EndIf;
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // 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 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
@ -46,55 +46,55 @@
// which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published // which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published
// on the server - you can use an HTTP service. Information about new messages will also be sent there // on the server - you can use an HTTP service. Information about new messages will also be sent there
// Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working // Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working
// //
// Parameters: // Parameters:
// Token - String - Viber Token - token // Token - String - Viber Token - token
// URL - String - URL for setting up Webhook - url // URL - String - URL for setting up Webhook - url
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SetWebhook(Val Token, Val URL) Export Function SetWebhook(Val Token, Val URL) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("url" , URL , "String", Parameters); OPI_Tools.AddField("url" , URL , "String", Parameters);
OPI_Tools.AddField("auth_token" , Token, "String", Parameters); OPI_Tools.AddField("auth_token" , Token, "String", Parameters);
Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters); Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters);
EndFunction EndFunction
// Get channel information // Get channel information
// Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals // Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals
// The user ID from channel information is not suitable for sending messages through the bot - they are different // The user ID from channel information is not suitable for sending messages through the bot - they are different
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetChannelInformation(Val Token) Export Function GetChannelInformation(Val Token) Export
URL = "https://chatapi.viber.com/pa/get_account_info"; URL = "https://chatapi.viber.com/pa/get_account_info";
Return OPI_Tools.Get(URL, , TokenInHeaders(Token)); Return OPI_Tools.Get(URL, , TokenInHeaders(Token));
EndFunction EndFunction
// Get user data // Get user data
// Gets user information by ID // Gets user information by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// UserID - String, Number - Viber User ID - user // UserID - String, Number - Viber User ID - user
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetUserData(Val Token, Val UserID) Export Function GetUserData(Val Token, Val UserID) Export
URL = "https://chatapi.viber.com/pa/get_user_details"; URL = "https://chatapi.viber.com/pa/get_user_details";
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("id", UserID, "String", Parameters); OPI_Tools.AddField("id", UserID, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response; Return Response;
@ -103,22 +103,22 @@ EndFunction
// Get online users // Get online users
// Gets the status of a user or multiple users by ID // Gets the status of a user or multiple users by ID
// //
// Parameters: // Parameters:
// Token - String - Viber Token - token // Token - String - Viber Token - token
// UserIDs - String,Number,Array of String,Number - Viber User(s) ID - users // UserIDs - String,Number,Array of String,Number - Viber User(s) ID - users
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetOnlineUsers(Val Token, Val UserIDs) Export Function GetOnlineUsers(Val Token, Val UserIDs) Export
URL = "https://chatapi.viber.com/pa/get_online"; URL = "https://chatapi.viber.com/pa/get_online";
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters); OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response; Return Response;
EndFunction EndFunction
@ -129,14 +129,14 @@ EndFunction
// Send text message // Send text message
// Sends a text message to a chat or channel // Sends a text message to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Text - String - Message text - text // Text - String - Message text - text
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// Keyboard - Structure Of String - See CreateKeyboardFromArrayButton - keyboard // Keyboard - Structure Of String - See CreateKeyboardFromArrayButton - keyboard
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendTextMessage(Val Token Function SendTextMessage(Val Token
@ -144,40 +144,40 @@ Function SendTextMessage(Val Token
, Val UserID , Val UserID
, Val SendingToChannel , Val SendingToChannel
, Val Keyboard = "") Export , Val Keyboard = "") Export
Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard); Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard);
EndFunction EndFunction
// Send image // Send image
// Sends an image to a chat or channel // Sends an image to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Image URL - picture // URL - String - Image URL - picture
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - boolean - Sending to channel or bot chat - ischannel // SendingToChannel - boolean - Sending to channel or bot chat - ischannel
// Description - String - Image annotation - description // Description - String - Image annotation - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export
Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description); Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description);
EndFunction EndFunction
// SendFile // SendFile
// Sends a file (document) to a chat or channel // Sends a file (document) to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - File URL - file // URL - String - File URL - file
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// Extension - String - File extension - ext // Extension - String - File extension - ext
// Size - Number - File size. If not filled in > determined automatically by downloading the file - size // Size - Number - File size. If not filled in > determined automatically by downloading the file - size
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendFile(Val Token Function SendFile(Val Token
@ -186,36 +186,36 @@ Function SendFile(Val Token
, Val SendingToChannel , Val SendingToChannel
, Val Extension , Val Extension
, Val Size = "") Export , Val Size = "") Export
If Not ValueIsFilled(Size) Then If Not ValueIsFilled(Size) Then
Response = OPI_Tools.Get(URL); Response = OPI_Tools.Get(URL);
Size = Response.Size(); Size = Response.Size();
EndIf; EndIf;
String_ = "String"; String_ = "String";
Extension = StrReplace(Extension, ".", ""); Extension = StrReplace(Extension, ".", "");
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("URL" , URL , String_, Parameters); OPI_Tools.AddField("URL" , URL , String_, Parameters);
OPI_Tools.AddField("Size" , Size , String_, Parameters); OPI_Tools.AddField("Size" , Size , String_, Parameters);
OPI_Tools.AddField("Extension", Extension, String_, Parameters); OPI_Tools.AddField("Extension", Extension, String_, Parameters);
Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send contact // Send contact
// Sends a contact with a phone number to a chat or channel // Sends a contact with a phone number to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ContactName - String - Contact name - name // ContactName - String - Contact name - name
// PhoneNumber - String - Phone number - phone // PhoneNumber - String - Phone number - phone
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendContact(Val Token Function SendContact(Val Token
@ -223,91 +223,91 @@ Function SendContact(Val Token
, Val PhoneNumber , Val PhoneNumber
, Val UserID , Val UserID
, Val SendingToChannel) Export , Val SendingToChannel) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , ContactName , "String", Parameters); OPI_Tools.AddField("name" , ContactName , "String", Parameters);
OPI_Tools.AddField("phone_number", PhoneNumber, "String", Parameters); OPI_Tools.AddField("phone_number", PhoneNumber , "String", Parameters);
Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send location // Send location
// Sends geographic coordinates to a chat or channel // Sends geographic coordinates to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Latitude - String, Number - Geographic latitude - lat // Latitude - String, Number - Geographic latitude - lat
// Longitude - String, Number - Geographic longitude - long // Longitude - String, Number - Geographic longitude - long
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("lat", Latitude , "String", Parameters); OPI_Tools.AddField("lat", Latitude , "String", Parameters);
OPI_Tools.AddField("lon", Longitude, "String", Parameters); OPI_Tools.AddField("lon", Longitude, "String", Parameters);
Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send link // Send link
// Sends a URL with a preview to a chat or channel // Sends a URL with a preview to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - SentLink - url // URL - String - SentLink - url
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export
Return SendMessage(Token, "url", UserID, SendingToChannel, URL); Return SendMessage(Token, "url", UserID, SendingToChannel, URL);
EndFunction EndFunction
// Create a keyboard from an array of buttons // Create a keyboard from an array of buttons
// Returns a keyboard structure for messages // Returns a keyboard structure for messages
// //
// Parameters: // Parameters:
// ButtonArray - Array of String - Array of buttons - buttons // ButtonArray - Array of String - Array of buttons - buttons
// ButtonColor - String - HEX color of buttons with # at the beginning - color // ButtonColor - String - HEX color of buttons with # at the beginning - color
// //
// Returns: // Returns:
// Structure - Create a keyboard from an array of buttons: // Structure - Create a keyboard from an array of buttons:
// * Buttons - Array of Structure - Array of formed buttons // * Buttons - Array of Structure - Array of formed buttons
// * Type - String - KeyboardType // * Type - String - KeyboardType
Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export
OPI_TypeConversion.GetLine(ButtonColor); OPI_TypeConversion.GetLine(ButtonColor);
OPI_TypeConversion.GetCollection(ButtonArray); OPI_TypeConversion.GetCollection(ButtonArray);
ArrayOfButtonStructures = New Array; ArrayOfButtonStructures = New Array;
KeyboardStructure = New Structure; KeyboardStructure = New Structure;
For Each ButtonText In ButtonArray Do For Each ButtonText In ButtonArray Do
ButtonStructure = New Structure; ButtonStructure = New Structure;
ButtonStructure.Insert("ActionType", "reply"); ButtonStructure.Insert("ActionType", "reply");
ButtonStructure.Insert("ActionBody", ButtonText); ButtonStructure.Insert("ActionBody", ButtonText);
ButtonStructure.Insert("Text" , ButtonText); ButtonStructure.Insert("Text" , ButtonText);
ButtonStructure.Insert("BgColor" , ButtonColor); ButtonStructure.Insert("BgColor" , ButtonColor);
ButtonStructure.Insert("Coloumns" , 3); ButtonStructure.Insert("Coloumns" , 3);
ArrayOfButtonStructures.Add(ButtonStructure); ArrayOfButtonStructures.Add(ButtonStructure);
EndDo; EndDo;
KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures); KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures);
KeyboardStructure.Insert("Type" , "keyboard"); KeyboardStructure.Insert("Type" , "keyboard");
Return KeyboardStructure; Return KeyboardStructure;
EndFunction EndFunction
#EndRegion #EndRegion
@ -317,7 +317,7 @@ EndFunction
#Region Private #Region Private
// Send message. // Send message.
// //
// Parameters: // Parameters:
// Token - String - Token // Token - String - Token
// Type - String - TypeOfSentMessage // Type - String - TypeOfSentMessage
@ -328,8 +328,8 @@ EndFunction
// * Size - Number, String - File size in case of sending // * Size - Number, String - File size in case of sending
// * Extension - String - File extension in case of sending // * Extension - String - File extension in case of sending
// Text - String - Message text // Text - String - Message text
// Keyboard - Structure Of String - Keyboard, if needed, see CreateKeyboardFromArrayButton // Keyboard - Structure Of String - Keyboard, if needed, see CreateKeyboardFromArrayButton
// //
// Returns: // Returns:
// Arbitrary, HTTPResponse - Send message // Arbitrary, HTTPResponse - Send message
Function SendMessage(Val Token Function SendMessage(Val Token
@ -339,81 +339,81 @@ Function SendMessage(Val Token
, Val Value = "" , Val Value = ""
, Val Text = "" , Val Text = ""
, Val Keyboard = "") , Val Keyboard = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Type); OPI_TypeConversion.GetLine(Type);
OPI_TypeConversion.GetLine(UserID); OPI_TypeConversion.GetLine(UserID);
OPI_TypeConversion.GetLine(Text); OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetBoolean(IsChannel); OPI_TypeConversion.GetBoolean(IsChannel);
OPI_TypeConversion.GetCollection(Keyboard); OPI_TypeConversion.GetCollection(Keyboard);
ParametersStructure = ReturnStandardParameters(); ParametersStructure = ReturnStandardParameters();
ParametersStructure.Insert("type", Type); ParametersStructure.Insert("type", Type);
If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then
ParametersStructure.Insert("text", Text); ParametersStructure.Insert("text", Text);
EndIf; EndIf;
If TypeOf(Keyboard) = Type("Structure") Then If TypeOf(Keyboard) = Type("Structure") Then
ParametersStructure.Insert("keyboard", Keyboard); ParametersStructure.Insert("keyboard", Keyboard);
EndIf; EndIf;
If ValueIsFilled(Value) Then If ValueIsFilled(Value) Then
If Type = "file" Then If Type = "file" Then
ParametersStructure.Insert("media" , Value["URL"]); ParametersStructure.Insert("media" , Value["URL"]);
ParametersStructure.Insert("size" , Value["Size"]); ParametersStructure.Insert("size" , Value["Size"]);
ParametersStructure.Insert("file_name", "File." + Value["Extension"]); ParametersStructure.Insert("file_name", "File." + Value["Extension"]);
ElsIf Type = "contact" Then ElsIf Type = "contact" Then
ParametersStructure.Insert("contact" , Value); ParametersStructure.Insert("contact" , Value);
ElsIf Type = "location" Then ElsIf Type = "location" Then
ParametersStructure.Insert("location" , Value); ParametersStructure.Insert("location" , Value);
Else Else
ParametersStructure.Insert("media" , Value); ParametersStructure.Insert("media" , Value);
EndIf; EndIf;
EndIf; EndIf;
If IsChannel Then If IsChannel Then
ParametersStructure.Insert("from", UserID); ParametersStructure.Insert("from" , UserID);
URL = "https://chatapi.viber.com/pa/post"; URL = "https://chatapi.viber.com/pa/post";
Else Else
ParametersStructure.Insert("receiver", UserID); ParametersStructure.Insert("receiver", UserID);
URL = "https://chatapi.viber.com/pa/send_message"; URL = "https://chatapi.viber.com/pa/send_message";
EndIf; EndIf;
Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token));
Try Try
Return OPI_Tools.JsonToStructure(Response.ПолучитьТелоКакДвоичныеДанные()); Return OPI_Tools.JsonToStructure(Response.ПолучитьТелоКакДвоичныеДанные());
Except Except
Return Response; Return Response;
EndTry; EndTry;
EndFunction EndFunction
Function ReturnStandardParameters() Function ReturnStandardParameters()
SenderStructure = New Structure; SenderStructure = New Structure;
SenderStructure.Insert("name" , "Bot"); SenderStructure.Insert("name" , "Bot");
SenderStructure.Insert("avatar", ""); SenderStructure.Insert("avatar", "");
ParametersStructure = New Structure; ParametersStructure = New Structure;
ParametersStructure.Insert("sender", SenderStructure); ParametersStructure.Insert("sender" , SenderStructure);
ParametersStructure.Insert("min_api_version", 1); ParametersStructure.Insert("min_api_version", 1);
Return ParametersStructure; Return ParametersStructure;
EndFunction EndFunction
Function TokenInHeaders(Val Token) Function TokenInHeaders(Val Token)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
HeadersStructure = New Map; HeadersStructure = New Map;
HeadersStructure.Insert("X-Viber-Auth-Token", Token); HeadersStructure.Insert("X-Viber-Auth-Token", Token);
Return HeadersStructure; Return HeadersStructure;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -37,7 +37,7 @@
//@skip-check wrong-string-literal-content //@skip-check wrong-string-literal-content
// Uncomment if OneScript is executed // Uncomment if OneScript is executed
#Use "../../tools" #Use "../../tools"
#Region Public #Region Public
@ -45,217 +45,217 @@
// Get disk information // Get disk information
// Gets information about the current disk // Gets information about the current disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDiskInformation(Val Token) Export Function GetDiskInformation(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create folder // Create folder
// Creates a directory on the disk // Creates a directory on the disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the created folder - path // Path - String - Path to the created folder - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CreateFolder(Val Token, Val Path) Export Function CreateFolder(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources"; URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False); Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get object // Get object
// Gets information about a disk object at the specified path // Gets information about a disk object at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to folder or file - path // Path - String - Path to folder or file - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetObject(Val Token, Val Path) Export Function GetObject(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete object // Delete object
// Deletes an object at the specified path // Deletes an object at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the folder or file to be deleted - path // Path - String - Path to the folder or file to be deleted - path
// ToCart - Boolean - To cart - can // ToCart - Boolean - To cart - can
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function DeleteObject(Val Token, Val Path, Val ToCart = True) Export Function DeleteObject(Val Token, Val Path, Val ToCart = True) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(ToCart); OPI_TypeConversion.GetBoolean(ToCart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("permanently", Not ToCart); Parameters.Insert("permanently", Not ToCart);
Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers); Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create object copy // Create object copy
// Creates a copy of the object at the specified path and path to the original // Creates a copy of the object at the specified path and path to the original
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Original - String - Path to the original file or directory - from // Original - String - Path to the original file or directory - from
// Path - String - Destination path for the copy - to // Path - String - Destination path for the copy - to
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CreateObjectCopy(Val Token, Val Original, Val Path, Val Overwrite = False) Export Function CreateObjectCopy(Val Token, Val Original, Val Path, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original); OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy"; URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("from" , Original); Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get download link // Get download link
// Gets a download link for the file // Gets a download link for the file
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the file for downloading - path // Path - String - Path to the file for downloading - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDownloadLink(Val Token, Val Path) Export Function GetDownloadLink(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Download file // Download file
// Downloads a file at the specified path // Downloads a file at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the file for downloading - path // Path - String - Path to the file for downloading - path
// SavePath - String - File save path - out // SavePath - String - File save path - out
// //
// Returns: // Returns:
// BinaryData,String - Binary data or file path when SavePath parameter is specified // BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Path, Val SavePath = "") Export Function DownloadFile(Val Token, Val Path, Val SavePath = "") Export
OPI_TypeConversion.GetLine(SavePath); OPI_TypeConversion.GetLine(SavePath);
Response = GetDownloadLink(Token, Path); Response = GetDownloadLink(Token, Path);
URL = Response["href"]; URL = Response["href"];
If Not ValueIsFilled(URL) Then If Not ValueIsFilled(URL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(URL, , , SavePath); Response = OPI_Tools.Get(URL, , , SavePath);
Return Response; Return Response;
EndFunction EndFunction
// Get list of files // Get list of files
// Gets a list of files with or without filtering by type // Gets a list of files with or without filtering by type
// List of available types: audio, backup, book, compressed, data, development, // List of available types: audio, backup, book, compressed, data, development,
// diskimage, document, encoded, executable, flash, font, // diskimage, document, encoded, executable, flash, font,
// mage, settings, spreadsheet, text, unknown, video, web // mage, settings, spreadsheet, text, unknown, video, web
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Count - Number, String - Number of returned objects - amount // Count - Number, String - Number of returned objects - amount
// OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset
// FilterByType - String - Filter by file type - type // FilterByType - String - Filter by file type - type
// SortByDate - Boolean - True > sort by date, False > alphabetically - datesort // SortByDate - Boolean - True > sort by date, False > alphabetically - datesort
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetFilesList(Val Token Function GetFilesList(Val Token
@ -263,50 +263,50 @@ Function GetFilesList(Val Token
, Val OffsetFromStart = 0 , Val OffsetFromStart = 0
, Val FilterByType = "" , Val FilterByType = ""
, Val SortByDate = False) Export , Val SortByDate = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(FilterByType); OPI_TypeConversion.GetLine(FilterByType);
OPI_TypeConversion.GetBoolean(SortByDate); OPI_TypeConversion.GetBoolean(SortByDate);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Count)); Parameters.Insert("limit", OPI_Tools.NumberToString(Count));
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart)); Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf; EndIf;
If ValueIsFilled(FilterByType) Then If ValueIsFilled(FilterByType) Then
Parameters.Insert("media_type", FilterByType); Parameters.Insert("media_type", FilterByType);
EndIf; EndIf;
If SortByDate Then If SortByDate Then
Destination = "last-uploaded"; Destination = "last-uploaded";
Else Else
Destination = "files"; Destination = "files";
EndIf; EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Move object // Move object
// Moves the object to the specified path and path to the original // Moves the object to the specified path and path to the original
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Original - String - Path to the original file or folder - from // Original - String - Path to the original file or folder - from
// Path - String - Destination path for moving - to // Path - String - Destination path for moving - to
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Export Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Export
@ -315,97 +315,97 @@ Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Ex
OPI_TypeConversion.GetLine(Original); OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("from" , Original); Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Upload file // Upload file
// Uploads a file to disk at the specified path // Uploads a file to disk at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path for saving the file to disk - path // Path - String - Path for saving the file to disk - path
// File - String, BinaryData - File for upload - file // File - String, BinaryData - File for upload - file
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function UploadFile(Val Token, Val Path, Val File, Val Overwrite = False) Export Function UploadFile(Val Token, Val Path, Val File, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Href = "href"; Href = "href";
File = New Structure("file", File); File = New Structure("file", File);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers);
URL = Response[Href]; URL = Response[Href];
If Not ValueIsFilled(URL) Then If Not ValueIsFilled(URL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers); Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers);
Return Response; Return Response;
EndFunction EndFunction
// Upload file by URL // Upload file by URL
// Downloads a file to disk from the specified URL // Downloads a file to disk from the specified URL
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to place the downloaded file - path // Path - String - Path to place the downloaded file - path
// Address - String - File URL - url // Address - String - File URL - url
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function UploadFileByURL(Val Token, Val Path, Val Address) Export Function UploadFileByURL(Val Token, Val Path, Val Address) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Address); OPI_TypeConversion.GetLine(Address);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload"; URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLencoding)); Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLencoding));
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -414,186 +414,186 @@ EndFunction
// Publish object // Publish object
// Publishes the disk object for public access // Publishes the disk object for public access
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the object to be published - path // Path - String - Path to the object to be published - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function PublishObject(Val Token, Val Path) Export Function PublishObject(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, True); Return TogglePublicAccess(Token, Path, True);
EndFunction EndFunction
// Unpublish object // Unpublish object
// Unpublishes a previously published object // Unpublishes a previously published object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the previously published object - path // Path - String - Path to the previously published object - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CancelObjectPublication(Val Token, Val Path) Export Function CancelObjectPublication(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, False); Return TogglePublicAccess(Token, Path, False);
EndFunction EndFunction
// Get list of published objects. // Get list of published objects.
// Gets a list of published objects // Gets a list of published objects
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Count - Number - Number of returned objects - amount // Count - Number - Number of returned objects - amount
// OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetPublishedObjectsList(Val Token, Val Count = 0, Val OffsetFromStart = 0) Export Function GetPublishedObjectsList(Val Token, Val Count = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", Count); Parameters.Insert("limit", Count);
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OffsetFromStart); Parameters.Insert("offset", OffsetFromStart);
EndIf; EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get public object // Get public object
// Gets information about the published object by its URL // Gets information about the published object by its URL
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// Count - Number - Number of returned nested objects (for catalog) - amount // Count - Number - Number of returned nested objects (for catalog) - amount
// OffsetFromStart - Number - Offset for getting nested objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting nested objects not from the beginning of the list - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetPublicObject(Val Token, Val URL, Val Count = 0, Val OffsetFromStart = 0) Export Function GetPublicObject(Val Token, Val URL, Val Count = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Count)); Parameters.Insert("limit", OPI_Tools.NumberToString(Count));
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart)); Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf; EndIf;
Parameters.Insert("public_key", URL); Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get download link for public object // Get download link for public object
// Gets a direct link to download the public object // Gets a direct link to download the public object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// Path - String - Path inside the object - path // Path - String - Path inside the object - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDownloadLinkForPublicObject(Val Token, Val URL, Val Path = "") Export Function GetDownloadLinkForPublicObject(Val Token, Val URL, Val Path = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Path) Then If ValueIsFilled(Path) Then
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
EndIf; EndIf;
Parameters.Insert("public_key", URL); Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Save public object to disk // Save public object to disk
// Saves the public object to your disk // Saves the public object to your disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// From - String - Path within public catalog (folders only) - from // From - String - Path within public catalog (folders only) - from
// Target - String - File save path - to // Target - String - File save path - to
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function SavePublicObjectToDisk(Val Token, Val URL, From = "", Target = "") Export Function SavePublicObjectToDisk(Val Token, Val URL, From = "", Target = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(From); OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(Target); OPI_TypeConversion.GetLine(Target);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk"; Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("public_key", EncodeString(URL, StringEncodingMethod.URLencoding)); Parameters.Insert("public_key", EncodeString(URL, StringEncodingMethod.URLencoding));
If ValueIsFilled(From) Then If ValueIsFilled(From) Then
Parameters.Insert("path", From); Parameters.Insert("path", From);
EndIf; EndIf;
If ValueIsFilled(Target) Then If ValueIsFilled(Target) Then
Parameters.Insert("save_path", Target); Parameters.Insert("save_path", Target);
EndIf; EndIf;
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(Address + Parameters, , Headers, False); Response = OPI_Tools.Post(Address + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
#EndRegion #EndRegion
@ -601,42 +601,42 @@ EndFunction
#Region Private #Region Private
Function AuthorizationHeader(Val Token) Function AuthorizationHeader(Val Token)
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "OAuth " + Token); Headers.Insert("Authorization", "OAuth " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
Function TogglePublicAccess(Val Token, Val Path, Val PublicAccess) Function TogglePublicAccess(Val Token, Val Path, Val PublicAccess)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(PublicAccess); OPI_TypeConversion.GetBoolean(PublicAccess);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Destination = ?(PublicAccess, "publish", "unpublish"); Destination = ?(PublicAccess, "publish", "unpublish");
Href = "href"; Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination; URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False); Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -41,77 +41,77 @@
// Get confirmation code // Get confirmation code
// Gets the confirmation code and the address of the page where it needs to be entered // Gets the confirmation code and the address of the page where it needs to be entered
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetConfirmationCode(Val ClientId) Export Function GetConfirmationCode(Val ClientId) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
Parameters = New Structure("client_id", ClientId); Parameters = New Structure("client_id", ClientId);
Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Convert code to token // Convert code to token
// Converts the code to a token after entering the code when executing GetConfirmationCode // Converts the code to a token after entering the code when executing GetConfirmationCode
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// DeviceCode - String - device_code from GetConfirmationCode() - device // DeviceCode - String - device_code from GetConfirmationCode() - device
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(DeviceCode); OPI_TypeConversion.GetLine(DeviceCode);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("grant_type" , "device_code"); Parameters.Insert("grant_type" , "device_code");
Parameters.Insert("code" , DeviceCode); Parameters.Insert("code" , DeviceCode);
Parameters.Insert("client_id" , ClientId); Parameters.Insert("client_id" , ClientId);
Parameters.Insert("client_secret" , ClientSecret); Parameters.Insert("client_secret" , ClientSecret);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates token by Refresh token // Updates token by Refresh token
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// RefreshToken - String - Refresh token - refresh // RefreshToken - String - Refresh token - refresh
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken); OPI_TypeConversion.GetLine(RefreshToken);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("grant_type" , "refresh_token"); Parameters.Insert("grant_type" , "refresh_token");
Parameters.Insert("refresh_token" , RefreshToken); Parameters.Insert("refresh_token" , RefreshToken);
Parameters.Insert("client_id" , ClientId); Parameters.Insert("client_id" , ClientId);
Parameters.Insert("client_secret" , ClientSecret); Parameters.Insert("client_secret" , ClientSecret);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -46,404 +46,404 @@
#Region Internal #Region Internal
Function GetTestingSectionMapping() Export Function GetTestingSectionMapping() Export
StandardDependencies = "[Decode, Build]"; StandardDependencies = "[Decode, Build]";
GoogleDependencies = "Testing-GoogleWorkspace"; GoogleDependencies = "Testing-GoogleWorkspace";
Sections = New Structure; Sections = New Structure;
Sections.Insert("Telegram" , StandardDependencies); Sections.Insert("Telegram" , StandardDependencies);
Sections.Insert("VK" , StandardDependencies); Sections.Insert("VK" , StandardDependencies);
Sections.Insert("Viber" , StandardDependencies); Sections.Insert("Viber" , StandardDependencies);
Sections.Insert("Twitter" , StandardDependencies); Sections.Insert("Twitter" , StandardDependencies);
Sections.Insert("YandexDisk" , StandardDependencies); Sections.Insert("YandexDisk" , StandardDependencies);
Sections.Insert("GoogleWorkspace", StandardDependencies); Sections.Insert("GoogleWorkspace", StandardDependencies);
Sections.Insert("GoogleCalendar" , GoogleDependencies); Sections.Insert("GoogleCalendar" , GoogleDependencies);
Sections.Insert("GoogleDrive" , GoogleDependencies); Sections.Insert("GoogleDrive" , GoogleDependencies);
Sections.Insert("GoogleSheets" , GoogleDependencies); Sections.Insert("GoogleSheets" , GoogleDependencies);
Sections.Insert("Notion" , StandardDependencies); Sections.Insert("Notion" , StandardDependencies);
Sections.Insert("Slack" , StandardDependencies); Sections.Insert("Slack" , StandardDependencies);
Sections.Insert("Airtable" , StandardDependencies); Sections.Insert("Airtable" , StandardDependencies);
Sections.Insert("Dropbox" , StandardDependencies); Sections.Insert("Dropbox" , StandardDependencies);
Sections.Insert("Bitrix24" , StandardDependencies); Sections.Insert("Bitrix24" , StandardDependencies);
Return Sections; Return Sections;
EndFunction EndFunction
Function GetTestTable() Export Function GetTestTable() Export
Telegram = "Telegram"; Telegram = "Telegram";
VKontakte = "VK"; VKontakte = "VK";
YDisk = "YandexDisk"; YDisk = "YandexDisk";
Calendar = "GoogleCalendar"; Calendar = "GoogleCalendar";
Twitter = "Twitter"; Twitter = "Twitter";
Viber = "Viber"; Viber = "Viber";
Drive = "GoogleDrive"; Drive = "GoogleDrive";
VSpace = "GoogleWorkspace"; VSpace = "GoogleWorkspace";
Notion = "Notion"; Notion = "Notion";
Slack = "Slack"; Slack = "Slack";
Tables = "GoogleSheets"; Tables = "GoogleSheets";
AirT = "Airtable"; AirT = "Airtable";
Dropbox = "Dropbox"; Dropbox = "Dropbox";
Bitrix = "Bitrix24"; Bitrix = "Bitrix24";
TestTable = New ValueTable; TestTable = New ValueTable;
TestTable.Columns.Add("Method"); TestTable.Columns.Add("Method");
TestTable.Columns.Add("Synonym"); TestTable.Columns.Add("Synonym");
TestTable.Columns.Add("Section"); TestTable.Columns.Add("Section");
NewTest(TestTable, "TelegramAPI_GetBotInfo" , "Get bot information" , Telegram); NewTest(TestTable, "TelegramAPI_GetBotInfo" , "Get bot information" , Telegram);
NewTest(TestTable, "TelegramAPI_GetUpdates" , "Get updates" , Telegram); NewTest(TestTable, "TelegramAPI_GetUpdates" , "Get updates" , Telegram);
NewTest(TestTable, "TelegramAPI_SetWebhook" , "Set Webhook" , Telegram); NewTest(TestTable, "TelegramAPI_SetWebhook" , "Set Webhook" , Telegram);
NewTest(TestTable, "TelegramAPI_SendTextMessage" , "Send text message" , Telegram); NewTest(TestTable, "TelegramAPI_SendTextMessage" , "Send text message" , Telegram);
NewTest(TestTable, "TelegramAPI_SendImage" , "Send image" , Telegram); NewTest(TestTable, "TelegramAPI_SendImage" , "Send image" , Telegram);
NewTest(TestTable, "TelegramAPI_SendVideo" , "Send video" , Telegram); NewTest(TestTable, "TelegramAPI_SendVideo" , "Send video" , Telegram);
NewTest(TestTable, "TelegramAPI_SendAudio" , "Send audio" , Telegram); NewTest(TestTable, "TelegramAPI_SendAudio" , "Send audio" , Telegram);
NewTest(TestTable, "TelegramAPI_SendDocument" , "Send document" , Telegram); NewTest(TestTable, "TelegramAPI_SendDocument" , "Send document" , Telegram);
NewTest(TestTable, "TelegramAPI_SendGIF" , "Send GIF" , Telegram); NewTest(TestTable, "TelegramAPI_SendGIF" , "Send GIF" , Telegram);
NewTest(TestTable, "TelegramAPI_SendMediaGroup" , "Send mediagroup" , Telegram); NewTest(TestTable, "TelegramAPI_SendMediaGroup" , "Send mediagroup" , Telegram);
NewTest(TestTable, "TelegramAPI_SendLocation" , "Send location" , Telegram); NewTest(TestTable, "TelegramAPI_SendLocation" , "Send location" , Telegram);
NewTest(TestTable, "TelegramAPI_SendContact" , "Send contact" , Telegram); NewTest(TestTable, "TelegramAPI_SendContact" , "Send contact" , Telegram);
NewTest(TestTable, "TelegramAPI_SendPoll" , "Send poll" , Telegram); NewTest(TestTable, "TelegramAPI_SendPoll" , "Send poll" , Telegram);
NewTest(TestTable, "TelegramAPI_ForwardMessage" , "Forward message" , Telegram); NewTest(TestTable, "TelegramAPI_ForwardMessage" , "Forward message" , Telegram);
NewTest(TestTable, "TelegramAPI_BanUnban" , "Ban/Unban" , Telegram); NewTest(TestTable, "TelegramAPI_BanUnban" , "Ban/Unban" , Telegram);
NewTest(TestTable, "TelegramAPI_CreateInvitationLink" , "Create invitation link" , Telegram); NewTest(TestTable, "TelegramAPI_CreateInvitationLink" , "Create invitation link" , Telegram);
NewTest(TestTable, "TelegramAPI_PinUnpinMessage" , "Pin/Unpin message" , Telegram); NewTest(TestTable, "TelegramAPI_PinUnpinMessage" , "Pin/Unpin message" , Telegram);
NewTest(TestTable, "TelegramAPI_GetMemberCount" , "Get participant count" , Telegram); NewTest(TestTable, "TelegramAPI_GetMemberCount" , "Get participant count" , Telegram);
NewTest(TestTable, "TelegramAPI_GetForumAvatarsList", "Get forum avatars list", Telegram); NewTest(TestTable, "TelegramAPI_GetForumAvatarsList" , "Get forum avatars list" , Telegram);
NewTest(TestTable, "TelegramAPI_CreateDeleteForumTopic" , "Create/Delete forum topic" , Telegram); NewTest(TestTable, "TelegramAPI_CreateDeleteForumTopic" , "Create/Delete forum topic" , Telegram);
NewTest(TestTable, "TelegramAPI_ChangeMainTopicName" , "Change main topic name" , Telegram); NewTest(TestTable, "TelegramAPI_ChangeMainTopicName" , "Change main topic name" , Telegram);
NewTest(TestTable, "TelegramAPI_HideShowMainTopic" , "Hide/Show main topic" , Telegram); NewTest(TestTable, "TelegramAPI_HideShowMainTopic" , "Hide/Show main topic" , Telegram);
NewTest(TestTable, "VKAPI_CreateTokenLink" , "Create token retrieval link", VKontakte); NewTest(TestTable, "VKAPI_CreateTokenLink" , "Create token retrieval link" , VKontakte);
NewTest(TestTable, "VKAPI_CreateDeletePost" , "Create/Delete post" , VKontakte); NewTest(TestTable, "VKAPI_CreateDeletePost" , "Create/Delete post" , VKontakte);
NewTest(TestTable, "VKAPI_CreateCompositePost" , "Create/Delete composite post" , VKontakte); NewTest(TestTable, "VKAPI_CreateCompositePost" , "Create/Delete composite post" , VKontakte);
NewTest(TestTable, "VKAPI_CreatePoll" , "Create poll" , VKontakte); NewTest(TestTable, "VKAPI_CreatePoll" , "Create poll" , VKontakte);
NewTest(TestTable, "VKAPI_SaveDeleteImage" , "Add/Delete image" , VKontakte); NewTest(TestTable, "VKAPI_SaveDeleteImage" , "Add/Delete image" , VKontakte);
NewTest(TestTable, "VKAPI_CreateStory" , "Create story" , VKontakte); NewTest(TestTable, "VKAPI_CreateStory" , "Create story" , VKontakte);
NewTest(TestTable, "VKAPI_DiscussionMethods" , "Actions with discussions" , VKontakte); NewTest(TestTable, "VKAPI_DiscussionMethods" , "Actions with discussions" , VKontakte);
NewTest(TestTable, "VKAPI_LikeRepostComment" , "Like/Repost/Comment" , VKontakte); NewTest(TestTable, "VKAPI_LikeRepostComment" , "Like/Repost/Comment" , VKontakte);
NewTest(TestTable, "VKAPI_GetStatistics" , "Get statistics" , VKontakte); NewTest(TestTable, "VKAPI_GetStatistics" , "Get statistics" , VKontakte);
NewTest(TestTable, "VKAPI_GetPostStatistics" , "Get post statistics" , VKontakte); NewTest(TestTable, "VKAPI_GetPostStatistics" , "Get post statistics" , VKontakte);
NewTest(TestTable, "VKAPI_CreateAdCampaign" , "Create advertising campaign" , VKontakte); NewTest(TestTable, "VKAPI_CreateAdCampaign" , "Create advertising campaign" , VKontakte);
NewTest(TestTable, "VKAPI_SendMessage" , "Send message" , VKontakte); NewTest(TestTable, "VKAPI_SendMessage" , "Send message" , VKontakte);
NewTest(TestTable, "VKAPI_GetProductCategories" , "Get product categories" , VKontakte); NewTest(TestTable, "VKAPI_GetProductCategories" , "Get product categories" , VKontakte);
NewTest(TestTable, "VKAPI_CreateProductSelection" , "Create product and selection" , VKontakte); NewTest(TestTable, "VKAPI_CreateProductSelection" , "Create product and selection" , VKontakte);
NewTest(TestTable, "VKAPI_CreateProductWithProperties" , "Create product with properties" , VKontakte); NewTest(TestTable, "VKAPI_CreateProductWithProperties" , "Create product with properties" , VKontakte);
NewTest(TestTable, "VKAPI_GetProductList" , "Get product list" , VKontakte); NewTest(TestTable, "VKAPI_GetProductList" , "Get product list" , VKontakte);
NewTest(TestTable, "VKAPI_GetSelectionList" , "Get selection list" , VKontakte); NewTest(TestTable, "VKAPI_GetSelectionList" , "Get selection list" , VKontakte);
NewTest(TestTable, "VKAPI_GetPropertyList" , "Get property list" , VKontakte); NewTest(TestTable, "VKAPI_GetPropertyList" , "Get property list" , VKontakte);
NewTest(TestTable, "VKAPI_GetOrderList" , "Get order list" , VKontakte); NewTest(TestTable, "VKAPI_GetOrderList" , "Get order list" , VKontakte);
NewTest(TestTable, "VKAPI_UploadVideo" , "Upload video" , VKontakte); NewTest(TestTable, "VKAPI_UploadVideo" , "Upload video" , VKontakte);
NewTest(TestTable, "YDisk_GetDiskInfo" , "Get disk information" , YDisk); NewTest(TestTable, "YDisk_GetDiskInfo" , "Get disk information" , YDisk);
NewTest(TestTable, "YDisk_CreateFolder" , "Create folder" , YDisk); NewTest(TestTable, "YDisk_CreateFolder" , "Create folder" , YDisk);
NewTest(TestTable, "YDisk_UploadByUrlAndGetObject", "Upload by URL and get" , YDisk); NewTest(TestTable, "YDisk_UploadByUrlAndGetObject", "Upload by URL and get" , YDisk);
NewTest(TestTable, "YDisk_UploadDeleteFile" , "Upload/Delete file" , YDisk); NewTest(TestTable, "YDisk_UploadDeleteFile" , "Upload/Delete file" , YDisk);
NewTest(TestTable, "YDisk_CreateObjectCopy" , "Create object copy" , YDisk); NewTest(TestTable, "YDisk_CreateObjectCopy" , "Create object copy" , YDisk);
NewTest(TestTable, "YDisk_GetDownloadLink" , "Get download link" , YDisk); NewTest(TestTable, "YDisk_GetDownloadLink" , "Get download link" , YDisk);
NewTest(TestTable, "YDisk_GetFileList" , "Get list of files" , YDisk); NewTest(TestTable, "YDisk_GetFileList" , "Get list of files" , YDisk);
NewTest(TestTable, "YDisk_MoveObject" , "Move object" , YDisk); NewTest(TestTable, "YDisk_MoveObject" , "Move object" , YDisk);
NewTest(TestTable, "YDisk_PublicObjectActions" , "Actions with public objects", YDisk); NewTest(TestTable, "YDisk_PublicObjectActions" , "Actions with public objects", YDisk);
NewTest(TestTable, "YDisk_GetPublishedList" , "Get published list" , YDisk); NewTest(TestTable, "YDisk_GetPublishedList" , "Get published list" , YDisk);
NewTest(TestTable, "GV_GetAuthorizationLink" , "Get authorization link" , VSpace); NewTest(TestTable, "GV_GetAuthorizationLink" , "Get authorization link" , VSpace);
NewTest(TestTable, "GV_GetToken" , "Get token" , VSpace); NewTest(TestTable, "GV_GetToken" , "Get token" , VSpace);
NewTest(TestTable, "GV_UpdateToken" , "Refresh token" , VSpace); NewTest(TestTable, "GV_UpdateToken" , "Refresh token" , VSpace);
NewTest(TestTable, "GC_GetCalendarList" , "Get list of calendars" , Calendar); NewTest(TestTable, "GC_GetCalendarList" , "Get list of calendars" , Calendar);
NewTest(TestTable, "GC_CreateDeleteCalendar" , "Create/Delete calendar" , Calendar); NewTest(TestTable, "GC_CreateDeleteCalendar" , "Create/Delete calendar" , Calendar);
NewTest(TestTable, "GC_CreateDeleteEvent" , "Create/Delete event" , Calendar); NewTest(TestTable, "GC_CreateDeleteEvent" , "Create/Delete event" , Calendar);
NewTest(TestTable, "GC_GetEventList" , "Get list of events" , Calendar); NewTest(TestTable, "GC_GetEventList" , "Get list of events" , Calendar);
NewTest(TestTable, "GD_GetCatalogList" , "Get list of directories" , Drive); NewTest(TestTable, "GD_GetCatalogList" , "Get list of directories" , Drive);
NewTest(TestTable, "GD_UploadDeleteFile" , "Upload/Delete file" , Drive); NewTest(TestTable, "GD_UploadDeleteFile" , "Upload/Delete file" , Drive);
NewTest(TestTable, "GD_CreateDeleteComment" , "Create/Delete Comment" , Drive); NewTest(TestTable, "GD_CreateDeleteComment" , "Create/Delete Comment" , Drive);
NewTest(TestTable, "GD_CreateCatalog" , "Create/Delete catalog" , Drive); NewTest(TestTable, "GD_CreateCatalog" , "Create/Delete catalog" , Drive);
NewTest(TestTable, "GT_CreateTable" , "Create table" , Tables); NewTest(TestTable, "GT_CreateTable" , "Create table" , Tables);
NewTest(TestTable, "GT_GetTable" , "Get table" , Tables); NewTest(TestTable, "GT_GetTable" , "Get table" , Tables);
NewTest(TestTable, "GT_FillClearCells" , "Fill/Clear cells" , Tables); NewTest(TestTable, "GT_FillClearCells" , "Fill/Clear cells" , Tables);
NewTest(TestTable, "Twitter_GetAuthorizationLink" , "Get authorization link" , Twitter); NewTest(TestTable, "Twitter_GetAuthorizationLink" , "Get authorization link" , Twitter);
NewTest(TestTable, "Twitter_UpdateToken" , "Refresh token" , Twitter); NewTest(TestTable, "Twitter_UpdateToken" , "Refresh token" , Twitter);
NewTest(TestTable, "Twitter_CreateTextTweet" , "Text tweet" , Twitter); NewTest(TestTable, "Twitter_CreateTextTweet" , "Text tweet" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithImage" , "Tweet with image" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithImage" , "Tweet with image" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithVideo" , "Tweet with video" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithVideo" , "Tweet with video" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithGif" , "Tweet with gif" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithGif" , "Tweet with gif" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithPoll" , "Tweet with poll" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithPoll" , "Tweet with poll" , Twitter);
NewTest(TestTable, "Viber_GetChannelInfo" , "Get channel info" , Viber); NewTest(TestTable, "Viber_GetChannelInfo" , "Get channel info" , Viber);
NewTest(TestTable, "Viber_GetUserData" , "Get user data" , Viber); NewTest(TestTable, "Viber_GetUserData" , "Get user data" , Viber);
NewTest(TestTable, "Viber_GetOnlineUsers" , "Get online users" , Viber); NewTest(TestTable, "Viber_GetOnlineUsers" , "Get online users" , Viber);
NewTest(TestTable, "Viber_SendTextMessage" , "Send text message" , Viber); NewTest(TestTable, "Viber_SendTextMessage" , "Send text message" , Viber);
NewTest(TestTable, "Viber_SendImage" , "Send image" , Viber); NewTest(TestTable, "Viber_SendImage" , "Send image" , Viber);
NewTest(TestTable, "Viber_SendFile" , "SendFile" , Viber); NewTest(TestTable, "Viber_SendFile" , "SendFile" , Viber);
NewTest(TestTable, "Viber_SendContact" , "Send contact" , Viber); NewTest(TestTable, "Viber_SendContact" , "Send contact" , Viber);
NewTest(TestTable, "Viber_SendLocation" , "Send location" , Viber); NewTest(TestTable, "Viber_SendLocation" , "Send location" , Viber);
NewTest(TestTable, "Viber_SendLink" , "Send link" , Viber); NewTest(TestTable, "Viber_SendLink" , "Send link" , Viber);
NewTest(TestTable, "Notion_CreatePage" , "Create page" , Notion); NewTest(TestTable, "Notion_CreatePage" , "Create page" , Notion);
NewTest(TestTable, "Notion_CreateEditDatabase" , "Create/Edit database" , Notion); NewTest(TestTable, "Notion_CreateEditDatabase" , "Create/Edit database" , Notion);
NewTest(TestTable, "Notion_GetPageInfo" , "Get page info" , Notion); NewTest(TestTable, "Notion_GetPageInfo" , "Get page info" , Notion);
NewTest(TestTable, "Notion_GetDatabaseInfo" , "Get database info" , Notion); NewTest(TestTable, "Notion_GetDatabaseInfo" , "Get database info" , Notion);
NewTest(TestTable, "Notion_CreatePageInDatabase" , "Create page in database" , Notion); NewTest(TestTable, "Notion_CreatePageInDatabase" , "Create page in database" , Notion);
NewTest(TestTable, "Notion_EditPageProperties" , "Edit page properties" , Notion); NewTest(TestTable, "Notion_EditPageProperties" , "Edit page properties" , Notion);
NewTest(TestTable, "Notion_CreateDeleteBlock" , "Create/Delete block" , Notion); NewTest(TestTable, "Notion_CreateDeleteBlock" , "Create/Delete block" , Notion);
NewTest(TestTable, "Notion_GetUsers" , "Get users" , Notion); NewTest(TestTable, "Notion_GetUsers" , "Get users" , Notion);
NewTest(TestTable, "Notion_GetUserData" , "Get user data" , Notion); NewTest(TestTable, "Notion_GetUserData" , "Get user data" , Notion);
NewTest(TestTable, "Slack_GetBotInfo" , "Get bot information" , Slack); NewTest(TestTable, "Slack_GetBotInfo" , "Get bot information" , Slack);
NewTest(TestTable, "Slack_GetUserList" , "Get user list" , Slack); NewTest(TestTable, "Slack_GetUserList" , "Get user list" , Slack);
NewTest(TestTable, "Slack_GetRegionList" , "Get region list" , Slack); NewTest(TestTable, "Slack_GetRegionList" , "Get region list" , Slack);
NewTest(TestTable, "Slack_SendDeleteMessage" , "Send/Delete message" , Slack); NewTest(TestTable, "Slack_SendDeleteMessage" , "Send/Delete message" , Slack);
NewTest(TestTable, "Slack_SendDeleteEphemeral" , "Send/Delete ephemeral" , Slack); NewTest(TestTable, "Slack_SendDeleteEphemeral" , "Send/Delete ephemeral" , Slack);
NewTest(TestTable, "Slack_GetScheduledMessages" , "Get scheduled messages" , Slack); NewTest(TestTable, "Slack_GetScheduledMessages" , "Get scheduled messages" , Slack);
NewTest(TestTable, "Slack_CreateArchiveChannel" , "Create/Archive channel" , Slack); NewTest(TestTable, "Slack_CreateArchiveChannel" , "Create/Archive channel" , Slack);
NewTest(TestTable, "Slack_GetChannelList" , "Get channel list" , Slack); NewTest(TestTable, "Slack_GetChannelList" , "Get channel list" , Slack);
NewTest(TestTable, "Slack_OpenCloseDialog" , "Open/Close dialog" , Slack); NewTest(TestTable, "Slack_OpenCloseDialog" , "Open/Close dialog" , Slack);
NewTest(TestTable, "Slack_GetFileList" , "Get list of files" , Slack); NewTest(TestTable, "Slack_GetFileList" , "Get list of files" , Slack);
NewTest(TestTable, "Slack_UploadDeleteFile" , "Upload/Delete file" , Slack); NewTest(TestTable, "Slack_UploadDeleteFile" , "Upload/Delete file" , Slack);
NewTest(TestTable, "Slack_GetExternalFileList" , "Get external file list" , Slack); NewTest(TestTable, "Slack_GetExternalFileList" , "Get external file list" , Slack);
NewTest(TestTable, "Slack_UploadDeleteExternalFile" , "Upload/Delete external file" , Slack); NewTest(TestTable, "Slack_UploadDeleteExternalFile" , "Upload/Delete external file" , Slack);
NewTest(TestTable, "AT_CreateDatabase" , "Create/Edit database" , AirT); NewTest(TestTable, "AT_CreateDatabase" , "Create/Edit database" , AirT);
NewTest(TestTable, "AT_CreateTable" , "Create/Edit table" , AirT); NewTest(TestTable, "AT_CreateTable" , "Create/Edit table" , AirT);
NewTest(TestTable, "AT_CreateField" , "Create/Edit field" , AirT); NewTest(TestTable, "AT_CreateField" , "Create/Edit field" , AirT);
NewTest(TestTable, "AT_CreateDeleteRecords" , "Create/Delete records" , AirT); NewTest(TestTable, "AT_CreateDeleteRecords" , "Create/Delete records" , AirT);
NewTest(TestTable, "DropboxAPI_GetUpdateToken" , "Get/Update token" , Dropbox); NewTest(TestTable, "DropboxAPI_GetUpdateToken" , "Get/Update token" , Dropbox);
NewTest(TestTable, "DropboxAPI_UploadFile" , "Upload file" , Dropbox); NewTest(TestTable, "DropboxAPI_UploadFile" , "Upload file" , Dropbox);
NewTest(TestTable, "DropboxAPI_UploadFileByURL" , "Upload file by URL" , Dropbox); NewTest(TestTable, "DropboxAPI_UploadFileByURL" , "Upload file by URL" , Dropbox);
NewTest(TestTable, "DropboxAPI_CreateFolder" , "Create folder" , Dropbox); NewTest(TestTable, "DropboxAPI_CreateFolder" , "Create folder" , Dropbox);
NewTest(TestTable, "DropboxAPI_CreateDeleteTag" , "Create/Delete tag" , Dropbox); NewTest(TestTable, "DropboxAPI_CreateDeleteTag" , "Create/Delete tag" , Dropbox);
NewTest(TestTable, "DropboxAPI_GetAccount" , "Get account data" , Dropbox); NewTest(TestTable, "DropboxAPI_GetAccount" , "Get account data" , Dropbox);
NewTest(TestTable, "DropboxAPI_AccessManagement" , "Access management" , Dropbox); NewTest(TestTable, "DropboxAPI_AccessManagement" , "Access management" , Dropbox);
NewTest(TestTable, "DropboxAPI_GetFolderFileList" , "Get list of folder files" , Dropbox); NewTest(TestTable, "DropboxAPI_GetFolderFileList" , "Get list of folder files" , Dropbox);
NewTest(TestTable, "B24_TokenManagment" , "Token management" , Bitrix); NewTest(TestTable, "B24_TokenManagment" , "Token management" , Bitrix);
NewTest(TestTable, "B24_ServerTime" , "Server time" , Bitrix); NewTest(TestTable, "B24_ServerTime" , "Server time" , Bitrix);
NewTest(TestTable, "B24_PostsManagment" , "Posts managment" , Bitrix); NewTest(TestTable, "B24_PostsManagment" , "Posts managment" , Bitrix);
NewTest(TestTable, "B24_TaskManagment" , "Tasks managment" , Bitrix); NewTest(TestTable, "B24_TaskManagment" , "Tasks managment" , Bitrix);
NewTest(TestTable, "B24_CommentsManagment" , "Comments managment" , Bitrix); NewTest(TestTable, "B24_CommentsManagment" , "Comments managment" , Bitrix);
NewTest(TestTable, "B24_WorkingWithDrive" , "Working with drive" , Bitrix); NewTest(TestTable, "B24_WorkingWithDrive" , "Working with drive" , Bitrix);
NewTest(TestTable, "B24_Kanban" , "Kanban" , Bitrix); NewTest(TestTable, "B24_Kanban" , "Kanban" , Bitrix);
NewTest(TestTable, "B24_Timekeeping" , "Timekeeping" , Bitrix); NewTest(TestTable, "B24_Timekeeping" , "Timekeeping" , Bitrix);
NewTest(TestTable, "B24_ChatManagment" , "Chats works" , Bitrix); NewTest(TestTable, "B24_ChatManagment" , "Chats works" , Bitrix);
NewTest(TestTable, "B24_NotificationsManagment" , "Notifications managment" , Bitrix); NewTest(TestTable, "B24_NotificationsManagment" , "Notifications managment" , Bitrix);
Return TestTable; Return TestTable;
EndFunction EndFunction
Function ExpectsThat(Value) Export Function ExpectsThat(Value) Export
Try Try
Module = GetCommonModule("ЮТест"); Module = GetCommonModule("ЮТест");
Ожидаем = TypeOf(Module) = Type("CommonModule"); Ожидаем = TypeOf(Module) = Type("CommonModule");
Return Module.ОжидаетЧто(Value); Return Module.ОжидаетЧто(Value);
Except Except
Return Ожидаем.Что(Value); Return Ожидаем.Что(Value);
EndTry; EndTry;
EndFunction EndFunction
Function FormYAXTests() Export Function FormYAXTests() Export
Module = GetCommonModule("ЮТТесты"); Module = GetCommonModule("ЮТТесты");
Sections = GetTestingSectionMapping(); Sections = GetTestingSectionMapping();
TestTable = GetTestTable(); TestTable = GetTestTable();
For Each Section In Sections Do For Each Section In Sections Do
CurrentSection = Section.Key; CurrentSection = Section.Key;
Filter = New Structure("Section", CurrentSection); Filter = New Structure("Section", CurrentSection);
SectionTests = TestTable.FindRows(Filter); SectionTests = TestTable.FindRows(Filter);
Set = Module.ДобавитьТестовыйНабор(CurrentSection); Set = Module.ДобавитьТестовыйНабор(CurrentSection);
For Each Test In SectionTests Do For Each Test In SectionTests Do
Set.ДобавитьСерверныйТест(Test.Method, Test.Synonym); Set.ДобавитьСерверныйТест(Test.Method, Test.Synonym);
EndDo; EndDo;
EndDo; EndDo;
Return ""; Return "";
EndFunction EndFunction
Function FormAssertsTests() Export Function FormAssertsTests() Export
TestTable = GetTestTable(); TestTable = GetTestTable();
ArrayOfTests = New Array; ArrayOfTests = New Array;
For Each Test In TestTable Do For Each Test In TestTable Do
ArrayOfTests.Add(Test.Method); ArrayOfTests.Add(Test.Method);
EndDo; EndDo;
Return ArrayOfTests; Return ArrayOfTests;
EndFunction EndFunction
Function GetParameter(Parameter) Export Function GetParameter(Parameter) Export
Path = DataFilePath(); Path = DataFilePath();
Return GetValueFromFile(Parameter, Path); Return GetValueFromFile(Parameter, Path);
EndFunction EndFunction
Function GetBinary(Parameter) Export Function GetBinary(Parameter) Export
Path = DataFilePath(); Path = DataFilePath();
LocalParameter = Parameter + "Local"; LocalParameter = Parameter + "Local";
MainValue = GetValueFromFile(Parameter , Path); MainValue = GetValueFromFile(Parameter , Path);
LocalValue = GetValueFromFile(LocalParameter, Path); LocalValue = GetValueFromFile(LocalParameter, Path);
LocalFile = New File(LocalValue); LocalFile = New File(LocalValue);
If LocalFile.Exist() Then If LocalFile.Exist() Then
Value = New BinaryData(LocalValue); Value = New BinaryData(LocalValue);
Else Else
Value = MainValue; Value = MainValue;
EndIf; EndIf;
If TypeOf(Value) = Type("String") Then If TypeOf(Value) = Type("String") Then
Value = GetFilePath(Value, LocalParameter); Value = GetFilePath(Value, LocalParameter);
EndIf; EndIf;
Return Value; Return Value;
EndFunction EndFunction
Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export
If StrFind(Path, "http") > 0 If StrFind(Path, "http") > 0
Or StrFind(Path, "www") > 0 Then Or StrFind(Path, "www") > 0 Then
TFN = GetTempFileName(); TFN = GetTempFileName();
CopyFile(Path, TFN); CopyFile(Path, TFN);
Path = TFN; Path = TFN;
Binary = New BinaryData(Path); Binary = New BinaryData(Path);
If SaveLocally Then If SaveLocally Then
WriteParameter(LocalParameter, TFN); WriteParameter(LocalParameter, TFN);
Else Else
DeleteFiles(TFN); DeleteFiles(TFN);
EndIf; EndIf;
Else Else
Binary = New BinaryData(Path); Binary = New BinaryData(Path);
EndIf; EndIf;
Return Binary; Return Binary;
EndFunction EndFunction
Procedure ParameterToCollection(Parameter, Collection) Export Procedure ParameterToCollection(Parameter, Collection) Export
Value = GetParameter(Parameter); Value = GetParameter(Parameter);
Collection.Insert(Parameter, Value); Collection.Insert(Parameter, Value);
EndProcedure EndProcedure
Procedure BinaryToCollection(Parameter, Collection) Export Procedure BinaryToCollection(Parameter, Collection) Export
Value = GetBinary(Parameter); Value = GetBinary(Parameter);
Collection.Insert(Parameter, Value); Collection.Insert(Parameter, Value);
EndProcedure EndProcedure
Procedure WriteParameter(Parameter, Value) Export Procedure WriteParameter(Parameter, Value) Export
Path = DataFilePath(); Path = DataFilePath();
WriteParameterToFile(Parameter, Value, Path); WriteParameterToFile(Parameter, Value, Path);
EndProcedure EndProcedure
Procedure WriteLog(Val Result, Val Method, Val Library = "") Export Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method; Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method;
Try Try
Data = OPI_Tools.JSONString(Result); Data = OPI_Tools.JSONString(Result);
Except Except
Data = "Not JSON: " + String(Result); Data = "Not JSON: " + String(Result);
EndTry; EndTry;
Data = " " + Data; Data = " " + Data;
Message(Header); Message(Header);
Message(Chars.LF); Message(Chars.LF);
Message(Data); Message(Data);
Message(Chars.LF); Message(Chars.LF);
Message("---------------------------------"); Message("---------------------------------");
Message(Chars.LF); Message(Chars.LF);
If ValueIsFilled(Library) Then If ValueIsFilled(Library) Then
WriteLogFile(Data, Method, Library); WriteLogFile(Data, Method, Library);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion
#Region Private #Region Private
Function GetValueFromFile(Parameter, Path) Function GetValueFromFile(Parameter, Path)
Values = OPI_Tools.ReadJSONFile(Path); Values = OPI_Tools.ReadJSONFile(Path);
Return ?(Values.Property(Parameter), Values[Parameter], ""); Return ?(Values.Property(Parameter), Values[Parameter], "");
EndFunction EndFunction
Function DataFilePath() Function DataFilePath()
Path = ""; Path = "";
PossiblePaths = New Array; PossiblePaths = New Array;
PossiblePaths.Add("./data.json"); PossiblePaths.Add("./data.json");
PossiblePaths.Add("C:\GDrive\Мой Диск\data.json"); PossiblePaths.Add("C:\GDrive\Мой Диск\data.json");
PossiblePaths.Add("D:\GD\Мой Диск\data.json"); PossiblePaths.Add("D:\GD\Мой Диск\data.json");
For Each PossiblePath In PossiblePaths Do For Each PossiblePath In PossiblePaths Do
RepositoryFile = New File(PossiblePath); RepositoryFile = New File(PossiblePath);
If RepositoryFile.Exist() Then If RepositoryFile.Exist() Then
Path = PossiblePath; Path = PossiblePath;
EndIf; EndIf;
EndDo; EndDo;
Return Path; Return Path;
EndFunction EndFunction
Function GetCommonModule(Val Name) Function GetCommonModule(Val Name)
Module = Eval(Name); Module = Eval(Name);
Return Module; Return Module;
EndFunction EndFunction
Procedure NewTest(ValueTable, Val Method, Val Synonym, Val Section) Procedure NewTest(ValueTable, Val Method, Val Synonym, Val Section)
NewTest = ValueTable.Add(); NewTest = ValueTable.Add();
NewTest.Method = Method; NewTest.Method = Method;
NewTest.Synonym = Synonym; NewTest.Synonym = Synonym;
NewTest.Section = Section; NewTest.Section = Section;
EndProcedure EndProcedure
Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path) Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
Values = OPI_Tools.ReadJSONFile(Path); Values = OPI_Tools.ReadJSONFile(Path);
Values.Insert(Parameter, Value); Values.Insert(Parameter, Value);
Record = New JSONWriter; Record = New JSONWriter;
JSONWriterSettings = New JSONWriterSettings(JSONLineBreak.Auto, Chars.Tab); JSONWriterSettings = New JSONWriterSettings(JSONLineBreak.Auto, Chars.Tab);
Record.OpenFile(Path, , , JSONWriterSettings); Record.OpenFile(Path, , , JSONWriterSettings);
WriteJSON(Record, Values); WriteJSON(Record, Values);
@ -452,37 +452,37 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library) Procedure WriteLogFile(Val Data, Val Method, Val Library)
Try Try
LogPath = "./docs/ru/results"; LogPath = "./docs/ru/results";
LibraryLogPath = LogPath + "/" + Library; LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath); LogDirectory = New File(LogPath);
If Not LogDirectory.Exist() Then If Not LogDirectory.Exist() Then
CreateDirectory(LogPath); CreateDirectory(LogPath);
EndIf; EndIf;
LibraryLogCatalog = New File(LibraryLogPath); LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exist() Then If Not LibraryLogCatalog.Exist() Then
CreateDirectory(LibraryLogPath); CreateDirectory(LibraryLogPath);
EndIf; EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log"; FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath); LogFile = New File(FilePath);
If Not LogFile.Exist() Then If Not LogFile.Exist() Then
LogDocument = New TextDocument; LogDocument = New TextDocument;
LogDocument.SetText(Data); LogDocument.SetText(Data);
LogDocument.Write(FilePath); LogDocument.Write(FilePath);
EndIf; EndIf;
Except Except
Message("Failed to write log file!: " + ErrorDescription()); Message("Failed to write log file!: " + ErrorDescription());
EndTry; EndTry;
EndProcedure EndProcedure
#EndRegion #EndRegion

View File

@ -39,268 +39,268 @@
#Region Internal #Region Internal
Procedure GetBinaryData(Value) Export Procedure GetBinaryData(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If TypeOf(Value) = Type("BinaryData") Then If TypeOf(Value) = Type("BinaryData") Then
Return; Return;
Else Else
File = New File(Value); File = New File(Value);
If File.Exist() Then If File.Exist() Then
Value = New BinaryData(Value); Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then ElsIf StrFind(Value, "//") Then
Value = OPI_Tools.Get(Value); Value = OPI_Tools.Get(Value);
Else Else
Value = Base64Value(Value); Value = Base64Value(Value);
EndIf; EndIf;
EndIf; EndIf;
Except Except
Raise "Error getting binary data from parameter: " + ErrorDescription(); Raise "Error getting binary data from parameter: " + ErrorDescription();
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetBinaryOrStream(Value) Export Procedure GetBinaryOrStream(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
If TypeOf(Value) <> Type("String") Then If TypeOf(Value) <> Type("String") Then
GetBinaryData(Value); GetBinaryData(Value);
Return; Return;
EndIf; EndIf;
File = New File(Value); File = New File(Value);
If File.Exist() Then If File.Exist() Then
Value = New FileStream(Value, FileOpenMode.Open); Value = New FileStream(Value, FileOpenMode.Open);
Else Else
GetBinaryData(Value); GetBinaryData(Value);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetCollection(Value) Export Procedure GetCollection(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
InitialValue = Value; InitialValue = Value;
If ThisIsCollection(Value) Then If ThisIsCollection(Value) Then
Return; Return;
Else Else
If TypeOf(Value) = Type("BinaryData") Then If TypeOf(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value); Value = GetStringFromBinaryData(Value);
Else Else
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
File = New File(Value); File = New File(Value);
JSONReader = New JSONReader; JSONReader = New JSONReader;
If File.Exist() Then If File.Exist() Then
JSONReader.OpenFile(Value); JSONReader.OpenFile(Value);
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(Lower(Value), "http") Then
TFN = GetTempFileName(); TFN = GetTempFileName();
CopyFile(Value, TFN); CopyFile(Value, TFN);
JSONReader.OpenFile(TFN); JSONReader.OpenFile(TFN);
JSONReader.Read(); JSONReader.Read();
DeleteFiles(TFN); DeleteFiles(TFN);
Else Else
JSONReader.SetString(TrimAll(Value)); JSONReader.SetString(TrimAll(Value));
EndIf; EndIf;
Value = ReadJSON(JSONReader, True, Undefined, JSONDateFormat.ISO); Value = ReadJSON(JSONReader, True, Undefined, JSONDateFormat.ISO);
JSONReader.Close(); JSONReader.Close();
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
Value = InitialValue; Value = InitialValue;
GetArray(Value); GetArray(Value);
EndIf; EndIf;
EndIf; EndIf;
Except Except
Value = InitialValue; Value = InitialValue;
GetArray(Value); GetArray(Value);
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetArray(Value) Export Procedure GetArray(Value) Export
If TypeOf(Value) = Type("Array") Then If TypeOf(Value) = Type("Array") Then
Return; Return;
EndIf; EndIf;
If TypeOf(Value) = Type("String") If TypeOf(Value) = Type("String")
And StrStartsWith(Value, "[") And StrStartsWith(Value, "[")
And StrEndsWith(Value, "]") Then And StrEndsWith(Value, "]") Then
CommaInQuotes = "','"; CommaInQuotes = "','";
Value = StrReplace(Value, "['" , ""); Value = StrReplace(Value, "['" , "");
Value = StrReplace(Value, "']" , ""); Value = StrReplace(Value, "']" , "");
Value = StrReplace(Value, "', '" , CommaInQuotes); Value = StrReplace(Value, "', '" , CommaInQuotes);
Value = StrReplace(Value, "' , '", CommaInQuotes); Value = StrReplace(Value, "' , '", CommaInQuotes);
Value = StrReplace(Value, "' ,'" , CommaInQuotes); Value = StrReplace(Value, "' ,'" , CommaInQuotes);
Value = StrSplit(Value, CommaInQuotes, False); Value = StrSplit(Value, CommaInQuotes, False);
For N = 0 To Value.UBound() Do For N = 0 To Value.UBound() Do
Value[N] = TrimAll(Value[N]); Value[N] = TrimAll(Value[N]);
EndDo; EndDo;
Else Else
If TypeOf(Value) = Type("Number") Then If TypeOf(Value) = Type("Number") Then
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
OPI_Tools.ValueToArray(Value); OPI_Tools.ValueToArray(Value);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetBoolean(Value) Export Procedure GetBoolean(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If TypeOf(Value) = Type("Boolean") Then If TypeOf(Value) = Type("Boolean") Then
Return; Return;
Else Else
Value = Boolean(Value); Value = Boolean(Value);
EndIf; EndIf;
Except Except
Raise "Error getting boolean data from parameter"; Raise "Error getting boolean data from parameter";
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetLine(Value, Val FromSource = False) Export Procedure GetLine(Value, Val FromSource = False) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If ThisIsSymbolic(Value) Then If ThisIsSymbolic(Value) Then
If Not FromSource Then If Not FromSource Then
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
Return; Return;
EndIf; EndIf;
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
File = New File(Value); File = New File(Value);
If File.Exist() Then If File.Exist() Then
TextReader = New TextReader(Value); TextReader = New TextReader(Value);
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(Lower(Value), "http") Then
TFN = GetTempFileName(); TFN = GetTempFileName();
CopyFile(Value, TFN); CopyFile(Value, TFN);
TextReader = New TextReader(TFN); TextReader = New TextReader(TFN);
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
DeleteFiles(TFN); DeleteFiles(TFN);
Else Else
Return; Return;
EndIf; EndIf;
ElsIf TypeOf(Value) = Type("BinaryData") Then ElsIf TypeOf(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value); Value = GetStringFromBinaryData(Value);
ElsIf ThisIsCollection(Value) Then ElsIf ThisIsCollection(Value) Then
Value = OPI_Tools.JSONString(Value); Value = OPI_Tools.JSONString(Value);
Else Else
Return; Return;
EndIf; EndIf;
Except Except
Value = String(Value); Value = String(Value);
Return; Return;
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetDate(Value) Export Procedure GetDate(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Date = "Date"; Date = "Date";
Try Try
If TypeOf(Value) = Type(Date) Then If TypeOf(Value) = Type(Date) Then
Return; Return;
Else Else
Value = XMLValue(Type(Date), Value); Value = XMLValue(Type(Date), Value);
EndIf; EndIf;
Except Except
OOD = New TypeDescription(Date); OOD = New TypeDescription(Date);
Value = OOD.AdjustValue(Value); Value = OOD.AdjustValue(Value);
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetNumber(Value) Export Procedure GetNumber(Value) Export
TypeDescription = New TypeDescription("Number"); TypeDescription = New TypeDescription("Number");
Value = TypeDescription.AdjustValue(Value); Value = TypeDescription.AdjustValue(Value);
EndProcedure EndProcedure
#EndRegion #EndRegion
@ -308,19 +308,19 @@ EndProcedure
#Region Private #Region Private
Function ThisIsCollection(Val Value) Function ThisIsCollection(Val Value)
Return TypeOf(Value) = Type("Array") Return TypeOf(Value) = Type("Array")
Or TypeOf(Value) = Type("Structure") Or TypeOf(Value) = Type("Structure")
Or TypeOf(Value) = Type("Map"); Or TypeOf(Value) = Type("Map");
EndFunction EndFunction
Function ThisIsSymbolic(Val Value) Function ThisIsSymbolic(Val Value)
Return TypeOf(Value) = Type("String") Return TypeOf(Value) = Type("String")
Or TypeOf(Value) = Type("Number") Or TypeOf(Value) = Type("Number")
Or TypeOf(Value) = Type("Date"); Or TypeOf(Value) = Type("Date");
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -39,75 +39,75 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, LLC 1C-Soft // Copyright (c) 2019, LLC 1C-Soft
// All rights reserved. This program and accompanying materials are provided // All rights reserved. This program and accompanying materials are provided
// under the terms of the Attribution 4.0 International (CC BY 4.0 license) // under the terms of the Attribution 4.0 International (CC BY 4.0 license)
// License text available at: // License text available at:
// https://creativecommons.org/licenses/by/4.0/legalcode // https://creativecommons.org/licenses/by/4.0/legalcode
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
Function HMACSHA256(Val Key, Val Data) Export Function HMACSHA256(Val Key, Val Data) Export
Return HMAC(Key, Data, HashFunction.SHA256, 64); Return HMAC(Key, Data, HashFunction.SHA256, 64);
EndFunction EndFunction
Function Hash(BinaryData, Type) Export Function Hash(BinaryData, Type) Export
Hashing = New DataHashing(Type); Hashing = New DataHashing(Type);
Hashing.Append(BinaryData); Hashing.Append(BinaryData);
Return Hashing.HashSum; Return Hashing.HashSum;
EndFunction EndFunction
Function HMAC(Val Key, Val Data, Type, BlockSize) Export Function HMAC(Val Key, Val Data, Type, BlockSize) Export
Twice = 2; Twice = 2;
If Key.Size() > BlockSize Then If Key.Size() > BlockSize Then
Key = Hash(Key, Type); Key = Hash(Key, Type);
EndIf; EndIf;
If Key.Size() <= BlockSize Then If Key.Size() <= BlockSize Then
Key = GetHexStringFromBinaryData(Key); Key = GetHexStringFromBinaryData(Key);
Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice); Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice);
EndIf; EndIf;
Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key)); Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key));
Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize)); Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize));
Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize)); Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize));
Ipad.WriteBitwiseXor(0, Key); Ipad.WriteBitwiseXor(0, Key);
Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad); Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad);
Opad.WriteBitwiseXor(0, Key); Opad.WriteBitwiseXor(0, Key);
Okeypad = GetBinaryDataFromBinaryDataBuffer(opad); Okeypad = GetBinaryDataFromBinaryDataBuffer(opad);
Return Hash(UniteBinaryData(okeypad, Hash(UniteBinaryData(ikeypad, Data), Type)), Type); Return Hash(UniteBinaryData(okeypad, Hash(UniteBinaryData(ikeypad, Data), Type)), Type);
EndFunction EndFunction
Function UniteBinaryData(BinaryData1, BinaryData2) Export Function UniteBinaryData(BinaryData1, BinaryData2) Export
BinaryDataArray = New Array; BinaryDataArray = New Array;
BinaryDataArray.Add(BinaryData1); BinaryDataArray.Add(BinaryData1);
BinaryDataArray.Add(BinaryData2); BinaryDataArray.Add(BinaryData2);
Return ConcatenateBinaryData(BinaryDataArray); Return ConcatenateBinaryData(BinaryDataArray);
EndFunction EndFunction
Function RepeatString(String, Count) Export Function RepeatString(String, Count) Export
Parts = New Array(Count); Parts = New Array(Count);
For K = 1 To Count Do For K = 1 To Count Do
Parts.Add(String); Parts.Add(String);
EndDo; EndDo;
Return StrConcat(Parts, ""); Return StrConcat(Parts, "");
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -42,91 +42,91 @@
// Get list of bases // Get list of bases
// Gets the list of available bases // Gets the list of available bases
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Indent - String - Next page identifier of the base list from the previous request - offset // Indent - String - Next page identifier of the base list from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetListOfBases(Val Token, Val Indent = "") Export Function GetListOfBases(Val Token, Val Indent = "") Export
OPI_TypeConversion.GetLine(Indent); OPI_TypeConversion.GetLine(Indent);
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get base tables // Get base tables
// Gets the schema of base tables // Gets the schema of base tables
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetDatabaseTables(Val Token, Val Base) Export Function GetDatabaseTables(Val Token, Val Base) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create base // Create base
// Creates a new database // Creates a new database
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Workspace - String - Workspace identifier - ws // Workspace - String - Workspace identifier - ws
// Name - String - New base name - title // Name - String - New base name - title
// TableCollection - Map Of KeyAndValue - Table description: Key > name, Value > array of fields - tablesdata // TableCollection - Map Of KeyAndValue - Table description: Key > name, Value > array of fields - tablesdata
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateDatabase(Val Token, Val Workspace, Val Name, Val TableCollection) Export Function CreateDatabase(Val Token, Val Workspace, Val Name, Val TableCollection) Export
OPI_TypeConversion.GetCollection(TableCollection); OPI_TypeConversion.GetCollection(TableCollection);
If Not TypeOf(TableCollection) = Type("Structure") If Not TypeOf(TableCollection) = Type("Structure")
And Not TypeOf(TableCollection) = Type("Map") Then And Not TypeOf(TableCollection) = Type("Map") Then
Raise "Error in table collection data"; Raise "Error in table collection data";
EndIf; EndIf;
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
TableArray = New Array; TableArray = New Array;
For Each Table In TableCollection Do For Each Table In TableCollection Do
Description = GenerateTableDescription(Table.Key, Table.Value); Description = GenerateTableDescription(Table.Key, Table.Value);
TableArray.Add(Description); TableArray.Add(Description);
EndDo; EndDo;
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("tables" , TableArray , "Array", Parameters); OPI_Tools.AddField("tables" , TableArray , "Array" , Parameters);
OPI_Tools.AddField("workspaceId", Workspace, "String", Parameters); OPI_Tools.AddField("workspaceId", Workspace , "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -137,56 +137,56 @@ EndFunction
// Create table // Create table
// Creates a new table in the base // Creates a new table in the base
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Name - String - New table name - title // Name - String - New table name - title
// FieldArray - Array of Structure - Array of field descriptions - fieldsdata // FieldArray - Array of Structure - Array of field descriptions - fieldsdata
// Description - String - Table description - description // Description - String - Table description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateTable(Val Token, Val Base, Val Name, Val FieldArray, Val Description = "") Export Function CreateTable(Val Token, Val Base, Val Name, Val FieldArray, Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = GenerateTableDescription(Name, FieldArray, Description); Parameters = GenerateTableDescription(Name, FieldArray, Description);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify table // Modify table
// Changes the name and/or description of the base // Changes the name and/or description of the base
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Name - String - New name - title // Name - String - New name - title
// Description - String - New description - description // Description - String - New description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function ModifyTable(Val Token, Val Base, Val Table, Val Name = "", Val Description = "") Export Function ModifyTable(Val Token, Val Base, Val Table, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , Name, "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters); OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -197,40 +197,40 @@ EndFunction
// Create field // Create field
// Creates a new field in the table // Creates a new field in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier - base // Base - String - Base identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// FieldStructure - Structure of KeyAndValue - Description of the new field - fielddata // FieldStructure - Structure of KeyAndValue - Description of the new field - fielddata
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateField(Val Token, Val Base, Val Table, Val FieldStructure) Export Function CreateField(Val Token, Val Base, Val Table, Val FieldStructure) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(FieldStructure); OPI_TypeConversion.GetCollection(FieldStructure);
If Not TypeOf(FieldStructure) = Type("Structure") If Not TypeOf(FieldStructure) = Type("Structure")
And Not TypeOf(FieldStructure) = Type("Map") Then And Not TypeOf(FieldStructure) = Type("Map") Then
Raise "Error in field description data"; Raise "Error in field description data";
EndIf; EndIf;
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields"; URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, FieldStructure, Headers); Response = OPI_Tools.Post(URL, FieldStructure, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify field // Modify field
// Changes the name and/or description of an existing table field // Changes the name and/or description of an existing table field
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Base identifier Base - base // Base - String - Base identifier Base - base
@ -238,152 +238,152 @@ EndFunction
// Field - String - Field identifier - field // Field - String - Field identifier - field
// Name - String - New name - title // Name - String - New name - title
// Description - String - New description - description // Description - String - New description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function ModifyField(Val Token, Val Base, Val Table, Val Field, Val Name = "", Val Description = "") Export Function ModifyField(Val Token, Val Base, Val Table, Val Field, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Field); OPI_TypeConversion.GetLine(Field);
URL = "https://api.airtable.com/v0/meta/bases/" URL = "https://api.airtable.com/v0/meta/bases/"
+ Base + Base
+ "/tables/" + "/tables/"
+ Table + Table
+ "/fields/" + "/fields/"
+ Field; + Field;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("name" , Name, "String", Parameters); OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters); OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get field (string) // Get field (string)
// Gets the description of a string field // Gets the description of a string field
// //
// Parameters: // Parameters:
// Name - String - New field name - title // Name - String - New field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetStringField(Val Name) Export Function GetStringField(Val Name) Export
Return PrimitiveFieldDescription(Name, "richText"); Return PrimitiveFieldDescription(Name, "richText");
EndFunction EndFunction
// Get field (numeric) // Get field (numeric)
// Gets the description of a numeric field // Gets the description of a numeric field
// //
// Parameters: // Parameters:
// Name - String - New field name - title // Name - String - New field name - title
// Precision - Number, String - Number of decimal places - precision // Precision - Number, String - Number of decimal places - precision
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetNumberField(Val Name, Val Precision = 0) Export Function GetNumberField(Val Name, Val Precision = 0) Export
OPI_TypeConversion.GetNumber(Precision); OPI_TypeConversion.GetNumber(Precision);
OptionsStructure = New Structure("precision", Precision); OptionsStructure = New Structure("precision", Precision);
Return PrimitiveFieldDescription(Name, "number", OptionsStructure); Return PrimitiveFieldDescription(Name, "number", OptionsStructure);
EndFunction EndFunction
// Get field (file) // Get field (file)
// Gets the description of a file field // Gets the description of a file field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetAttachmentField(Val Name) Export Function GetAttachmentField(Val Name) Export
Return PrimitiveFieldDescription(Name, "multipleAttachments"); Return PrimitiveFieldDescription(Name, "multipleAttachments");
EndFunction EndFunction
// Get field (checkbox) // Get field (checkbox)
// Gets the description of a boolean field // Gets the description of a boolean field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetCheckboxField(Val Name) Export Function GetCheckboxField(Val Name) Export
OptionsStructure = New Structure("icon,color", "check", "yellowBright"); OptionsStructure = New Structure("icon,color", "check", "yellowBright");
Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure); Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure);
EndFunction EndFunction
// Get field (date) // Get field (date)
// Gets the description of a date field // Gets the description of a date field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetDateField(Val Name) Export Function GetDateField(Val Name) Export
FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso"); FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso");
OptionsStructure = New Structure("dateFormat", FormatStructure); OptionsStructure = New Structure("dateFormat", FormatStructure);
Return PrimitiveFieldDescription(Name, "date", OptionsStructure); Return PrimitiveFieldDescription(Name, "date", OptionsStructure);
EndFunction EndFunction
// Get field (email) // Get field (email)
// Gets the description of an email field // Gets the description of an email field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetEmailField(Val Name) Export Function GetEmailField(Val Name) Export
Return PrimitiveFieldDescription(Name, "email"); Return PrimitiveFieldDescription(Name, "email");
EndFunction EndFunction
// Get field (phone) // Get field (phone)
// Gets the description of a phone number field // Gets the description of a phone number field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetPhoneField(Val Name) Export Function GetPhoneField(Val Name) Export
Return PrimitiveFieldDescription(Name, "phoneNumber"); Return PrimitiveFieldDescription(Name, "phoneNumber");
EndFunction EndFunction
// Get field (url) // Get field (url)
// Gets the description of a URL field // Gets the description of a URL field
// //
// Parameters: // Parameters:
// Name - String - Field name - title // Name - String - Field name - title
// //
// Returns: // Returns:
// Structure - Field description // Structure - Field description
Function GetLinkField(Val Name) Export Function GetLinkField(Val Name) Export
Return PrimitiveFieldDescription(Name, "url"); Return PrimitiveFieldDescription(Name, "url");
EndFunction EndFunction
#EndRegion #EndRegion
@ -392,67 +392,67 @@ EndFunction
// Get list of records // Get list of records
// Gets the list of records of the selected table // Gets the list of records of the selected table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Indent - String - Next page identifier of data from the previous request - offset // Indent - String - Next page identifier of data from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetListOfRecords(Val Token, Val Base, Val Table, Val Indent = "") Export Function GetListOfRecords(Val Token, Val Base, Val Table, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table; URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get record // Get record
// Gets row data of the table by identifier // Gets row data of the table by identifier
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetRecord(Val Token, Val Base, Val Table, Val Record) Export Function GetRecord(Val Token, Val Base, Val Table, Val Record) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create records // Create records
// Creates one or an array of records by description or an array of field value descriptions // Creates one or an array of records by description or an array of field value descriptions
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Data - Structure, Array of Structure - Set or array of sets of pairs Key : Value > Field : FieldValue - data // Data - Structure, Array of Structure - Set or array of sets of pairs Key : Value > Field : FieldValue - data
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export
@ -460,52 +460,52 @@ Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(Data); OPI_TypeConversion.GetCollection(Data);
Parameters = New Structure();
AddDataDescription(Data, Parameters);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table; Parameters = New Structure();
AddDataDescription(Data, Parameters);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete records // Delete records
// Deletes one or an array of records by identifiers // Deletes one or an array of records by identifiers
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Records - String, Array of String - Identifier or array of record identifiers - records // Records - String, Array of String - Identifier or array of record identifiers - records
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function DeletePosts(Val Token, Val Base, Val Table, Val Records) Export Function DeletePosts(Val Token, Val Base, Val Table, Val Records) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetArray(Records); OPI_TypeConversion.GetArray(Records);
RecordString = ""; RecordString = "";
For Each Record In Records Do For Each Record In Records Do
RecordString = RecordString RecordString = RecordString
+ ?(ValueIsFilled(RecordString), "&", "?") + ?(ValueIsFilled(RecordString), "&", "?")
+ "records[]=" + "records[]="
+ OPI_Tools.NumberToString(Record); + OPI_Tools.NumberToString(Record);
EndDo; EndDo;
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -514,67 +514,67 @@ EndFunction
// Get comments // Get comments
// Gets the list of comments for a record in the table // Gets the list of comments for a record in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Indent - String - Next page identifier of data from the previous request - offset // Indent - String - Next page identifier of data from the previous request - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function GetComments(Val Token, Val Base, Val Table, Val Record, Val Indent = "") Export Function GetComments(Val Token, Val Base, Val Table, Val Record, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments"; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters); OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create comment // Create comment
// Creates a comment for a record in the table // Creates a comment for a record in the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Text - String - Comment text - text // Text - String - Comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function CreateComment(Val Token, Val Base, Val Table, Val Record, Val Text) Export Function CreateComment(Val Token, Val Base, Val Table, Val Record, Val Text) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments"; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters); OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Modify comment // Modify comment
// Changes the text of an existing comment // Changes the text of an existing comment
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
@ -582,54 +582,54 @@ EndFunction
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Comment - String - Comment identifier - comment // Comment - String - Comment identifier - comment
// Text - String - New comment text - text // Text - String - New comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function EditComment(Val Token, Val Base, Val Table, Val Record, Val Comment, Val Text) Export Function EditComment(Val Token, Val Base, Val Table, Val Record, Val Comment, Val Text) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Parameters = New Structure(); Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters); OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers); Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete comment // Delete comment
// Deletes a comment for a table record // Deletes a comment for a table record
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Base - String - Database identifier - base // Base - String - Database identifier - base
// Table - String - Table identifier - table // Table - String - Table identifier - table
// Record - String - Record identifier in the table - record // Record - String - Record identifier in the table - record
// Comment - String - Comment identifier - comment // Comment - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Airtable // Map Of KeyAndValue - serialized JSON response from Airtable
Function DeleteComment(Val Token, Val Base, Val Table, Val Record, Val Comment) Export Function DeleteComment(Val Token, Val Base, Val Table, Val Record, Val Comment) Export
OPI_TypeConversion.GetLine(Base); OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table); OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record); OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment; URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token); Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -639,58 +639,58 @@ EndFunction
#Region Private #Region Private
Function GetAuthorizationHeader(Val Token) Function GetAuthorizationHeader(Val Token)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "Bearer " + Token); Headers.Insert("Authorization", "Bearer " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
Function GenerateTableDescription(Val Name, Val FieldArray, Val Description = "") Function GenerateTableDescription(Val Name, Val FieldArray, Val Description = "")
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(FieldArray); OPI_TypeConversion.GetCollection(FieldArray);
TableDescription = New Structure("name,fields", Name, FieldArray); TableDescription = New Structure("name,fields", Name, FieldArray);
OPI_Tools.AddField("description", Description, "String", TableDescription); OPI_Tools.AddField("description", Description, "String", TableDescription);
Return TableDescription; Return TableDescription;
EndFunction EndFunction
Function PrimitiveFieldDescription(Val Name, Val Type, Val Options = "") Function PrimitiveFieldDescription(Val Name, Val Type, Val Options = "")
FieldStructure = New Structure(); FieldStructure = New Structure();
OPI_Tools.AddField("name" , Name, "String" , FieldStructure); OPI_Tools.AddField("name" , Name , "String" , FieldStructure);
OPI_Tools.AddField("type" , Type , "String" , FieldStructure); OPI_Tools.AddField("type" , Type , "String" , FieldStructure);
OPI_Tools.AddField("options", Options , "Collection", FieldStructure); OPI_Tools.AddField("options", Options , "Collection", FieldStructure);
Return FieldStructure; Return FieldStructure;
EndFunction EndFunction
Procedure AddDataDescription(Val Data, Parameters) Procedure AddDataDescription(Val Data, Parameters)
If TypeOf(Data) = Type("Array") Then If TypeOf(Data) = Type("Array") Then
SendArray = New Array; SendArray = New Array;
For Each RecordDescription In Data Do For Each RecordDescription In Data Do
SendArray.Add(New Structure("fields", RecordDescription)); SendArray.Add(New Structure("fields", RecordDescription));
EndDo; EndDo;
OPI_Tools.AddField("records", SendArray, "Array", Parameters); OPI_Tools.AddField("records", SendArray, "Array", Parameters);
Else Else
OPI_Tools.AddField("fields", Data, "Collection", Parameters); OPI_Tools.AddField("fields", Data, "Collection", Parameters);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -39,75 +39,75 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, LLC 1C-Soft // Copyright (c) 2019, LLC 1C-Soft
// All rights reserved. This program and accompanying materials are provided // All rights reserved. This program and accompanying materials are provided
// under the terms of the Attribution 4.0 International (CC BY 4.0 license) // under the terms of the Attribution 4.0 International (CC BY 4.0 license)
// License text available at: // License text available at:
// https://creativecommons.org/licenses/by/4.0/legalcode // https://creativecommons.org/licenses/by/4.0/legalcode
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
Function HMACSHA256(Val Key, Val Data) Export Function HMACSHA256(Val Key, Val Data) Export
Return HMAC(Key, Data, HashFunction.SHA256, 64); Return HMAC(Key, Data, HashFunction.SHA256, 64);
EndFunction EndFunction
Function Hash(BinaryData, Type) Export Function Hash(BinaryData, Type) Export
Hashing = New DataHashing(Type); Hashing = New DataHashing(Type);
Hashing.Append(BinaryData); Hashing.Append(BinaryData);
Return Hashing.HashSum; Return Hashing.HashSum;
EndFunction EndFunction
Function HMAC(Val Key, Val Data, Type, BlockSize) Export Function HMAC(Val Key, Val Data, Type, BlockSize) Export
Twice = 2; Twice = 2;
If Key.Size() > BlockSize Then If Key.Size() > BlockSize Then
Key = Hash(Key, Type); Key = Hash(Key, Type);
EndIf; EndIf;
If Key.Size() <= BlockSize Then If Key.Size() <= BlockSize Then
Key = GetHexStringFromBinaryData(Key); Key = GetHexStringFromBinaryData(Key);
Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice); Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice);
EndIf; EndIf;
Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key)); Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key));
Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize)); Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize));
Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize)); Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize));
Ipad.WriteBitwiseXor(0, Key); Ipad.WriteBitwiseXor(0, Key);
Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad); Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad);
Opad.WriteBitwiseXor(0, Key); Opad.WriteBitwiseXor(0, Key);
Okeypad = GetBinaryDataFromBinaryDataBuffer(opad); Okeypad = GetBinaryDataFromBinaryDataBuffer(opad);
Return Hash(UniteBinaryData(okeypad, Hash(UniteBinaryData(ikeypad, Data), Type)), Type); Return Hash(UniteBinaryData(okeypad, Hash(UniteBinaryData(ikeypad, Data), Type)), Type);
EndFunction EndFunction
Function UniteBinaryData(BinaryData1, BinaryData2) Export Function UniteBinaryData(BinaryData1, BinaryData2) Export
BinaryDataArray = New Array; BinaryDataArray = New Array;
BinaryDataArray.Add(BinaryData1); BinaryDataArray.Add(BinaryData1);
BinaryDataArray.Add(BinaryData2); BinaryDataArray.Add(BinaryData2);
Return ConcatBinaryData(BinaryDataArray); Return ConcatBinaryData(BinaryDataArray);
EndFunction EndFunction
Function RepeatString(String, Count) Export Function RepeatString(String, Count) Export
Parts = New Array(Count); Parts = New Array(Count);
For K = 1 To Count Do For K = 1 To Count Do
Parts.Add(String); Parts.Add(String);
EndDo; EndDo;
Return StrConcat(Parts, ""); Return StrConcat(Parts, "");
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -43,131 +43,131 @@
// Create calendar // Create calendar
// Creates an empty calendar // Creates an empty calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Name of the created calendar - title // Name - String - Name of the created calendar - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateCalendar(Val Token, Val Name) Export Function CreateCalendar(Val Token, Val Name) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars"; URL = "https://www.googleapis.com/calendar/v3/calendars";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("summary" , Name); Parameters.Insert("summary" , Name);
Parameters.Insert("timeZone", "Europe/Moscow"); Parameters.Insert("timeZone", "Europe/Moscow");
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get calendar // Get calendar
// Gets calendar information by ID // Gets calendar information by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCalendarMetadata(Val Token, Val Calendar) Export Function GetCalendarMetadata(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit calendar // Edit calendar
// Edits properties of an existing calendar // Edits properties of an existing calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Name - String - New name - title // Name - String - New name - title
// Description - String - New calendar description - description // Description - String - New calendar description - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditCalendarMetadata(Val Token Function EditCalendarMetadata(Val Token
, Val Calendar , Val Calendar
, Val Name = "" , Val Name = ""
, Val Description = "") Export , Val Description = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Description); OPI_TypeConversion.GetLine(Description);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Name) Then If ValueIsFilled(Name) Then
Parameters.Insert("summary", Name); Parameters.Insert("summary", Name);
EndIf; EndIf;
If ValueIsFilled(Description) Then If ValueIsFilled(Description) Then
Parameters.Insert("description", Description); Parameters.Insert("description", Description);
EndIf; EndIf;
Response = OPI_Tools.Patch(URL, Parameters, Headers, True); Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Return Response; Return Response;
EndFunction EndFunction
// Clear primary calendar // Clear primary calendar
// Clears the event list of the primary calendar // Clears the event list of the primary calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function ClearMainCalendar(Val Token) Export Function ClearMainCalendar(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear"; URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Response = OPI_Tools.Post(URL, , Headers, False); Response = OPI_Tools.Post(URL, , Headers, False);
Return Response; Return Response;
EndFunction EndFunction
// Delete calendar // Delete calendar
// Deletes a calendar by ID // Deletes a calendar by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteCalendar(Val Token, Val Calendar) Export Function DeleteCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -178,105 +178,105 @@ EndFunction
// Get list of calendars // Get list of calendars
// Gets an array of account calendars // Gets an array of account calendars
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of calendar data mappings // Map Of KeyAndValue - Array of calendar data mappings
Function GetCalendarList(Val Token) Export Function GetCalendarList(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfCalendars = New Array; ArrayOfCalendars = New Array;
GetCalendarsListRecursively(Headers, ArrayOfCalendars); GetCalendarsListRecursively(Headers, ArrayOfCalendars);
Return ArrayOfCalendars; Return ArrayOfCalendars;
EndFunction EndFunction
// Add calendar to list // Add calendar to list
// Adds an existing calendar to the user's list // Adds an existing calendar to the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function AddCalendarToList(Val Token, Val Calendar) Export Function AddCalendarToList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("id", Calendar); Parameters.Insert("id", Calendar);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list calendar // Get list calendar
// Gets a calendar from the user's list by ID // Gets a calendar from the user's list by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetListCalendar(Val Token, Val Calendar) Export Function GetListCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Remove calendar from list // Remove calendar from list
// Removes a calendar from the user's list // Removes a calendar from the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteCalendarFromList(Val Token, Val Calendar) Export Function DeleteCalendarFromList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit list calendar // Edit list calendar
// Edits the properties of a calendar from the user's list // Edits the properties of a calendar from the user's list
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// PrimaryColor - String - HEX primary color (#ffffff) - primary // PrimaryColor - String - HEX primary color (#ffffff) - primary
// SecondaryColor - String - HEX secondary color (#ffffff) - secondary // SecondaryColor - String - HEX secondary color (#ffffff) - secondary
// Hidden - Boolean - Hidden calendar - hidden // Hidden - Boolean - Hidden calendar - hidden
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditListCalendar(Val Token Function EditListCalendar(Val Token
@ -284,23 +284,23 @@ Function EditListCalendar(Val Token
, Val PrimaryColor , Val PrimaryColor
, Val SecondaryColor , Val SecondaryColor
, Val Hidden = False) Export , Val Hidden = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(PrimaryColor); OPI_TypeConversion.GetLine(PrimaryColor);
OPI_TypeConversion.GetLine(SecondaryColor); OPI_TypeConversion.GetLine(SecondaryColor);
OPI_TypeConversion.GetBoolean(Hidden); OPI_TypeConversion.GetBoolean(Hidden);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat=true"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat =true";
Parameters = New Map; Parameters = New Map;
Parameters.Insert("hidden" , Hidden); Parameters.Insert("hidden" , Hidden);
Parameters.Insert("foregroundColor", PrimaryColor); Parameters.Insert("foregroundColor", PrimaryColor);
Parameters.Insert("backgroundColor", SecondaryColor); Parameters.Insert("backgroundColor", SecondaryColor);
Response = OPI_Tools.Put(URL, Parameters, Headers); Response = OPI_Tools.Put(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -310,167 +310,167 @@ EndFunction
#Region EventManagement #Region EventManagement
// Get event description !NOCLI // Get event description !NOCLI
// //
// Returns: // Returns:
// Map Of KeyAndValue - Empty event template // Map Of KeyAndValue - Empty event template
Function GetEventDescription() Export Function GetEventDescription() Export
CurrentDate = OPI_Tools.GetCurrentDate(); CurrentDate = OPI_Tools.GetCurrentDate();
Hour = 3600; Hour = 3600;
Event = New Map; Event = New Map;
Event.Insert("Description" , ""); // Event description Event.Insert("Description" , ""); // Event description
Event.Insert("Title" , "New event"); // Title events Event.Insert("Title" , "New event"); // Title events
Event.Insert("Venue" , ""); // String description of the venue of the event Event.Insert("Venue" , ""); // String description of the venue of the event
Event.Insert("StartDate" , CurrentDate); // Date of start events Event.Insert("StartDate" , CurrentDate); // Date of start events
Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events
Event.Insert("ArrayOfAttachmentURLs", New Map); // Key - name, Value - URL to file Event.Insert("ArrayOfAttachmentURLs", New Map); // Key - name, Value - URL to file
Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants
Return Event; Return Event;
EndFunction EndFunction
// Get list of events // Get list of events
// Gets the list of all calendar events // Gets the list of all calendar events
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of event maps // Map Of KeyAndValue - Array of event maps
Function GetEventList(Val Token, Val Calendar) Export Function GetEventList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfEvents = New Array; ArrayOfEvents = New Array;
GetEventsListRecursively(Headers, Calendar, ArrayOfEvents); GetEventsListRecursively(Headers, Calendar, ArrayOfEvents);
Return ArrayOfEvents; Return ArrayOfEvents;
EndFunction EndFunction
// Get event // Get event
// Gets an event by ID // Gets an event by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetEvent(Val Token, Val Calendar, Val Event) Export Function GetEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events/" + "/events/"
+ Event; + Event;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create event // Create event
// Creates a new event // Creates a new event
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// EventDescription - Map Of KeyAndValue - Event description - props // EventDescription - Map Of KeyAndValue - Event description - props
// //
// Returns: // Returns:
// String, Arbitrary, HTTPResponse, BinaryData, Undefined - Google server response // String, Arbitrary, HTTPResponse, BinaryData, Undefined - Google server response
Function CreateEvent(Val Token, Val Calendar, Val EventDescription) Export Function CreateEvent(Val Token, Val Calendar, Val EventDescription) Export
Return EventManagement(Token, Calendar, EventDescription); Return EventManagement(Token, Calendar, EventDescription);
EndFunction EndFunction
// Move event // Move event
// Moves an event to another calendar // Moves an event to another calendar
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// SourceCalendar - String - ID of the source calendar - from // SourceCalendar - String - ID of the source calendar - from
// TargetCalendar - String - ID of the target calendar - to // TargetCalendar - String - ID of the target calendar - to
// Event - String - ID of the source calendar event - event // Event - String - ID of the source calendar event - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function MoveEvent(Val Token, Val SourceCalendar, Val TargetCalendar, Val Event) Export Function MoveEvent(Val Token, Val SourceCalendar, Val TargetCalendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(SourceCalendar); OPI_TypeConversion.GetLine(SourceCalendar);
OPI_TypeConversion.GetLine(TargetCalendar); OPI_TypeConversion.GetLine(TargetCalendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ SourceCalendar + SourceCalendar
+ "/events/" + "/events/"
+ Event + Event
+ "/move?destination=" + "/move?destination="
+ TargetCalendar; + TargetCalendar;
Response = OPI_Tools.Post(URL, , Headers); Response = OPI_Tools.Post(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Edit event // Edit event
// Edits an existing event // Edits an existing event
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// EventDescription - String - New event description - props // EventDescription - String - New event description - props
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditEvent(Val Token, Val Calendar, Val EventDescription, Val Event) Export Function EditEvent(Val Token, Val Calendar, Val EventDescription, Val Event) Export
Return EventManagement(Token, Calendar, EventDescription, Event); Return EventManagement(Token, Calendar, EventDescription, Event);
EndFunction EndFunction
// Delete event // Delete event
// Deletes an event by ID // Deletes an event by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Calendar - String - Calendar ID - calendar // Calendar - String - Calendar ID - calendar
// Event - String - Event ID - event // Event - String - Event ID - event
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteEvent(Val Token, Val Calendar, Val Event) Export Function DeleteEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events/" + "/events/"
+ Event; + Event;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -482,51 +482,51 @@ EndFunction
#Region Private #Region Private
Function ConvertDate(Val Date) Function ConvertDate(Val Date)
OPI_TypeConversion.GetDate(Date); OPI_TypeConversion.GetDate(Date);
DateStructure = New Structure; DateStructure = New Structure;
If Not TypeOf(Date) = Type("Date") Then If Not TypeOf(Date) = Type("Date") Then
Return Undefined; Return Undefined;
EndIf; EndIf;
If Date = BegOfDay(Date) Then If Date = BegOfDay(Date) Then
DateFormat = "DF=yyyy-MM-dd"; DateFormat = "DF=yyyy-MM-dd";
Field = "date"; Field = "date";
Else Else
DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ"; DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ";
Field = "dateTime"; Field = "dateTime";
EndIf; EndIf;
Date = Format(Date, DateFormat); Date = Format(Date, DateFormat);
DateStructure.Insert(Field , Date); DateStructure.Insert(Field , Date);
DateStructure.Insert("timeZone", "Europe/Moscow"); DateStructure.Insert("timeZone", "Europe/Moscow");
Return DateStructure; Return DateStructure;
EndFunction EndFunction
Function ConvertAttachments(Val Attachments) Function ConvertAttachments(Val Attachments)
OPI_TypeConversion.GetCollection(Attachments); OPI_TypeConversion.GetCollection(Attachments);
AttachmentsArray = New Array; AttachmentsArray = New Array;
If TypeOf(Attachments) = Type("Map") Or TypeOf(Attachments) = Type("Structure") Then If TypeOf(Attachments) = Type("Map") Or TypeOf(Attachments) = Type("Structure") Then
For Each Attachment In Attachments Do For Each Attachment In Attachments Do
CurrentAttachment = New Structure; CurrentAttachment = New Structure;
CurrentAttachment.Insert("title" , Attachment.Key); CurrentAttachment.Insert("title" , Attachment.Key);
CurrentAttachment.Insert("fileUrl", Attachment.Value); CurrentAttachment.Insert("fileUrl", Attachment.Value);
AttachmentsArray.Add(CurrentAttachment); AttachmentsArray.Add(CurrentAttachment);
EndDo; EndDo;
EndIf; EndIf;
If AttachmentsArray.Count() > 0 Then If AttachmentsArray.Count() > 0 Then
Return AttachmentsArray; Return AttachmentsArray;
Else Else
@ -536,105 +536,105 @@ Function ConvertAttachments(Val Attachments)
EndFunction EndFunction
Function EventManagement(Val Token, Val Calendar, Val EventDescription, Val Event = "") Function EventManagement(Val Token, Val Calendar, Val EventDescription, Val Event = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar); OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event); OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetCollection(EventDescription); OPI_TypeConversion.GetCollection(EventDescription);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
Existing = ValueIsFilled(Event); Existing = ValueIsFilled(Event);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar + Calendar
+ "/events" + "/events"
+ ?(Existing, "/" + Event, ""); + ?(Existing, "/" + Event, "");
Date0 = EventDescription["StartDate"]; Date0 = EventDescription["StartDate"];
Date1 = EventDescription["EndDate"]; Date1 = EventDescription["EndDate"];
Attachments = EventDescription["ArrayOfAttachmentURLs"]; Attachments = EventDescription["ArrayOfAttachmentURLs"];
Attachments = ConvertAttachments(Attachments); Attachments = ConvertAttachments(Attachments);
Notifications = ?(EventDescription["SendNotifications"] = Undefined Notifications = ?(EventDescription["SendNotifications"] = Undefined
, False , False
, EventDescription["SendNotifications"]); , EventDescription["SendNotifications"]);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("summary" , EventDescription["Title"]); Parameters.Insert("summary" , EventDescription["Title"]);
Parameters.Insert("description", EventDescription["Description"]); Parameters.Insert("description", EventDescription["Description"]);
Parameters.Insert("location" , EventDescription["Venue"]); Parameters.Insert("location" , EventDescription["Venue"]);
Parameters.Insert("start" , ConvertDate(Date0)); Parameters.Insert("start" , ConvertDate(Date0));
Parameters.Insert("end" , ConvertDate(Date1)); Parameters.Insert("end" , ConvertDate(Date1));
Parameters.Insert("attachments", Attachments); Parameters.Insert("attachments", Attachments);
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("sendUpdates" , ?(Notifications, "all", "none")); URLParameters.Insert("sendUpdates" , ?(Notifications , "all" , "none"));
URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false")); URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false"));
URL = URL + OPI_Tools.RequestParametersToString(URLParameters); URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
OPI_Tools.RemoveEmptyCollectionFields(Parameters); OPI_Tools.RemoveEmptyCollectionFields(Parameters);
If Existing Then If Existing Then
Response = OPI_Tools.Patch(URL, Parameters, Headers, True); Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Else Else
Response = OPI_Tools.Post(URL, Parameters, Headers, True); Response = OPI_Tools.Post(URL, Parameters, Headers, True);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Procedure GetCalendarsListRecursively(Val Headers, ArrayOfCalendars, Page = "") Procedure GetCalendarsListRecursively(Val Headers, ArrayOfCalendars, Page = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList" Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Parameters , Parameters
, Headers); , Headers);
Calendars = Result[Items]; Calendars = Result[Items];
Page = Result[NPT]; Page = Result[NPT];
For Each Calendar In Calendars Do For Each Calendar In Calendars Do
ArrayOfCalendars.Add(Calendar); ArrayOfCalendars.Add(Calendar);
EndDo; EndDo;
If Calendars.Count() > 0 And ValueIsFilled(Page) Then If Calendars.Count() > 0 And ValueIsFilled(Page) Then
GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page); GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetEventsListRecursively(Val Headers, Val Calendar, ArrayOfEvents, Page = "") Procedure GetEventsListRecursively(Val Headers, Val Calendar, ArrayOfEvents, Page = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events" Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events"
, Parameters , Parameters
, Headers); , Headers);
Events = Result[Items]; Events = Result[Items];
Page = Result[NPT]; Page = Result[NPT];
For Each Event In Events Do For Each Event In Events Do
ArrayOfEvents.Add(Event); ArrayOfEvents.Add(Event);
EndDo; EndDo;
If Events.Count() > 0 And ValueIsFilled(Page) Then If Events.Count() > 0 And ValueIsFilled(Page) Then
GetEventsListRecursively(Headers, ArrayOfEvents, Page); GetEventsListRecursively(Headers, ArrayOfEvents, Page);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion

View File

@ -43,277 +43,277 @@
// Get object information // Get object information
// Gets information about a folder or file by ID // Gets information about a folder or file by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the file or folder - object // Identifier - String - Identifier of the file or folder - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetObjectInformation(Val Token, Val Identifier) Export Function GetObjectInformation(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list of directories // Get list of directories
// Gets the list of drive directories // Gets the list of drive directories
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// NameContains - String - Filter by name - querry // NameContains - String - Filter by name - querry
// Detailed - Boolean - Adds a list of files to the directory fields - depth // Detailed - Boolean - Adds a list of files to the directory fields - depth
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of directory mappings // Map Of KeyAndValue - Array of directory mappings
Function GetDirectoriesList(Val Token, Val NameContains = "", Val Detailed = False) Export Function GetDirectoriesList(Val Token, Val NameContains = "", Val Detailed = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains); OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetBoolean(Detailed); OPI_TypeConversion.GetBoolean(Detailed);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array; ArrayOfObjects = New Array;
Filter = New Array; Filter = New Array;
Filter.Add("mimeType = 'application/vnd.google-apps.folder'"); Filter.Add("mimeType = 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'"); Filter.Add("name contains '" + NameContains + "'");
EndIf; EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter); GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter);
If Detailed Then If Detailed Then
BreakDownObjectsInDetail(Token, ArrayOfObjects); BreakDownObjectsInDetail(Token, ArrayOfObjects);
EndIf; EndIf;
Return ArrayOfObjects; Return ArrayOfObjects;
EndFunction EndFunction
// Get list of files // Get list of files
// Gets the list of files // Gets the list of files
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// NameContains - String - Filter by name - querry // NameContains - String - Filter by name - querry
// Directory - String - Filter by parent directory ID - catalog // Directory - String - Filter by parent directory ID - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - Array of file mappings // Map Of KeyAndValue - Array of file mappings
Function GetFilesList(Val Token, Val NameContains = "", Val Directory = "") Export Function GetFilesList(Val Token, Val NameContains = "", Val Directory = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains); OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetLine(Directory); OPI_TypeConversion.GetLine(Directory);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array; ArrayOfObjects = New Array;
Filter = New Array; Filter = New Array;
Filter.Add("mimeType != 'application/vnd.google-apps.folder'"); Filter.Add("mimeType != 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'"); Filter.Add("name contains '" + NameContains + "'");
EndIf; EndIf;
If ValueIsFilled(Directory) Then If ValueIsFilled(Directory) Then
Filter.Add("'" + Directory + "' in parents"); Filter.Add("'" + Directory + "' in parents");
EndIf; EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter); GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter);
Return ArrayOfObjects; Return ArrayOfObjects;
EndFunction EndFunction
// Upload file // Upload file
// Uploads a file to the drive // Uploads a file to the drive
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// File - BinaryData,String - File to be uploaded - file // File - BinaryData,String - File to be uploaded - file
// Description - Map Of KeyAndValue - See GetFileDescription - props - JSON description or path to .json // Description - Map Of KeyAndValue - See GetFileDescription - props - JSON description or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function UploadFile(Val Token, Val File, Val Description) Export Function UploadFile(Val Token, Val File, Val Description) Export
Return FileManagement(Token, File, Description); Return FileManagement(Token, File, Description);
EndFunction EndFunction
// Create folder // Create folder
// Creates an empty directory on the drive // Creates an empty directory on the drive
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Folder name - title // Name - String - Folder name - title
// Parent - String - Parent - catalog // Parent - String - Parent - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateFolder(Val Token, Val Name, Val Parent = "") Export Function CreateFolder(Val Token, Val Name, Val Parent = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Parent); OPI_TypeConversion.GetLine(Parent);
Description = New Map; Description = New Map;
Description.Insert("MIME" , "application/vnd.google-apps.folder"); Description.Insert("MIME" , "application/vnd.google-apps.folder");
Description.Insert("Name" , Name); Description.Insert("Name" , Name);
Description.Insert("Description", ""); Description.Insert("Description", "");
Description.Insert("Parent", ?(ValueIsFilled(Parent), Parent, "root")); Description.Insert("Parent" , ?(ValueIsFilled(Parent), Parent, "root"));
Return FileManagement(Token, , Description); Return FileManagement(Token, , Description);
EndFunction EndFunction
// Download file // Download file
// Gets file by ID // Gets file by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - File identifier - object // Identifier - String - File identifier - object
// SavePath - String - File save path - out // SavePath - String - File save path - out
// //
// Returns: // Returns:
// BinaryData,String - Binary data or file path when SavePath parameter is specified // BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Identifier, Val SavePath = "") Export Function DownloadFile(Val Token, Val Identifier, Val SavePath = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Map; Parameters = New Map;
Parameters.Insert("alt", "media"); Parameters.Insert("alt", "media");
Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath); Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath);
Return Response; Return Response;
EndFunction EndFunction
// Copy object // Copy object
// Copies file or directory // Copies file or directory
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Object identifier - object // Identifier - String - Object identifier - object
// NewName - String - New object name - title // NewName - String - New object name - title
// NewParent - String - New parent directory - catalog // NewParent - String - New parent directory - catalog
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CopyObject(Val Token, Val Identifier, Val NewName = "", Val NewParent = "") Export Function CopyObject(Val Token, Val Identifier, Val NewName = "", Val NewParent = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NewName); OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewParent); OPI_TypeConversion.GetLine(NewParent);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy"; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy";
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(NewName) Then If ValueIsFilled(NewName) Then
Parameters.Insert("name", NewName); Parameters.Insert("name", NewName);
EndIf; EndIf;
If ValueIsFilled(NewParent) Then If ValueIsFilled(NewParent) Then
ArrayOfParents = New Array; ArrayOfParents = New Array;
ArrayOfParents.Add(NewParent); ArrayOfParents.Add(NewParent);
Parameters.Insert("parents", ArrayOfParents); Parameters.Insert("parents", ArrayOfParents);
EndIf; EndIf;
Response = OPI_Tools.Post(URL, Parameters , Headers, True); Response = OPI_Tools.Post(URL, Parameters , Headers, True);
Return Response; Return Response;
EndFunction EndFunction
// Update file // Update file
// Updates file binary data // Updates file binary data
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object to update - object // Identifier - String - Identifier of the object to update - object
// File - BinaryData,String - File source for update - file // File - BinaryData,String - File source for update - file
// NewName - String - New file name (if necessary) - title // NewName - String - New file name (if necessary) - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function UpdateFile(Val Token, Val Identifier, Val File, Val NewName = "") Export Function UpdateFile(Val Token, Val Identifier, Val File, Val NewName = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewName); OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
If ValueIsFilled(NewName) Then If ValueIsFilled(NewName) Then
Description = New Map; Description = New Map;
Description.Insert("Name", NewName); Description.Insert("Name", NewName);
Else Else
Description = ""; Description = "";
EndIf; EndIf;
Return FileManagement(Token, File, Description, Identifier); Return FileManagement(Token, File, Description, Identifier);
EndFunction EndFunction
// Delete object // Delete object
// Deletes file or directory by ID // Deletes file or directory by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object to delete - object // Identifier - String - Identifier of the object to delete - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteObject(Val Token, Val Identifier) Export Function DeleteObject(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get file description !NOCLI // Get file description !NOCLI
// //
// Returns: // Returns:
// Map Of KeyAndValue - File description // Map Of KeyAndValue - File description
Function GetFileDescription() Export Function GetFileDescription() Export
Description = New Map; Description = New Map;
Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file
Description.Insert("Name" , "New file.jpg"); // File name with extension Description.Insert("Name" , "New file.jpg"); // File name with extension
Description.Insert("Description" , "This is a new file"); // File description Description.Insert("Description" , "This is a new file"); // File description
Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root
Return Description; Return Description;
EndFunction EndFunction
#EndRegion #EndRegion
@ -322,107 +322,107 @@ EndFunction
// Create comment // Create comment
// Creates a comment for a file or directory // Creates a comment for a file or directory
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Identifier of the object that needs a comment - object // Identifier - String - Identifier of the object that needs a comment - object
// Comment - String - Comment text - text // Comment - String - Comment text - text
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateComment(Val Token, Val Identifier, Val Comment) Export Function CreateComment(Val Token, Val Identifier, Val Comment) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Comment); OPI_TypeConversion.GetLine(Comment);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields=*"; URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields =*";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("content", Comment); Parameters.Insert("content", Comment);
Response = OPI_Tools.POST(URL, Parameters, Headers); Response = OPI_Tools.POST(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get comment // Get comment
// Gets comment by ID // Gets comment by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Identifier of the file or directory where the comment is located - object // ObjectID - String - Identifier of the file or directory where the comment is located - object
// CommentID - String - Comment identifier - comment // CommentID - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetComment(Val Token, Val ObjectID, Val CommentID) Export Function GetComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID); OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get list of comments // Get list of comments
// Gets the list of all comments of the object // Gets the list of all comments of the object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Object identifier - object // ObjectID - String - Object identifier - object
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCommentList(Val Token, Val ObjectID) Export Function GetCommentList(Val Token, Val ObjectID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments"; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers); Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete comment // Delete comment
// Deletes comment by ID // Deletes comment by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ObjectID - String - Identifier of the file or directory where the comment is located - object // ObjectID - String - Identifier of the file or directory where the comment is located - object
// CommentID - String - Comment identifier - comment // CommentID - String - Comment identifier - comment
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteComment(Val Token, Val ObjectID, Val CommentID) Export Function DeleteComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID); OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID); OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID; URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Response = OPI_Tools.Delete(URL, , Headers); Response = OPI_Tools.Delete(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
@ -433,294 +433,294 @@ EndFunction
#Region Private #Region Private
Procedure GetObjectsListRecursively(Val Headers, ArrayOfObjects, Detailed = False, Filter = "", Page = "") Procedure GetObjectsListRecursively(Val Headers, ArrayOfObjects, Detailed = False, Filter = "", Page = "")
URL = "https://www.googleapis.com/drive/v3/files"; URL = "https://www.googleapis.com/drive/v3/files";
Files = "files"; Files = "files";
NPT = "nextPageToken"; NPT = "nextPageToken";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("fields", "*"); Parameters.Insert("fields", "*");
If ValueIsFilled(Page) Then If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page); Parameters.Insert("pageToken", Page);
EndIf; EndIf;
If ValueIsFilled(Filter) And TypeOf(Filter) = Type("Array") Then If ValueIsFilled(Filter) And TypeOf(Filter) = Type("Array") Then
FilterString = StrConcat(Filter, " and "); FilterString = StrConcat(Filter, " and ");
Parameters.Insert("q", FilterString); Parameters.Insert("q", FilterString);
EndIf; EndIf;
Result = OPI_Tools.Get(URL, Parameters, Headers); Result = OPI_Tools.Get(URL, Parameters, Headers);
Objects = Result[Files]; Objects = Result[Files];
Page = Result[NPT]; Page = Result[NPT];
For Each CurrentObject In Objects Do For Each CurrentObject In Objects Do
ArrayOfObjects.Add(CurrentObject); ArrayOfObjects.Add(CurrentObject);
EndDo; EndDo;
If Objects.Count() > 0 And ValueIsFilled(Page) Then If Objects.Count() > 0 And ValueIsFilled(Page) Then
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page); GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure BreakDownObjectsInDetail(Val Token, ArrayOfObjects) Procedure BreakDownObjectsInDetail(Val Token, ArrayOfObjects)
For Each CurrentObject In ArrayOfObjects Do For Each CurrentObject In ArrayOfObjects Do
ArrayOfFiles = New Array; ArrayOfFiles = New Array;
CurrentID = CurrentObject["id"]; CurrentID = CurrentObject["id"];
Result = GetFilesList(Token, , CurrentID); Result = GetFilesList(Token, , CurrentID);
For Each File In Result Do For Each File In Result Do
ArrayOfFiles.Add(File); ArrayOfFiles.Add(File);
EndDo; EndDo;
CurrentObject.Insert("files", ArrayOfFiles); CurrentObject.Insert("files", ArrayOfFiles);
EndDo; EndDo;
EndProcedure EndProcedure
Procedure FormFileUploadParameters(Description) Procedure FormFileUploadParameters(Description)
FormedDescription = New Map; FormedDescription = New Map;
OPI_Tools.RemoveEmptyCollectionFields(Description); OPI_Tools.RemoveEmptyCollectionFields(Description);
FieldMapping = New Map; FieldMapping = New Map;
FieldMapping.Insert("MIME" , "mimeType"); FieldMapping.Insert("MIME" , "mimeType");
FieldMapping.Insert("Name" , "name"); FieldMapping.Insert("Name" , "name");
FieldMapping.Insert("Description" , "description"); FieldMapping.Insert("Description" , "description");
FieldMapping.Insert("Parent" , "parents"); FieldMapping.Insert("Parent" , "parents");
FieldMapping.Insert("Extension", "fileExtension"); FieldMapping.Insert("Extension" , "fileExtension");
For Each Element In Description Do For Each Element In Description Do
If Element.Key = "Parent" Then If Element.Key = "Parent" Then
CurrentValue = New Array; CurrentValue = New Array;
CurrentValue.Add(Element.Value); CurrentValue.Add(Element.Value);
Else Else
CurrentValue = Element.Value; CurrentValue = Element.Value;
EndIf; EndIf;
FieldName = FieldMapping.Get(Element.Key); FieldName = FieldMapping.Get(Element.Key);
FormedDescription.Insert(FieldName, CurrentValue); FormedDescription.Insert(FieldName, CurrentValue);
EndDo; EndDo;
Description = FormedDescription; Description = FormedDescription;
EndProcedure EndProcedure
Function FileManagement(Val Token, Val File = "", Val Description = "", Val Identifier = "") Function FileManagement(Val Token, Val File = "", Val Description = "", Val Identifier = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
If ValueIsFilled(Description) Then If ValueIsFilled(Description) Then
OPI_TypeConversion.GetCollection(Description); OPI_TypeConversion.GetCollection(Description);
EndIf; EndIf;
MimeType = "mimeType"; MimeType = "mimeType";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
MIME = GetObjectInformation(Token, Identifier)[MimeType]; MIME = GetObjectInformation(Token, Identifier)[MimeType];
Else Else
MIME = Description["MIME"]; MIME = Description["MIME"];
EndIf; EndIf;
If Not ValueIsFilled(Description) Then If Not ValueIsFilled(Description) Then
Description = New Map; Description = New Map;
EndIf; EndIf;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
FormFileUploadParameters(Description); FormFileUploadParameters(Description);
JSONDescription = OPI_Tools.JSONString(Description); JSONDescription = OPI_Tools.JSONString(Description);
FileMapping = New Map; FileMapping = New Map;
If ValueIsFilled(File) Then If ValueIsFilled(File) Then
ChunkSize = 268435457; ChunkSize = 268435457;
Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize); Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize);
FileMapping.Insert(File, MIME); FileMapping.Insert(File, MIME);
If Size < ChunkSize And TypeOf(File) = Type("BinaryData") Then If Size < ChunkSize And TypeOf(File) = Type("BinaryData") Then
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier); Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
Else Else
Response = UploadLargeFile(Description, FileMapping, Headers, Identifier); Response = UploadLargeFile(Description, FileMapping, Headers, Identifier);
EndIf; EndIf;
Else Else
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier); Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadSmallFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "") Function UploadSmallFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
URL = StrReplace(URL, "/files", "/files/" + Identifier); URL = StrReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers); Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers);
Else Else
Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers); Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadLargeFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "") Function UploadLargeFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
For Each File In FileMapping Do For Each File In FileMapping Do
Binary = File.Key; Binary = File.Key;
Break; Break;
EndDo; EndDo;
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
If ValueIsFilled(Identifier) Then If ValueIsFilled(Identifier) Then
URL = StrReplace(URL, "/files", "/files/" + Identifier); URL = StrReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.Patch(URL, Description, Headers, True, True); Response = OPI_Tools.Patch(URL, Description, Headers, True, True);
Else Else
Response = OPI_Tools.Post(URL, Description, Headers, True, True); Response = OPI_Tools.Post(URL, Description, Headers, True, True);
EndIf; EndIf;
UploadURL = Response.Headers["Location"]; UploadURL = Response.Headers["Location"];
If Not ValueIsFilled(UploadURL) Then If Not ValueIsFilled(UploadURL) Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
UploadResponse = UploadFileInParts(Binary, UploadURL); UploadResponse = UploadFileInParts(Binary, UploadURL);
Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response); Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response);
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndFunction EndFunction
Function UploadFileInParts(Val Binary, Val UploadURL) Function UploadFileInParts(Val Binary, Val UploadURL)
Response = ""; Response = "";
ChunkSize = 268435456; ChunkSize = 268435456;
BytesRead = 0; BytesRead = 0;
CurrentPosition = 0; CurrentPosition = 0;
TotalSize = Binary.Size(); TotalSize = Binary.Size();
StrTotalSize = OPI_Tools.NumberToString(TotalSize); StrTotalSize = OPI_Tools.NumberToString(TotalSize);
DataReader = New DataReader(Binary); DataReader = New DataReader(Binary);
SourceStream = DataReader.SourceStream(); SourceStream = DataReader.SourceStream();
WHile BytesRead < TotalSize Do WHile BytesRead < TotalSize Do
BytesRead = SourceStream.CurrentPosition(); BytesRead = SourceStream.CurrentPosition();
Result = DataReader.Read(ChunkSize); Result = DataReader.Read(ChunkSize);
CurrentData = Result.GetBinaryData(); CurrentData = Result.GetBinaryData();
CurrentSize = CurrentData.Size(); CurrentSize = CurrentData.Size();
NextPosition = CurrentPosition + CurrentSize - 1; NextPosition = CurrentPosition + CurrentSize - 1;
If Not ValueIsFilled(CurrentData) Then If Not ValueIsFilled(CurrentData) Then
Break; Break;
EndIf; EndIf;
StreamHeader = "bytes " StreamHeader = "bytes "
+ OPI_Tools.NumberToString(CurrentPosition) + OPI_Tools.NumberToString(CurrentPosition)
+ "-" + "-"
+ OPI_Tools.NumberToString(NextPosition) + OPI_Tools.NumberToString(NextPosition)
+ "/" + "/"
+ StrTotalSize; + StrTotalSize;
AdditionalHeaders = New Map; AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize)); AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize));
AdditionalHeaders.Insert("Content-Range" , StreamHeader); AdditionalHeaders.Insert("Content-Range" , StreamHeader);
AdditionalHeaders.Insert("Content-Type" , "application/octet-stream"); AdditionalHeaders.Insert("Content-Type" , "application/octet-stream");
Response = OPI_Tools.Put(UploadURL, CurrentData, AdditionalHeaders, False, True); Response = OPI_Tools.Put(UploadURL, CurrentData, AdditionalHeaders, False, True);
CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition); CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition);
If ValueIsFilled(CheckResult) Then If ValueIsFilled(CheckResult) Then
Return CheckResult; Return CheckResult;
EndIf; EndIf;
// !OInt KB = 1024; // !OInt KB = 1024;
// !OInt MB = KB * KB; // !OInt MB = KB * KB;
// !OInt Message(OPI_Tools.ProgressInfo(CurrentPosition, TotalSize, "MB", MB)); // !OInt Message(OPI_Tools.ProgressInfo(CurrentPosition, TotalSize, "MB", MB));
// !OInt RunGarbageCollection(); // !OInt RunGarbageCollection();
// !OInt FreeObject(CurrentData); // !OInt FreeObject(CurrentData);
EndDo; EndDo;
Return Response; Return Response;
EndFunction EndFunction
Function CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition) Function CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition)
StartOfErrorCodes = 400; StartOfErrorCodes = 400;
EndOfFailureCodes = 600; EndOfFailureCodes = 600;
StartOfSuccessCodes = 200; StartOfSuccessCodes = 200;
EndOfSuccessCodes = 300; EndOfSuccessCodes = 300;
Redirection = 308; Redirection = 308;
If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then
StreamHeader = "bytes */" + StrTotalSize; StreamHeader = "bytes */" + StrTotalSize;
AdditionalHeaders.Insert("Content-Range" , StreamHeader); AdditionalHeaders.Insert("Content-Range" , StreamHeader);
CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True); CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True);
If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then
OPI_Tools.ProcessResponse(CheckResponse); OPI_Tools.ProcessResponse(CheckResponse);
Return CheckResponse; Return CheckResponse;
ElsIf CheckResponse.StatusCode = Redirection Then ElsIf CheckResponse.StatusCode = Redirection Then
UploadedData = Response.Headers["Range"]; UploadedData = Response.Headers["Range"];
Else Else
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
Else Else
UploadedData = Response.Headers["Range"]; UploadedData = Response.Headers["Range"];
EndIf; EndIf;
If Not ValueIsFilled(UploadedData) Then If Not ValueIsFilled(UploadedData) Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
UploadedData = StrReplace(UploadedData, "bytes=", ""); UploadedData = StrReplace(UploadedData, "bytes =", "");
ArrayOfInformation = StrSplit(UploadedData, "-", False); ArrayOfInformation = StrSplit(UploadedData, "-", False);
PartsRequired = 2; PartsRequired = 2;
If Not ArrayOfInformation.Count() = PartsRequired Then If Not ArrayOfInformation.Count() = PartsRequired Then
OPI_Tools.ProcessResponse(Response); OPI_Tools.ProcessResponse(Response);
Return Response; Return Response;
EndIf; EndIf;
CurrentPosition = Number(ArrayOfInformation[1]) + 1; CurrentPosition = Number(ArrayOfInformation[1]) + 1;
Return ""; Return "";
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -43,90 +43,90 @@
// Create spreadsheet // Create spreadsheet
// Creates a new spreadsheet // Creates a new spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Name - String - Name - title // Name - String - Name - title
// ArrayOfSheetNames - Array of String - Array of names to add new sheets to the spreadsheet - sheets // ArrayOfSheetNames - Array of String - Array of names to add new sheets to the spreadsheet - sheets
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CreateSpreadsheet(Val Token, Val Name, Val ArrayOfSheetNames) Export Function CreateSpreadsheet(Val Token, Val Name, Val ArrayOfSheetNames) Export
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(ArrayOfSheetNames); OPI_TypeConversion.GetCollection(ArrayOfSheetNames);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets"; URL = "https://sheets.googleapis.com/v4/spreadsheets";
Properties = New Structure("title" , Name); Properties = New Structure("title" , Name);
Sheets = New Array; Sheets = New Array;
FillSheetArray(ArrayOfSheetNames, Sheets); FillSheetArray(ArrayOfSheetNames, Sheets);
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("properties", Properties, "Collection", Parameters); OPI_Tools.AddField("properties", Properties, "Collection", Parameters);
OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters); OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get spreadsheet // Get spreadsheet
// Gets information about the spreadsheet by ID // Gets information about the spreadsheet by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Identifier - String - Spreadsheet identifier - spreadsheet // Identifier - String - Spreadsheet identifier - spreadsheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetSpreadsheet(Val Token, Val Identifier) Export Function GetSpreadsheet(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Identifier); OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Change spreadsheet name // Change spreadsheet name
// Changes the name of the existing spreadsheet // Changes the name of the existing spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// Name - String - New name - title // Name - String - New name - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function EditSpreadsheetTitle(Val Token, Val Spreadsheet, Val Name) Export Function EditSpreadsheetTitle(Val Token, Val Spreadsheet, Val Name) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Change = New Structure("title", Name); Change = New Structure("title", Name);
ChangeRequest = New Structure("properties,fields", Change, "title"); ChangeRequest = New Structure("properties,fields", Change, "title");
Request = New Structure("updateSpreadsheetProperties", ChangeRequest); Request = New Structure("updateSpreadsheetProperties", ChangeRequest);
ArrayOfRequests = New Array; ArrayOfRequests = New Array;
ArrayOfRequests.Add(Request); ArrayOfRequests.Add(Request);
Parameters = New Structure("requests", ArrayOfRequests); Parameters = New Structure("requests", ArrayOfRequests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -135,95 +135,95 @@ EndFunction
// Add sheet // Add sheet
// Adds a new sheet to the spreadsheet // Adds a new sheet to the spreadsheet
// //
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - Spreadsheet identifier - spreadsheet // Spreadsheet - String - Spreadsheet identifier - spreadsheet
// Name - String - NewSheetName - title // Name - String - NewSheetName - title
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function AddSheet(Val Token, Val Spreadsheet, Val Name) Export Function AddSheet(Val Token, Val Spreadsheet, Val Name) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Sheet = CreateSheet(Name); Sheet = CreateSheet(Name);
Requests = New Array; Requests = New Array;
Change = New Structure("addSheet", Sheet); Change = New Structure("addSheet", Sheet);
Requests.Add(Change); Requests.Add(Change);
Parameters = New Structure("requests", Requests); Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete sheet // Delete sheet
// Deletes a sheet from the spreadsheet // Deletes a sheet from the spreadsheet
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - Spreadsheet identifier - spreadsheet // Spreadsheet - String - Spreadsheet identifier - spreadsheet
// Sheet - String - IdentifierOfSheetToDelete - sheet // Sheet - String - IdentifierOfSheetToDelete - sheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function DeleteSheet(Val Token, Val Spreadsheet, Val Sheet) Export Function DeleteSheet(Val Token, Val Spreadsheet, Val Sheet) Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + ":batchUpdate";
Requests = New Array; Requests = New Array;
Sheet = New Structure("sheetId" , Sheet); Sheet = New Structure("sheetId" , Sheet);
Change = New Structure("deleteSheet", Sheet); Change = New Structure("deleteSheet", Sheet);
Requests.Add(Change); Requests.Add(Change);
Parameters = New Structure("requests", Requests); Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Copy sheet // Copy sheet
// Copies a sheet from one spreadsheet to another // Copies a sheet from one spreadsheet to another
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// From - String - Source spreadsheet ID - from // From - String - Source spreadsheet ID - from
// Target - String - Destination spreadsheet ID - to // Target - String - Destination spreadsheet ID - to
// Sheet - String - CopiedSheetID - sheet // Sheet - String - CopiedSheetID - sheet
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function CopySheet(Val Token, Val From, Val Target, Val Sheet) Export Function CopySheet(Val Token, Val From, Val Target, Val Sheet) Export
OPI_TypeConversion.GetLine(From); OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(Target); OPI_TypeConversion.GetLine(Target);
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ From + From
+ "/sheets/" + "/sheets/"
+ Sheet + Sheet
+ ":copyTo"; + ":copyTo";
Parameters = New Structure("destinationSpreadsheetId", Target); Parameters = New Structure("destinationSpreadsheetId", Target);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -232,14 +232,14 @@ EndFunction
// Set cell values // Set cell values
// Sets sheet cell values // Sets sheet cell values
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// ValueMapping - Map Of KeyAndValue - Fill data where the key is the cell name like A1 - data // ValueMapping - Map Of KeyAndValue - Fill data where the key is the cell name like A1 - data
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// MajorDimension - String - Main dimension when filling the array range - dim // MajorDimension - String - Main dimension when filling the array range - dim
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function SetCellValues(Val Token Function SetCellValues(Val Token
@ -247,90 +247,90 @@ Function SetCellValues(Val Token
, Val ValueMapping , Val ValueMapping
, Val Sheet = "" , Val Sheet = ""
, Val MajorDimension = "COLUMNS") Export , Val MajorDimension = "COLUMNS") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetCollection(ValueMapping); OPI_TypeConversion.GetCollection(ValueMapping);
If Not TypeOf(ValueMapping) = Type("Structure") If Not TypeOf(ValueMapping) = Type("Structure")
And Not TypeOf(ValueMapping) = Type("Map") Then And Not TypeOf(ValueMapping) = Type("Map") Then
Return "Failed to convert the structure of values to a collection"; Return "Failed to convert the structure of values to a collection";
EndIf; EndIf;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchUpdate";
DataArray = FormCellDataArray(ValueMapping, MajorDimension, Sheet); DataArray = FormCellDataArray(ValueMapping, MajorDimension, Sheet);
Parameters = New Structure("data,valueInputOption", DataArray, "USER_ENTERED"); Parameters = New Structure("data,valueInputOption", DataArray, "USER_ENTERED");
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Clear cells // Clear cells
// Clears the value in cells // Clears the value in cells
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// CellsArray - Array of String - Array of cells like A1 to be cleared - cells // CellsArray - Array of String - Array of cells like A1 to be cleared - cells
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function ClearCells(Val Token, Val Spreadsheet, Val CellsArray, Val Sheet = "") Export Function ClearCells(Val Token, Val Spreadsheet, Val CellsArray, Val Sheet = "") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
OPI_TypeConversion.GetCollection(CellsArray); OPI_TypeConversion.GetCollection(CellsArray);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchClear"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchClear";
FormCellNameArray(CellsArray, Sheet); FormCellNameArray(CellsArray, Sheet);
Parameters = New Structure("ranges", CellsArray); Parameters = New Structure("ranges", CellsArray);
Response = OPI_Tools.Post(URL, Parameters, Headers); Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get cell values // Get cell values
// Gets cell values of the table // Gets cell values of the table
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Spreadsheet - String - SpreadsheetID - spreadsheet // Spreadsheet - String - SpreadsheetID - spreadsheet
// CellsArray - Array of String - Array of A1 type cells to get (whole sheet if not filled) - cells // CellsArray - Array of String - Array of A1 type cells to get (whole sheet if not filled) - cells
// Sheet - String - Sheet name (first sheet by default) - sheetname // Sheet - String - Sheet name (first sheet by default) - sheetname
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetCellValues(Val Token, Val Spreadsheet, Val CellsArray = "", Val Sheet = "") Export Function GetCellValues(Val Token, Val Spreadsheet, Val CellsArray = "", Val Sheet = "") Export
OPI_TypeConversion.GetLine(Spreadsheet); OPI_TypeConversion.GetLine(Spreadsheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token); Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchGet"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Spreadsheet + "/values:batchGet";
If ValueIsFilled(CellsArray) Then If ValueIsFilled(CellsArray) Then
OPI_TypeConversion.GetCollection(CellsArray); OPI_TypeConversion.GetCollection(CellsArray);
FormCellNameArray(CellsArray, Sheet); FormCellNameArray(CellsArray, Sheet);
First = True; First = True;
For Each Cell In CellsArray Do For Each Cell In CellsArray Do
Delimiter = ?(First, "?", "&"); Delimiter = ?(First, "?", "&");
URL = URL + Delimiter + "ranges=" + Cell; URL = URL + Delimiter + "ranges =" + Cell;
First = False; First = False;
EndDo; EndDo;
Else Else
URL = URL + "?ranges='" + Sheet + "'"; URL = URL + "?ranges ='" + Sheet + "'";
EndIf; EndIf;
Response = OPI_Tools.Get(URL, , Headers); Response = OPI_Tools.Get(URL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -340,75 +340,75 @@ EndFunction
#Region Private #Region Private
Procedure FillSheetArray(Val ArrayOfNames, SheetArray) Procedure FillSheetArray(Val ArrayOfNames, SheetArray)
For Each SheetName In ArrayOfNames Do For Each SheetName In ArrayOfNames Do
Sheet = CreateSheet(SheetName); Sheet = CreateSheet(SheetName);
SheetArray.Add(Sheet); SheetArray.Add(Sheet);
EndDo; EndDo;
EndProcedure EndProcedure
Procedure AddSheetName(Cell, Val Sheet) Procedure AddSheetName(Cell, Val Sheet)
If ValueIsFilled(Sheet) Then If ValueIsFilled(Sheet) Then
Cell = "'" + Sheet + "'!" + Cell; Cell = "'" + Sheet + "'!" + Cell;
EndIf; EndIf;
EndProcedure EndProcedure
Function CreateSheet(Val Name) Function CreateSheet(Val Name)
OPI_TypeConversion.GetLine(Name); OPI_TypeConversion.GetLine(Name);
SheetProperties = New Structure("title" , Name); SheetProperties = New Structure("title" , Name);
Sheet = New Structure("properties", SheetProperties); Sheet = New Structure("properties", SheetProperties);
Return Sheet; Return Sheet;
EndFunction EndFunction
Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet) Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet)
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
DataArray = New Array; DataArray = New Array;
For Each CellData In ValueStructure Do For Each CellData In ValueStructure Do
CurrentValue = CellData.Value; CurrentValue = CellData.Value;
CurrentKey = CellData.Key; CurrentKey = CellData.Key;
AddSheetName(CurrentKey, Sheet); AddSheetName(CurrentKey, Sheet);
OPI_TypeConversion.GetArray(CurrentValue); OPI_TypeConversion.GetArray(CurrentValue);
CurrentData = New Map; CurrentData = New Map;
CurrentArray = New Array; CurrentArray = New Array;
CurrentArray.Add(CurrentValue); CurrentArray.Add(CurrentValue);
OPI_Tools.AddField("range" , CurrentKey , "String", CurrentData); OPI_Tools.AddField("range" , CurrentKey , "String", CurrentData);
OPI_Tools.AddField("values" , CurrentArray , "Array", CurrentData); OPI_Tools.AddField("values" , CurrentArray , "Array" , CurrentData);
OPI_Tools.AddField("majorDimension", MajorDimension, "String", CurrentData); OPI_Tools.AddField("majorDimension", MajorDimension, "String", CurrentData);
DataArray.Add(CurrentData); DataArray.Add(CurrentData);
EndDo; EndDo;
Return DataArray; Return DataArray;
EndFunction EndFunction
Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet) Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet)
OPI_TypeConversion.GetLine(Sheet); OPI_TypeConversion.GetLine(Sheet);
For N = 0 To ArrayOfNames.UBound() Do For N = 0 To ArrayOfNames.UBound() Do
AddSheetName(ArrayOfNames[N], Sheet); AddSheetName(ArrayOfNames[N], Sheet);
EndDo; EndDo;
EndProcedure EndProcedure
#EndRegion #EndRegion

View File

@ -41,97 +41,97 @@
// Generate code retrieval link // Generate code retrieval link
// Returns URL for browser authorization // Returns URL for browser authorization
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// Calendar - Boolean - Calendar methods permission - calendar // Calendar - Boolean - Calendar methods permission - calendar
// Drive - Boolean - Drive methods permission - drive // Drive - Boolean - Drive methods permission - drive
// Sheets - Boolean - Sheets methods permission - sheets // Sheets - Boolean - Sheets methods permission - sheets
// //
// Returns: // Returns:
// String - Code retrieval link // String - Code retrieval link
Function FormCodeRetrievalLink(Val ClientID Function FormCodeRetrievalLink(Val ClientID
, Val Calendar = True , Val Calendar = True
, Val Drive = True , Val Drive = True
, Val Sheets = True) Export , Val Sheets = True) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetBoolean(Calendar); OPI_TypeConversion.GetBoolean(Calendar);
OPI_TypeConversion.GetBoolean(Sheets); OPI_TypeConversion.GetBoolean(Sheets);
OPI_TypeConversion.GetBoolean(Drive); OPI_TypeConversion.GetBoolean(Drive);
URL = "https://accounts.google.com/o/oauth2/auth"; URL = "https://accounts.google.com/o/oauth2/auth";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("response_type", "code"); URLParameters.Insert("response_type", "code");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("redirect_uri" , "http://localhost"); URLParameters.Insert("redirect_uri" , "http://localhost");
URLParameters.Insert("access_type" , "offline"); URLParameters.Insert("access_type" , "offline");
URLParameters.Insert("scope" , GetPermissionsList(Calendar, Drive, Sheets)); URLParameters.Insert("scope" , GetPermissionsList(Calendar, Drive, Sheets));
URL = URL + OPI_Tools.RequestParametersToString(URLParameters); URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
Return URL; Return URL;
EndFunction EndFunction
// Get token by code // Get token by code
// Gets token by code from browser authorization // Gets token by code from browser authorization
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// Code - String - Code from browser - code // Code - String - Code from browser - code
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(Code); OPI_TypeConversion.GetLine(Code);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("grant_type" , "authorization_code"); URLParameters.Insert("grant_type" , "authorization_code");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("client_secret", ClientSecret); URLParameters.Insert("client_secret", ClientSecret);
URLParameters.Insert("redirect_uri" , "http://localhost"); URLParameters.Insert("redirect_uri" , "http://localhost");
URLParameters.Insert("code" , Code); URLParameters.Insert("code" , Code);
Response = OPI_Tools.Post(URL, URLParameters, , False); Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates token by Refresh token // Updates token by Refresh token
// //
// Parameters: // Parameters:
// ClientID - String - Client ID - id // ClientID - String - Client ID - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// RefreshToken - String - Refresh token - refresh // RefreshToken - String - Refresh token - refresh
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Google // Map Of KeyAndValue - serialized JSON response from Google
Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientID); OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken); OPI_TypeConversion.GetLine(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("grant_type" , "refresh_token"); URLParameters.Insert("grant_type" , "refresh_token");
URLParameters.Insert("client_id" , ClientID); URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("client_secret", ClientSecret); URLParameters.Insert("client_secret", ClientSecret);
URLParameters.Insert("refresh_token", RefreshToken); URLParameters.Insert("refresh_token", RefreshToken);
Response = OPI_Tools.Post(URL, URLParameters, , False); Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
@ -141,14 +141,14 @@ EndFunction
#Region Internal #Region Internal
Function GetAuthorizationHeader(Val Token) Export Function GetAuthorizationHeader(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "Bearer " + Token); Headers.Insert("Authorization", "Bearer " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
#EndRegion #EndRegion
@ -156,23 +156,23 @@ EndFunction
#Region ServiceProceduresAndFunctions #Region ServiceProceduresAndFunctions
Function GetPermissionsList(Calendar, Drive, Sheets) Function GetPermissionsList(Calendar, Drive, Sheets)
PermissionsArray = New Array; PermissionsArray = New Array;
If Calendar Then If Calendar Then
PermissionsArray.Add("https://www.googleapis.com/auth/calendar"); PermissionsArray.Add("https://www.googleapis.com/auth/calendar");
EndIf; EndIf;
If Drive Then If Drive Then
PermissionsArray.Add("https://www.googleapis.com/auth/drive"); PermissionsArray.Add("https://www.googleapis.com/auth/drive");
EndIf; EndIf;
If Sheets Then If Sheets Then
PermissionsArray.Add("https://www.googleapis.com/auth/spreadsheets"); PermissionsArray.Add("https://www.googleapis.com/auth/spreadsheets");
EndIf; EndIf;
Return StrConcat(PermissionsArray, " "); Return StrConcat(PermissionsArray, " ");
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -46,404 +46,404 @@
#Region Internal #Region Internal
Function GetTestingSectionMapping() Export Function GetTestingSectionMapping() Export
StandardDependencies = "[Decode, Build]"; StandardDependencies = "[Decode, Build]";
GoogleDependencies = "Testing-GoogleWorkspace"; GoogleDependencies = "Testing-GoogleWorkspace";
Sections = New Structure; Sections = New Structure;
Sections.Insert("Telegram" , StandardDependencies); Sections.Insert("Telegram" , StandardDependencies);
Sections.Insert("VK" , StandardDependencies); Sections.Insert("VK" , StandardDependencies);
Sections.Insert("Viber" , StandardDependencies); Sections.Insert("Viber" , StandardDependencies);
Sections.Insert("Twitter" , StandardDependencies); Sections.Insert("Twitter" , StandardDependencies);
Sections.Insert("YandexDisk" , StandardDependencies); Sections.Insert("YandexDisk" , StandardDependencies);
Sections.Insert("GoogleWorkspace", StandardDependencies); Sections.Insert("GoogleWorkspace", StandardDependencies);
Sections.Insert("GoogleCalendar" , GoogleDependencies); Sections.Insert("GoogleCalendar" , GoogleDependencies);
Sections.Insert("GoogleDrive" , GoogleDependencies); Sections.Insert("GoogleDrive" , GoogleDependencies);
Sections.Insert("GoogleSheets" , GoogleDependencies); Sections.Insert("GoogleSheets" , GoogleDependencies);
Sections.Insert("Notion" , StandardDependencies); Sections.Insert("Notion" , StandardDependencies);
Sections.Insert("Slack" , StandardDependencies); Sections.Insert("Slack" , StandardDependencies);
Sections.Insert("Airtable" , StandardDependencies); Sections.Insert("Airtable" , StandardDependencies);
Sections.Insert("Dropbox" , StandardDependencies); Sections.Insert("Dropbox" , StandardDependencies);
Sections.Insert("Bitrix24" , StandardDependencies); Sections.Insert("Bitrix24" , StandardDependencies);
Return Sections; Return Sections;
EndFunction EndFunction
Function GetTestTable() Export Function GetTestTable() Export
Telegram = "Telegram"; Telegram = "Telegram";
VKontakte = "VK"; VKontakte = "VK";
YDisk = "YandexDisk"; YDisk = "YandexDisk";
Calendar = "GoogleCalendar"; Calendar = "GoogleCalendar";
Twitter = "Twitter"; Twitter = "Twitter";
Viber = "Viber"; Viber = "Viber";
Drive = "GoogleDrive"; Drive = "GoogleDrive";
VSpace = "GoogleWorkspace"; VSpace = "GoogleWorkspace";
Notion = "Notion"; Notion = "Notion";
Slack = "Slack"; Slack = "Slack";
Tables = "GoogleSheets"; Tables = "GoogleSheets";
AirT = "Airtable"; AirT = "Airtable";
Dropbox = "Dropbox"; Dropbox = "Dropbox";
Bitrix = "Bitrix24"; Bitrix = "Bitrix24";
TestTable = New ValueTable; TestTable = New ValueTable;
TestTable.Columns.Add("Method"); TestTable.Columns.Add("Method");
TestTable.Columns.Add("Synonym"); TestTable.Columns.Add("Synonym");
TestTable.Columns.Add("Section"); TestTable.Columns.Add("Section");
NewTest(TestTable, "TelegramAPI_GetBotInfo" , "Get bot information" , Telegram); NewTest(TestTable, "TelegramAPI_GetBotInfo" , "Get bot information" , Telegram);
NewTest(TestTable, "TelegramAPI_GetUpdates" , "Get updates" , Telegram); NewTest(TestTable, "TelegramAPI_GetUpdates" , "Get updates" , Telegram);
NewTest(TestTable, "TelegramAPI_SetWebhook" , "Set Webhook" , Telegram); NewTest(TestTable, "TelegramAPI_SetWebhook" , "Set Webhook" , Telegram);
NewTest(TestTable, "TelegramAPI_SendTextMessage" , "Send text message" , Telegram); NewTest(TestTable, "TelegramAPI_SendTextMessage" , "Send text message" , Telegram);
NewTest(TestTable, "TelegramAPI_SendImage" , "Send image" , Telegram); NewTest(TestTable, "TelegramAPI_SendImage" , "Send image" , Telegram);
NewTest(TestTable, "TelegramAPI_SendVideo" , "Send video" , Telegram); NewTest(TestTable, "TelegramAPI_SendVideo" , "Send video" , Telegram);
NewTest(TestTable, "TelegramAPI_SendAudio" , "Send audio" , Telegram); NewTest(TestTable, "TelegramAPI_SendAudio" , "Send audio" , Telegram);
NewTest(TestTable, "TelegramAPI_SendDocument" , "Send document" , Telegram); NewTest(TestTable, "TelegramAPI_SendDocument" , "Send document" , Telegram);
NewTest(TestTable, "TelegramAPI_SendGIF" , "Send GIF" , Telegram); NewTest(TestTable, "TelegramAPI_SendGIF" , "Send GIF" , Telegram);
NewTest(TestTable, "TelegramAPI_SendMediaGroup" , "Send mediagroup" , Telegram); NewTest(TestTable, "TelegramAPI_SendMediaGroup" , "Send mediagroup" , Telegram);
NewTest(TestTable, "TelegramAPI_SendLocation" , "Send location" , Telegram); NewTest(TestTable, "TelegramAPI_SendLocation" , "Send location" , Telegram);
NewTest(TestTable, "TelegramAPI_SendContact" , "Send contact" , Telegram); NewTest(TestTable, "TelegramAPI_SendContact" , "Send contact" , Telegram);
NewTest(TestTable, "TelegramAPI_SendPoll" , "Send poll" , Telegram); NewTest(TestTable, "TelegramAPI_SendPoll" , "Send poll" , Telegram);
NewTest(TestTable, "TelegramAPI_ForwardMessage" , "Forward message" , Telegram); NewTest(TestTable, "TelegramAPI_ForwardMessage" , "Forward message" , Telegram);
NewTest(TestTable, "TelegramAPI_BanUnban" , "Ban/Unban" , Telegram); NewTest(TestTable, "TelegramAPI_BanUnban" , "Ban/Unban" , Telegram);
NewTest(TestTable, "TelegramAPI_CreateInvitationLink" , "Create invitation link" , Telegram); NewTest(TestTable, "TelegramAPI_CreateInvitationLink" , "Create invitation link" , Telegram);
NewTest(TestTable, "TelegramAPI_PinUnpinMessage" , "Pin/Unpin message" , Telegram); NewTest(TestTable, "TelegramAPI_PinUnpinMessage" , "Pin/Unpin message" , Telegram);
NewTest(TestTable, "TelegramAPI_GetMemberCount" , "Get participant count" , Telegram); NewTest(TestTable, "TelegramAPI_GetMemberCount" , "Get participant count" , Telegram);
NewTest(TestTable, "TelegramAPI_GetForumAvatarsList", "Get forum avatars list", Telegram); NewTest(TestTable, "TelegramAPI_GetForumAvatarsList" , "Get forum avatars list" , Telegram);
NewTest(TestTable, "TelegramAPI_CreateDeleteForumTopic" , "Create/Delete forum topic" , Telegram); NewTest(TestTable, "TelegramAPI_CreateDeleteForumTopic" , "Create/Delete forum topic" , Telegram);
NewTest(TestTable, "TelegramAPI_ChangeMainTopicName" , "Change main topic name" , Telegram); NewTest(TestTable, "TelegramAPI_ChangeMainTopicName" , "Change main topic name" , Telegram);
NewTest(TestTable, "TelegramAPI_HideShowMainTopic" , "Hide/Show main topic" , Telegram); NewTest(TestTable, "TelegramAPI_HideShowMainTopic" , "Hide/Show main topic" , Telegram);
NewTest(TestTable, "VKAPI_CreateTokenLink" , "Create token retrieval link", VKontakte); NewTest(TestTable, "VKAPI_CreateTokenLink" , "Create token retrieval link" , VKontakte);
NewTest(TestTable, "VKAPI_CreateDeletePost" , "Create/Delete post" , VKontakte); NewTest(TestTable, "VKAPI_CreateDeletePost" , "Create/Delete post" , VKontakte);
NewTest(TestTable, "VKAPI_CreateCompositePost" , "Create/Delete composite post" , VKontakte); NewTest(TestTable, "VKAPI_CreateCompositePost" , "Create/Delete composite post" , VKontakte);
NewTest(TestTable, "VKAPI_CreatePoll" , "Create poll" , VKontakte); NewTest(TestTable, "VKAPI_CreatePoll" , "Create poll" , VKontakte);
NewTest(TestTable, "VKAPI_SaveDeleteImage" , "Add/Delete image" , VKontakte); NewTest(TestTable, "VKAPI_SaveDeleteImage" , "Add/Delete image" , VKontakte);
NewTest(TestTable, "VKAPI_CreateStory" , "Create story" , VKontakte); NewTest(TestTable, "VKAPI_CreateStory" , "Create story" , VKontakte);
NewTest(TestTable, "VKAPI_DiscussionMethods" , "Actions with discussions" , VKontakte); NewTest(TestTable, "VKAPI_DiscussionMethods" , "Actions with discussions" , VKontakte);
NewTest(TestTable, "VKAPI_LikeRepostComment" , "Like/Repost/Comment" , VKontakte); NewTest(TestTable, "VKAPI_LikeRepostComment" , "Like/Repost/Comment" , VKontakte);
NewTest(TestTable, "VKAPI_GetStatistics" , "Get statistics" , VKontakte); NewTest(TestTable, "VKAPI_GetStatistics" , "Get statistics" , VKontakte);
NewTest(TestTable, "VKAPI_GetPostStatistics" , "Get post statistics" , VKontakte); NewTest(TestTable, "VKAPI_GetPostStatistics" , "Get post statistics" , VKontakte);
NewTest(TestTable, "VKAPI_CreateAdCampaign" , "Create advertising campaign" , VKontakte); NewTest(TestTable, "VKAPI_CreateAdCampaign" , "Create advertising campaign" , VKontakte);
NewTest(TestTable, "VKAPI_SendMessage" , "Send message" , VKontakte); NewTest(TestTable, "VKAPI_SendMessage" , "Send message" , VKontakte);
NewTest(TestTable, "VKAPI_GetProductCategories" , "Get product categories" , VKontakte); NewTest(TestTable, "VKAPI_GetProductCategories" , "Get product categories" , VKontakte);
NewTest(TestTable, "VKAPI_CreateProductSelection" , "Create product and selection" , VKontakte); NewTest(TestTable, "VKAPI_CreateProductSelection" , "Create product and selection" , VKontakte);
NewTest(TestTable, "VKAPI_CreateProductWithProperties" , "Create product with properties" , VKontakte); NewTest(TestTable, "VKAPI_CreateProductWithProperties" , "Create product with properties" , VKontakte);
NewTest(TestTable, "VKAPI_GetProductList" , "Get product list" , VKontakte); NewTest(TestTable, "VKAPI_GetProductList" , "Get product list" , VKontakte);
NewTest(TestTable, "VKAPI_GetSelectionList" , "Get selection list" , VKontakte); NewTest(TestTable, "VKAPI_GetSelectionList" , "Get selection list" , VKontakte);
NewTest(TestTable, "VKAPI_GetPropertyList" , "Get property list" , VKontakte); NewTest(TestTable, "VKAPI_GetPropertyList" , "Get property list" , VKontakte);
NewTest(TestTable, "VKAPI_GetOrderList" , "Get order list" , VKontakte); NewTest(TestTable, "VKAPI_GetOrderList" , "Get order list" , VKontakte);
NewTest(TestTable, "VKAPI_UploadVideo" , "Upload video" , VKontakte); NewTest(TestTable, "VKAPI_UploadVideo" , "Upload video" , VKontakte);
NewTest(TestTable, "YDisk_GetDiskInfo" , "Get disk information" , YDisk); NewTest(TestTable, "YDisk_GetDiskInfo" , "Get disk information" , YDisk);
NewTest(TestTable, "YDisk_CreateFolder" , "Create folder" , YDisk); NewTest(TestTable, "YDisk_CreateFolder" , "Create folder" , YDisk);
NewTest(TestTable, "YDisk_UploadByUrlAndGetObject", "Upload by URL and get" , YDisk); NewTest(TestTable, "YDisk_UploadByUrlAndGetObject", "Upload by URL and get" , YDisk);
NewTest(TestTable, "YDisk_UploadDeleteFile" , "Upload/Delete file" , YDisk); NewTest(TestTable, "YDisk_UploadDeleteFile" , "Upload/Delete file" , YDisk);
NewTest(TestTable, "YDisk_CreateObjectCopy" , "Create object copy" , YDisk); NewTest(TestTable, "YDisk_CreateObjectCopy" , "Create object copy" , YDisk);
NewTest(TestTable, "YDisk_GetDownloadLink" , "Get download link" , YDisk); NewTest(TestTable, "YDisk_GetDownloadLink" , "Get download link" , YDisk);
NewTest(TestTable, "YDisk_GetFileList" , "Get list of files" , YDisk); NewTest(TestTable, "YDisk_GetFileList" , "Get list of files" , YDisk);
NewTest(TestTable, "YDisk_MoveObject" , "Move object" , YDisk); NewTest(TestTable, "YDisk_MoveObject" , "Move object" , YDisk);
NewTest(TestTable, "YDisk_PublicObjectActions" , "Actions with public objects", YDisk); NewTest(TestTable, "YDisk_PublicObjectActions" , "Actions with public objects", YDisk);
NewTest(TestTable, "YDisk_GetPublishedList" , "Get published list" , YDisk); NewTest(TestTable, "YDisk_GetPublishedList" , "Get published list" , YDisk);
NewTest(TestTable, "GV_GetAuthorizationLink" , "Get authorization link" , VSpace); NewTest(TestTable, "GV_GetAuthorizationLink" , "Get authorization link" , VSpace);
NewTest(TestTable, "GV_GetToken" , "Get token" , VSpace); NewTest(TestTable, "GV_GetToken" , "Get token" , VSpace);
NewTest(TestTable, "GV_UpdateToken" , "Refresh token" , VSpace); NewTest(TestTable, "GV_UpdateToken" , "Refresh token" , VSpace);
NewTest(TestTable, "GC_GetCalendarList" , "Get list of calendars" , Calendar); NewTest(TestTable, "GC_GetCalendarList" , "Get list of calendars" , Calendar);
NewTest(TestTable, "GC_CreateDeleteCalendar" , "Create/Delete calendar" , Calendar); NewTest(TestTable, "GC_CreateDeleteCalendar" , "Create/Delete calendar" , Calendar);
NewTest(TestTable, "GC_CreateDeleteEvent" , "Create/Delete event" , Calendar); NewTest(TestTable, "GC_CreateDeleteEvent" , "Create/Delete event" , Calendar);
NewTest(TestTable, "GC_GetEventList" , "Get list of events" , Calendar); NewTest(TestTable, "GC_GetEventList" , "Get list of events" , Calendar);
NewTest(TestTable, "GD_GetCatalogList" , "Get list of directories" , Drive); NewTest(TestTable, "GD_GetCatalogList" , "Get list of directories" , Drive);
NewTest(TestTable, "GD_UploadDeleteFile" , "Upload/Delete file" , Drive); NewTest(TestTable, "GD_UploadDeleteFile" , "Upload/Delete file" , Drive);
NewTest(TestTable, "GD_CreateDeleteComment" , "Create/Delete Comment" , Drive); NewTest(TestTable, "GD_CreateDeleteComment" , "Create/Delete Comment" , Drive);
NewTest(TestTable, "GD_CreateCatalog" , "Create/Delete catalog" , Drive); NewTest(TestTable, "GD_CreateCatalog" , "Create/Delete catalog" , Drive);
NewTest(TestTable, "GT_CreateTable" , "Create table" , Tables); NewTest(TestTable, "GT_CreateTable" , "Create table" , Tables);
NewTest(TestTable, "GT_GetTable" , "Get table" , Tables); NewTest(TestTable, "GT_GetTable" , "Get table" , Tables);
NewTest(TestTable, "GT_FillClearCells" , "Fill/Clear cells" , Tables); NewTest(TestTable, "GT_FillClearCells" , "Fill/Clear cells" , Tables);
NewTest(TestTable, "Twitter_GetAuthorizationLink" , "Get authorization link" , Twitter); NewTest(TestTable, "Twitter_GetAuthorizationLink" , "Get authorization link" , Twitter);
NewTest(TestTable, "Twitter_UpdateToken" , "Refresh token" , Twitter); NewTest(TestTable, "Twitter_UpdateToken" , "Refresh token" , Twitter);
NewTest(TestTable, "Twitter_CreateTextTweet" , "Text tweet" , Twitter); NewTest(TestTable, "Twitter_CreateTextTweet" , "Text tweet" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithImage" , "Tweet with image" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithImage" , "Tweet with image" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithVideo" , "Tweet with video" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithVideo" , "Tweet with video" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithGif" , "Tweet with gif" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithGif" , "Tweet with gif" , Twitter);
NewTest(TestTable, "Twitter_CreateTweetWithPoll" , "Tweet with poll" , Twitter); NewTest(TestTable, "Twitter_CreateTweetWithPoll" , "Tweet with poll" , Twitter);
NewTest(TestTable, "Viber_GetChannelInfo" , "Get channel info" , Viber); NewTest(TestTable, "Viber_GetChannelInfo" , "Get channel info" , Viber);
NewTest(TestTable, "Viber_GetUserData" , "Get user data" , Viber); NewTest(TestTable, "Viber_GetUserData" , "Get user data" , Viber);
NewTest(TestTable, "Viber_GetOnlineUsers" , "Get online users" , Viber); NewTest(TestTable, "Viber_GetOnlineUsers" , "Get online users" , Viber);
NewTest(TestTable, "Viber_SendTextMessage" , "Send text message" , Viber); NewTest(TestTable, "Viber_SendTextMessage" , "Send text message" , Viber);
NewTest(TestTable, "Viber_SendImage" , "Send image" , Viber); NewTest(TestTable, "Viber_SendImage" , "Send image" , Viber);
NewTest(TestTable, "Viber_SendFile" , "SendFile" , Viber); NewTest(TestTable, "Viber_SendFile" , "SendFile" , Viber);
NewTest(TestTable, "Viber_SendContact" , "Send contact" , Viber); NewTest(TestTable, "Viber_SendContact" , "Send contact" , Viber);
NewTest(TestTable, "Viber_SendLocation" , "Send location" , Viber); NewTest(TestTable, "Viber_SendLocation" , "Send location" , Viber);
NewTest(TestTable, "Viber_SendLink" , "Send link" , Viber); NewTest(TestTable, "Viber_SendLink" , "Send link" , Viber);
NewTest(TestTable, "Notion_CreatePage" , "Create page" , Notion); NewTest(TestTable, "Notion_CreatePage" , "Create page" , Notion);
NewTest(TestTable, "Notion_CreateEditDatabase" , "Create/Edit database" , Notion); NewTest(TestTable, "Notion_CreateEditDatabase" , "Create/Edit database" , Notion);
NewTest(TestTable, "Notion_GetPageInfo" , "Get page info" , Notion); NewTest(TestTable, "Notion_GetPageInfo" , "Get page info" , Notion);
NewTest(TestTable, "Notion_GetDatabaseInfo" , "Get database info" , Notion); NewTest(TestTable, "Notion_GetDatabaseInfo" , "Get database info" , Notion);
NewTest(TestTable, "Notion_CreatePageInDatabase" , "Create page in database" , Notion); NewTest(TestTable, "Notion_CreatePageInDatabase" , "Create page in database" , Notion);
NewTest(TestTable, "Notion_EditPageProperties" , "Edit page properties" , Notion); NewTest(TestTable, "Notion_EditPageProperties" , "Edit page properties" , Notion);
NewTest(TestTable, "Notion_CreateDeleteBlock" , "Create/Delete block" , Notion); NewTest(TestTable, "Notion_CreateDeleteBlock" , "Create/Delete block" , Notion);
NewTest(TestTable, "Notion_GetUsers" , "Get users" , Notion); NewTest(TestTable, "Notion_GetUsers" , "Get users" , Notion);
NewTest(TestTable, "Notion_GetUserData" , "Get user data" , Notion); NewTest(TestTable, "Notion_GetUserData" , "Get user data" , Notion);
NewTest(TestTable, "Slack_GetBotInfo" , "Get bot information" , Slack); NewTest(TestTable, "Slack_GetBotInfo" , "Get bot information" , Slack);
NewTest(TestTable, "Slack_GetUserList" , "Get user list" , Slack); NewTest(TestTable, "Slack_GetUserList" , "Get user list" , Slack);
NewTest(TestTable, "Slack_GetRegionList" , "Get region list" , Slack); NewTest(TestTable, "Slack_GetRegionList" , "Get region list" , Slack);
NewTest(TestTable, "Slack_SendDeleteMessage" , "Send/Delete message" , Slack); NewTest(TestTable, "Slack_SendDeleteMessage" , "Send/Delete message" , Slack);
NewTest(TestTable, "Slack_SendDeleteEphemeral" , "Send/Delete ephemeral" , Slack); NewTest(TestTable, "Slack_SendDeleteEphemeral" , "Send/Delete ephemeral" , Slack);
NewTest(TestTable, "Slack_GetScheduledMessages" , "Get scheduled messages" , Slack); NewTest(TestTable, "Slack_GetScheduledMessages" , "Get scheduled messages" , Slack);
NewTest(TestTable, "Slack_CreateArchiveChannel" , "Create/Archive channel" , Slack); NewTest(TestTable, "Slack_CreateArchiveChannel" , "Create/Archive channel" , Slack);
NewTest(TestTable, "Slack_GetChannelList" , "Get channel list" , Slack); NewTest(TestTable, "Slack_GetChannelList" , "Get channel list" , Slack);
NewTest(TestTable, "Slack_OpenCloseDialog" , "Open/Close dialog" , Slack); NewTest(TestTable, "Slack_OpenCloseDialog" , "Open/Close dialog" , Slack);
NewTest(TestTable, "Slack_GetFileList" , "Get list of files" , Slack); NewTest(TestTable, "Slack_GetFileList" , "Get list of files" , Slack);
NewTest(TestTable, "Slack_UploadDeleteFile" , "Upload/Delete file" , Slack); NewTest(TestTable, "Slack_UploadDeleteFile" , "Upload/Delete file" , Slack);
NewTest(TestTable, "Slack_GetExternalFileList" , "Get external file list" , Slack); NewTest(TestTable, "Slack_GetExternalFileList" , "Get external file list" , Slack);
NewTest(TestTable, "Slack_UploadDeleteExternalFile" , "Upload/Delete external file" , Slack); NewTest(TestTable, "Slack_UploadDeleteExternalFile" , "Upload/Delete external file" , Slack);
NewTest(TestTable, "AT_CreateDatabase" , "Create/Edit database" , AirT); NewTest(TestTable, "AT_CreateDatabase" , "Create/Edit database" , AirT);
NewTest(TestTable, "AT_CreateTable" , "Create/Edit table" , AirT); NewTest(TestTable, "AT_CreateTable" , "Create/Edit table" , AirT);
NewTest(TestTable, "AT_CreateField" , "Create/Edit field" , AirT); NewTest(TestTable, "AT_CreateField" , "Create/Edit field" , AirT);
NewTest(TestTable, "AT_CreateDeleteRecords" , "Create/Delete records" , AirT); NewTest(TestTable, "AT_CreateDeleteRecords" , "Create/Delete records" , AirT);
NewTest(TestTable, "DropboxAPI_GetUpdateToken" , "Get/Update token" , Dropbox); NewTest(TestTable, "DropboxAPI_GetUpdateToken" , "Get/Update token" , Dropbox);
NewTest(TestTable, "DropboxAPI_UploadFile" , "Upload file" , Dropbox); NewTest(TestTable, "DropboxAPI_UploadFile" , "Upload file" , Dropbox);
NewTest(TestTable, "DropboxAPI_UploadFileByURL" , "Upload file by URL" , Dropbox); NewTest(TestTable, "DropboxAPI_UploadFileByURL" , "Upload file by URL" , Dropbox);
NewTest(TestTable, "DropboxAPI_CreateFolder" , "Create folder" , Dropbox); NewTest(TestTable, "DropboxAPI_CreateFolder" , "Create folder" , Dropbox);
NewTest(TestTable, "DropboxAPI_CreateDeleteTag" , "Create/Delete tag" , Dropbox); NewTest(TestTable, "DropboxAPI_CreateDeleteTag" , "Create/Delete tag" , Dropbox);
NewTest(TestTable, "DropboxAPI_GetAccount" , "Get account data" , Dropbox); NewTest(TestTable, "DropboxAPI_GetAccount" , "Get account data" , Dropbox);
NewTest(TestTable, "DropboxAPI_AccessManagement" , "Access management" , Dropbox); NewTest(TestTable, "DropboxAPI_AccessManagement" , "Access management" , Dropbox);
NewTest(TestTable, "DropboxAPI_GetFolderFileList" , "Get list of folder files" , Dropbox); NewTest(TestTable, "DropboxAPI_GetFolderFileList" , "Get list of folder files" , Dropbox);
NewTest(TestTable, "B24_TokenManagment" , "Token management" , Bitrix); NewTest(TestTable, "B24_TokenManagment" , "Token management" , Bitrix);
NewTest(TestTable, "B24_ServerTime" , "Server time" , Bitrix); NewTest(TestTable, "B24_ServerTime" , "Server time" , Bitrix);
NewTest(TestTable, "B24_PostsManagment" , "Posts managment" , Bitrix); NewTest(TestTable, "B24_PostsManagment" , "Posts managment" , Bitrix);
NewTest(TestTable, "B24_TaskManagment" , "Tasks managment" , Bitrix); NewTest(TestTable, "B24_TaskManagment" , "Tasks managment" , Bitrix);
NewTest(TestTable, "B24_CommentsManagment" , "Comments managment" , Bitrix); NewTest(TestTable, "B24_CommentsManagment" , "Comments managment" , Bitrix);
NewTest(TestTable, "B24_WorkingWithDrive" , "Working with drive" , Bitrix); NewTest(TestTable, "B24_WorkingWithDrive" , "Working with drive" , Bitrix);
NewTest(TestTable, "B24_Kanban" , "Kanban" , Bitrix); NewTest(TestTable, "B24_Kanban" , "Kanban" , Bitrix);
NewTest(TestTable, "B24_Timekeeping" , "Timekeeping" , Bitrix); NewTest(TestTable, "B24_Timekeeping" , "Timekeeping" , Bitrix);
NewTest(TestTable, "B24_ChatManagment" , "Chats works" , Bitrix); NewTest(TestTable, "B24_ChatManagment" , "Chats works" , Bitrix);
NewTest(TestTable, "B24_NotificationsManagment" , "Notifications managment" , Bitrix); NewTest(TestTable, "B24_NotificationsManagment" , "Notifications managment" , Bitrix);
Return TestTable; Return TestTable;
EndFunction EndFunction
Function ExpectsThat(Value) Export Function ExpectsThat(Value) Export
Try Try
Module = GetCommonModule("ЮТест"); Module = GetCommonModule("ЮТест");
Ожидаем = TypeOf(Module) = Type("CommonModule"); Ожидаем = TypeOf(Module) = Type("CommonModule");
Return Module.ОжидаетЧто(Value); Return Module.ОжидаетЧто(Value);
Except Except
Return Ожидаем.Что(Value); Return Ожидаем.Что(Value);
EndTry; EndTry;
EndFunction EndFunction
Function FormYAXTests() Export Function FormYAXTests() Export
Module = GetCommonModule("ЮТТесты"); Module = GetCommonModule("ЮТТесты");
Sections = GetTestingSectionMapping(); Sections = GetTestingSectionMapping();
TestTable = GetTestTable(); TestTable = GetTestTable();
For Each Section In Sections Do For Each Section In Sections Do
CurrentSection = Section.Key; CurrentSection = Section.Key;
Filter = New Structure("Section", CurrentSection); Filter = New Structure("Section", CurrentSection);
SectionTests = TestTable.FindRows(Filter); SectionTests = TestTable.FindRows(Filter);
Set = Module.ДобавитьТестовыйНабор(CurrentSection); Set = Module.ДобавитьТестовыйНабор(CurrentSection);
For Each Test In SectionTests Do For Each Test In SectionTests Do
Set.ДобавитьСерверныйТест(Test.Method, Test.Synonym); Set.ДобавитьСерверныйТест(Test.Method, Test.Synonym);
EndDo; EndDo;
EndDo; EndDo;
Return ""; Return "";
EndFunction EndFunction
Function FormAssertsTests() Export Function FormAssertsTests() Export
TestTable = GetTestTable(); TestTable = GetTestTable();
ArrayOfTests = New Array; ArrayOfTests = New Array;
For Each Test In TestTable Do For Each Test In TestTable Do
ArrayOfTests.Add(Test.Method); ArrayOfTests.Add(Test.Method);
EndDo; EndDo;
Return ArrayOfTests; Return ArrayOfTests;
EndFunction EndFunction
Function GetParameter(Parameter) Export Function GetParameter(Parameter) Export
Path = DataFilePath(); Path = DataFilePath();
Return GetValueFromFile(Parameter, Path); Return GetValueFromFile(Parameter, Path);
EndFunction EndFunction
Function GetBinary(Parameter) Export Function GetBinary(Parameter) Export
Path = DataFilePath(); Path = DataFilePath();
LocalParameter = Parameter + "Local"; LocalParameter = Parameter + "Local";
MainValue = GetValueFromFile(Parameter , Path); MainValue = GetValueFromFile(Parameter , Path);
LocalValue = GetValueFromFile(LocalParameter, Path); LocalValue = GetValueFromFile(LocalParameter, Path);
LocalFile = New File(LocalValue); LocalFile = New File(LocalValue);
If LocalFile.Exists() Then If LocalFile.Exists() Then
Value = New BinaryData(LocalValue); Value = New BinaryData(LocalValue);
Else Else
Value = MainValue; Value = MainValue;
EndIf; EndIf;
If TypeOf(Value) = Type("String") Then If TypeOf(Value) = Type("String") Then
Value = GetFilePath(Value, LocalParameter); Value = GetFilePath(Value, LocalParameter);
EndIf; EndIf;
Return Value; Return Value;
EndFunction EndFunction
Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export
If StrFind(Path, "http") > 0 If StrFind(Path, "http") > 0
Or StrFind(Path, "www") > 0 Then Or StrFind(Path, "www") > 0 Then
TFN = GetTempFileName(); TFN = GetTempFileName();
FileCopy(Path, TFN); FileCopy(Path, TFN);
Path = TFN; Path = TFN;
Binary = New BinaryData(Path); Binary = New BinaryData(Path);
If SaveLocally Then If SaveLocally Then
WriteParameter(LocalParameter, TFN); WriteParameter(LocalParameter, TFN);
Else Else
DeleteFiles(TFN); DeleteFiles(TFN);
EndIf; EndIf;
Else Else
Binary = New BinaryData(Path); Binary = New BinaryData(Path);
EndIf; EndIf;
Return Binary; Return Binary;
EndFunction EndFunction
Procedure ParameterToCollection(Parameter, Collection) Export Procedure ParameterToCollection(Parameter, Collection) Export
Value = GetParameter(Parameter); Value = GetParameter(Parameter);
Collection.Insert(Parameter, Value); Collection.Insert(Parameter, Value);
EndProcedure EndProcedure
Procedure BinaryToCollection(Parameter, Collection) Export Procedure BinaryToCollection(Parameter, Collection) Export
Value = GetBinary(Parameter); Value = GetBinary(Parameter);
Collection.Insert(Parameter, Value); Collection.Insert(Parameter, Value);
EndProcedure EndProcedure
Procedure WriteParameter(Parameter, Value) Export Procedure WriteParameter(Parameter, Value) Export
Path = DataFilePath(); Path = DataFilePath();
WriteParameterToFile(Parameter, Value, Path); WriteParameterToFile(Parameter, Value, Path);
EndProcedure EndProcedure
Procedure WriteLog(Val Result, Val Method, Val Library = "") Export Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method; Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method;
Try Try
Data = OPI_Tools.JSONString(Result); Data = OPI_Tools.JSONString(Result);
Except Except
Data = "Not JSON: " + String(Result); Data = "Not JSON: " + String(Result);
EndTry; EndTry;
Data = " " + Data; Data = " " + Data;
Message(Header); Message(Header);
Message(Chars.LF); Message(Chars.LF);
Message(Data); Message(Data);
Message(Chars.LF); Message(Chars.LF);
Message("---------------------------------"); Message("---------------------------------");
Message(Chars.LF); Message(Chars.LF);
If ValueIsFilled(Library) Then If ValueIsFilled(Library) Then
WriteLogFile(Data, Method, Library); WriteLogFile(Data, Method, Library);
EndIf; EndIf;
EndProcedure EndProcedure
#EndRegion #EndRegion
#Region Private #Region Private
Function GetValueFromFile(Parameter, Path) Function GetValueFromFile(Parameter, Path)
Values = OPI_Tools.ReadJSONFile(Path); Values = OPI_Tools.ReadJSONFile(Path);
Return ?(Values.Property(Parameter), Values[Parameter], ""); Return ?(Values.Property(Parameter), Values[Parameter], "");
EndFunction EndFunction
Function DataFilePath() Function DataFilePath()
Path = ""; Path = "";
PossiblePaths = New Array; PossiblePaths = New Array;
PossiblePaths.Add("./data.json"); PossiblePaths.Add("./data.json");
PossiblePaths.Add("C:\GDrive\Мой Диск\data.json"); PossiblePaths.Add("C:\GDrive\Мой Диск\data.json");
PossiblePaths.Add("D:\GD\Мой Диск\data.json"); PossiblePaths.Add("D:\GD\Мой Диск\data.json");
For Each PossiblePath In PossiblePaths Do For Each PossiblePath In PossiblePaths Do
RepositoryFile = New File(PossiblePath); RepositoryFile = New File(PossiblePath);
If RepositoryFile.Exists() Then If RepositoryFile.Exists() Then
Path = PossiblePath; Path = PossiblePath;
EndIf; EndIf;
EndDo; EndDo;
Return Path; Return Path;
EndFunction EndFunction
Function GetCommonModule(Val Name) Function GetCommonModule(Val Name)
SetSafeMode(True); SetSafeMode(True);
Module = Eval(Name); Module = Eval(Name);
SetSafeMode(False); SetSafeMode(False);
Return Module; Return Module;
EndFunction EndFunction
Procedure NewTest(ValueTable, Val Method, Val Synonym, Val Section) Procedure NewTest(ValueTable, Val Method, Val Synonym, Val Section)
NewTest = ValueTable.Add(); NewTest = ValueTable.Add();
NewTest.Method = Method; NewTest.Method = Method;
NewTest.Synonym = Synonym; NewTest.Synonym = Synonym;
NewTest.Section = Section; NewTest.Section = Section;
EndProcedure EndProcedure
Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path) Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
Values = OPI_Tools.ReadJSONFile(Path); Values = OPI_Tools.ReadJSONFile(Path);
Values.Insert(Parameter, Value); Values.Insert(Parameter, Value);
Record = New JSONWriter; Record = New JSONWriter;
JSONWriterSettings = New JSONWriterSettings(JSONLineBreak.Auto, Chars.Tab); JSONWriterSettings = New JSONWriterSettings(JSONLineBreak.Auto, Chars.Tab);
Record.OpenFile(Path, , , JSONWriterSettings); Record.OpenFile(Path, , , JSONWriterSettings);
WriteJSON(Record, Values); WriteJSON(Record, Values);
@ -452,37 +452,37 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library) Procedure WriteLogFile(Val Data, Val Method, Val Library)
Try Try
LogPath = "./docs/ru/results"; LogPath = "./docs/ru/results";
LibraryLogPath = LogPath + "/" + Library; LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath); LogDirectory = New File(LogPath);
If Not LogDirectory.Exists() Then If Not LogDirectory.Exists() Then
CreateDirectory(LogPath); CreateDirectory(LogPath);
EndIf; EndIf;
LibraryLogCatalog = New File(LibraryLogPath); LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exists() Then If Not LibraryLogCatalog.Exists() Then
CreateDirectory(LibraryLogPath); CreateDirectory(LibraryLogPath);
EndIf; EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log"; FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath); LogFile = New File(FilePath);
If Not LogFile.Exists() Then If Not LogFile.Exists() Then
LogDocument = New TextDocument; LogDocument = New TextDocument;
LogDocument.SetText(Data); LogDocument.SetText(Data);
LogDocument.Write(FilePath); LogDocument.Write(FilePath);
EndIf; EndIf;
Except Except
Message("Failed to write log file!: " + ErrorDescription()); Message("Failed to write log file!: " + ErrorDescription());
EndTry; EndTry;
EndProcedure EndProcedure
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -48,83 +48,83 @@
// Get authorization link // Get authorization link
// Forms a link for authorization via the browser // Forms a link for authorization via the browser
// //
// Parameters: // Parameters:
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// String - URL for browser transition // String - URL for browser transition
Function GetAuthorizationLink(Parameters = "") Export Function GetAuthorizationLink(Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URLParameters = New Structure; URLParameters = New Structure;
URLParameters.Insert("response_type" , "code"); URLParameters.Insert("response_type" , "code");
URLParameters.Insert("client_id" , Parameters_["client_id"]); URLParameters.Insert("client_id" , Parameters_["client_id"]);
URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]); URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
URLParameters.Insert("scope" , Parameters_["scope"]); URLParameters.Insert("scope" , Parameters_["scope"]);
URLParameters.Insert("state" , "state"); URLParameters.Insert("state" , "state");
URLParameters.Insert("code_challenge" , "challenge"); URLParameters.Insert("code_challenge" , "challenge");
URLParameters.Insert("code_challenge_method", "plain"); URLParameters.Insert("code_challenge_method", "plain");
URLParameters = OPI_Tools.RequestParametersToString(URLParameters); URLParameters = OPI_Tools.RequestParametersToString(URLParameters);
Link = "https://twitter.com/i/oauth2/authorize" + URLParameters; Link = "https://twitter.com/i/oauth2/authorize" + URLParameters;
Return Link; Return Link;
EndFunction EndFunction
// Get token // Get token
// Gets the token by the code received when authorizing using the link from GetAuthorizationLink // Gets the token by the code received when authorizing using the link from GetAuthorizationLink
// //
// Parameters: // Parameters:
// Code - String - Code obtained from authorization See GetAuthorizationLink - code // Code - String - Code obtained from authorization See GetAuthorizationLink - code
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function GetToken(Val Code, Val Parameters = "") Export Function GetToken(Val Code, Val Parameters = "") Export
OPI_TypeConversion.GetLine(Code); OPI_TypeConversion.GetLine(Code);
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
RequestParameters = New Structure; RequestParameters = New Structure;
RequestParameters.Insert("code" , Code); RequestParameters.Insert("code" , Code);
RequestParameters.Insert("grant_type" , "authorization_code"); RequestParameters.Insert("grant_type" , "authorization_code");
RequestParameters.Insert("client_id" , Parameters_["client_id"]); RequestParameters.Insert("client_id" , Parameters_["client_id"]);
RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]); RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
RequestParameters.Insert("code_verifier", "challenge"); RequestParameters.Insert("code_verifier", "challenge");
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token" Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False); , RequestParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates the v2 token using the refresh_token // Updates the v2 token using the refresh_token
// //
// Parameters: // Parameters:
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function RefreshToken(Val Parameters = "") Export Function RefreshToken(Val Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
Refresh = "refresh_token"; Refresh = "refresh_token";
RequestParameters = New Structure; RequestParameters = New Structure;
RequestParameters.Insert(Refresh , Parameters_[Refresh]); RequestParameters.Insert(Refresh , Parameters_[Refresh]);
RequestParameters.Insert("grant_type" , Refresh); RequestParameters.Insert("grant_type" , Refresh);
RequestParameters.Insert("client_id" , Parameters_["client_id"]); RequestParameters.Insert("client_id" , Parameters_["client_id"]);
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token" Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False); , RequestParameters, , False);
Return Response; Return Response;
EndFunction EndFunction
@ -133,23 +133,23 @@ EndFunction
// Method for insertion into an http service, the address of which is specified in redirect_uri // Method for insertion into an http service, the address of which is specified in redirect_uri
// Calls the token acquisition method, as for obtaining a token from the code received // Calls the token acquisition method, as for obtaining a token from the code received
// on redirect_uri after authorization via the browser is only 30 seconds // on redirect_uri after authorization via the browser is only 30 seconds
// //
// Parameters: // Parameters:
// Request - HTTPServiceRequest - Request coming to the http service // Request - HTTPServiceRequest - Request coming to the http service
// //
// Returns: // Returns:
// HTTPResponse, Arbitrary, BinaryData - Result of reading the JSON response from the server // HTTPResponse, Arbitrary, BinaryData - Result of reading the JSON response from the server
Function HandleIncomingRequestAfterAuthorization(Request) Export Function HandleIncomingRequestAfterAuthorization(Request) Export
Code = Request.RequestParameters["code"]; Code = Request.RequestParameters["code"];
TokenResponse = GetToken(Code); TokenResponse = GetToken(Code);
// BSLLS:CommentedCode-off // BSLLS:CommentedCode-off
// Preferred token storage // Preferred token storage
// Constants.TwitterRefresh.Set(ResponseToken["refresh_token"]); // Constants.TwitterRefresh.Set(ResponseToken["refresh_token"]);
// Constants.TwitterToken.Set(ResponseToken["access_token"]); // Constants.TwitterToken.Set(ResponseToken["access_token"]);
// BSLLS:CommentedCode-on // BSLLS:CommentedCode-on
Return TokenResponse; Return TokenResponse;
EndFunction EndFunction
@ -160,189 +160,189 @@ EndFunction
// !NOCLI // !NOCLI
// Create custom tweet // Create custom tweet
// //
// Parameters: // Parameters:
// Text - String - Tweet text // Text - String - Tweet text
// MediaArray - Array of String, BinaryData - Array of binary data or file paths // MediaArray - Array of String, BinaryData - Array of binary data or file paths
// PollOptionsArray - Array of String - Array of poll options, if necessary // PollOptionsArray - Array of String - Array of poll options, if necessary
// PollDuration - String, Number - Poll duration if necessary (poll without duration is not created) // PollDuration - String, Number - Poll duration if necessary (poll without duration is not created)
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateCustomTweet(Val Text = "" Function CreateCustomTweet(Val Text = ""
, Val MediaArray = "" , Val MediaArray = ""
, Val PollOptionsArray = "" , Val PollOptionsArray = ""
, Val PollDuration = "" , Val PollDuration = ""
, Val Parameters = "") Export , Val Parameters = "") Export
OPI_TypeConversion.GetLine(Text); OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetLine(PollDuration); OPI_TypeConversion.GetLine(PollDuration);
If ValueIsFilled(MediaArray) Then If ValueIsFilled(MediaArray) Then
OPI_TypeConversion.GetCollection(MediaArray); OPI_TypeConversion.GetCollection(MediaArray);
EndIf; EndIf;
If ValueIsFilled(PollOptionsArray) Then If ValueIsFilled(PollOptionsArray) Then
OPI_TypeConversion.GetCollection(PollOptionsArray); OPI_TypeConversion.GetCollection(PollOptionsArray);
EndIf; EndIf;
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URL = "https://api.twitter.com/2/tweets"; URL = "https://api.twitter.com/2/tweets";
Array = "Array"; Array = "Array";
Fields = New Map; Fields = New Map;
If ValueIsFilled(Text) Then If ValueIsFilled(Text) Then
Fields.Insert("text", Text); Fields.Insert("text", Text);
EndIf; EndIf;
If TypeOf(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then If TypeOf(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then
PollDuration = Number(PollDuration); PollDuration = Number(PollDuration);
If PollOptionsArray.Count() > 0 Then If PollOptionsArray.Count() > 0 Then
OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration); OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration);
Fields.Insert("poll", OptionStructure); Fields.Insert("poll", OptionStructure);
EndIf; EndIf;
EndIf; EndIf;
If TypeOf(MediaArray) = Type(Array) Then If TypeOf(MediaArray) = Type(Array) Then
If MediaArray.Count() > 0 Then If MediaArray.Count() > 0 Then
Fields.Insert("media", New Structure("media_ids", MediaArray)); Fields.Insert("media", New Structure("media_ids", MediaArray));
EndIf; EndIf;
EndIf; EndIf;
Authorization = CreateAuthorizationHeaderV2(Parameters_); Authorization = CreateAuthorizationHeaderV2(Parameters_);
Response = OPI_Tools.Post(URL, Fields, Authorization); Response = OPI_Tools.Post(URL, Fields, Authorization);
Return Response; Return Response;
EndFunction EndFunction
// Create text tweet // Create text tweet
// Creates a tweet without attachments // Creates a tweet without attachments
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateTextTweet(Val Text, Val Parameters = "") Export Function CreateTextTweet(Val Text, Val Parameters = "") Export
Return CreateCustomTweet(Text, , , , Parameters); Return CreateCustomTweet(Text, , , , Parameters);
EndFunction EndFunction
// Create image tweet // Create image tweet
// Creates a tweet with an image attachment // Creates a tweet with an image attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// ImageArray - Array of String, BinaryData - Image files array - pictures // ImageArray - Array of String, BinaryData - Image files array - pictures
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateImageTweet(Val Text, Val ImageArray, Val Parameters = "") Export Function CreateImageTweet(Val Text, Val ImageArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(ImageArray, "photo", Parameters); MediaArray = UploadAttachmentsArray(ImageArray, "photo", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create gif tweet // Create gif tweet
// Creates a tweet with a gif attachment // Creates a tweet with a gif attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// GifsArray - Array of String, BinaryData - Gif files array - gifs // GifsArray - Array of String, BinaryData - Gif files array - gifs
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateGifTweet(Val Text, Val GifsArray, Val Parameters = "") Export Function CreateGifTweet(Val Text, Val GifsArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(GifsArray, "animated_gif", Parameters); MediaArray = UploadAttachmentsArray(GifsArray, "animated_gif", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create video tweet // Create video tweet
// Creates a tweet with a video attachment // Creates a tweet with a video attachment
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// VideosArray - Array of String, BinaryData - Video files array - videos // VideosArray - Array of String, BinaryData - Video files array - videos
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreateVideoTweet(Val Text, Val VideosArray, Val Parameters = "") Export Function CreateVideoTweet(Val Text, Val VideosArray, Val Parameters = "") Export
MediaArray = UploadAttachmentsArray(VideosArray, "video", Parameters); MediaArray = UploadAttachmentsArray(VideosArray, "video", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters); Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction EndFunction
// Create poll tweet // Create poll tweet
// Creates a tweet with a poll // Creates a tweet with a poll
// //
// Parameters: // Parameters:
// Text - String - Tweet text - text // Text - String - Tweet text - text
// OptionArray - Array of String - Poll options array - options // OptionArray - Array of String - Poll options array - options
// Duration - String, Number - Poll duration - duration // Duration - String, Number - Poll duration - duration
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Twitter // Map Of KeyAndValue - serialized JSON response from Twitter
Function CreatePollTweet(Val Text, Val OptionArray, Val Duration, Val Parameters = "") Export Function CreatePollTweet(Val Text, Val OptionArray, Val Duration, Val Parameters = "") Export
Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters); Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters);
EndFunction EndFunction
// Upload attachments array !NOCLI // Upload attachments array !NOCLI
// Uploads files to the server and returns their IDs // Uploads files to the server and returns their IDs
// //
// Parameters: // Parameters:
// ArrayOfFiles - Array of String, BinaryData - Files array // ArrayOfFiles - Array of String, BinaryData - Files array
// AttachmentsType - String - Attachments type // AttachmentsType - String - Attachments type
// Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json // Parameters - Structure Of String - See GetStandardParameters - auth - Authorization JSON or path to .json
// //
// Returns: // Returns:
// Array Of String - Media ID array // Array Of String - Media ID array
Function UploadAttachmentsArray(Val ArrayOfFiles, Val AttachmentsType, Val Parameters = "") Export Function UploadAttachmentsArray(Val ArrayOfFiles, Val AttachmentsType, Val Parameters = "") Export
OPI_TypeConversion.GetLine(AttachmentsType); OPI_TypeConversion.GetLine(AttachmentsType);
OPI_TypeConversion.GetCollection(ArrayOfFiles); OPI_TypeConversion.GetCollection(ArrayOfFiles);
MediaArray = New Array; MediaArray = New Array;
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
MIS = "media_id_string"; MIS = "media_id_string";
If ValueIsFilled(ArrayOfFiles) Then If ValueIsFilled(ArrayOfFiles) Then
For Each SendingFile In ArrayOfFiles Do For Each SendingFile In ArrayOfFiles Do
OPI_TypeConversion.GetBinaryData(SendingFile); OPI_TypeConversion.GetBinaryData(SendingFile);
Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_); Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_);
MediaID = Response[MIS]; MediaID = Response[MIS];
If Not ValueIsFilled(MediaID) Then If Not ValueIsFilled(MediaID) Then
Return Response; Return Response;
EndIf; EndIf;
MediaArray.Add(MediaID); MediaArray.Add(MediaID);
EndDo; EndDo;
EndIf; EndIf;
Return MediaArray; Return MediaArray;
EndFunction EndFunction
#EndRegion #EndRegion
@ -351,195 +351,195 @@ EndFunction
#Region Private #Region Private
Function UploadMediaFile(Val File, Val Type, Val Parameters) Function UploadMediaFile(Val File, Val Type, Val Parameters)
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
RequestType = "POST"; RequestType = "POST";
Parameters_ = GetStandardParameters(Parameters); Parameters_ = GetStandardParameters(Parameters);
URL = "https://upload.twitter.com/1.1/media/upload.json"; URL = "https://upload.twitter.com/1.1/media/upload.json";
If Type = "photo" Then If Type = "photo" Then
Fields = New Structure; Fields = New Structure;
Fields.Insert("media_data" , Base64String(File)); Fields.Insert("media_data" , Base64String(File));
Fields.Insert("media_category", Type); Fields.Insert("media_category", Type);
Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False); Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Else Else
Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_); Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_);
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function UploadMediaInParts(Val File, Val Type, Val RequestType, Val URL, Parameters) Function UploadMediaInParts(Val File, Val Type, Val RequestType, Val URL, Parameters)
Unit = 1024; Unit = 1024;
Count = 4; Count = 4;
MediaKey = "media_key"; MediaKey = "media_key";
MIS = "media_id_string"; MIS = "media_id_string";
Command = "command"; Command = "command";
Size = File.Size(); Size = File.Size();
MIMETypeMapping = New Map; MIMETypeMapping = New Map;
MIMETypeMapping.Insert("photo" , "image/jpeg"); MIMETypeMapping.Insert("photo" , "image/jpeg");
MIMETypeMapping.Insert("video" , "video/mp4"); MIMETypeMapping.Insert("video" , "video/mp4");
MIMETypeMapping.Insert("animated_gif", "image/gif"); MIMETypeMapping.Insert("animated_gif", "image/gif");
ChunkSize = Count * Unit * Unit; ChunkSize = Count * Unit * Unit;
ArrayReading = SplitBinaryData(File, ChunkSize); ArrayReading = SplitBinaryData(File, ChunkSize);
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "INIT"); Fields.Insert(Command , "INIT");
Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size)); Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size));
Fields.Insert("media_type" , MIMETypeMapping.Get(Type)); Fields.Insert("media_type" , MIMETypeMapping.Get(Type));
Fields.Insert("media_category" , Type); Fields.Insert("media_category" , Type);
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL);
InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False); InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False);
InitializationKey = InitializationResponse[MediaKey]; InitializationKey = InitializationResponse[MediaKey];
InitializationID = InitializationResponse[MIS]; InitializationID = InitializationResponse[MIS];
If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then
Return InitializationResponse; Return InitializationResponse;
EndIf; EndIf;
Counter = 0; Counter = 0;
For Each Part In ArrayReading Do For Each Part In ArrayReading Do
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "APPEND"); Fields.Insert(Command , "APPEND");
Fields.Insert("media_key" , InitializationKey); Fields.Insert("media_key" , InitializationKey);
Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter)); Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter));
Fields.Insert("media" , Part); Fields.Insert("media" , Part);
Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL); Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL);
OPI_Tools.PostMultipart(URL, Fields, , , Authorization); OPI_Tools.PostMultipart(URL, Fields, , , Authorization);
Counter = Counter + 1; Counter = Counter + 1;
EndDo; EndDo;
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "FINALIZE"); Fields.Insert(Command , "FINALIZE");
Fields.Insert("media_id", InitializationID); Fields.Insert("media_id", InitializationID);
ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL); ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL);
If Not TypeOf(ProcessingStatus) = Type("String") Then If Not TypeOf(ProcessingStatus) = Type("String") Then
Return ProcessingStatus; Return ProcessingStatus;
EndIf; EndIf;
Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters); Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters);
Return Response; Return Response;
EndFunction EndFunction
Function WaitForProcessingCompletion(Val ProcessingStatus, Val InitializationID, Val URL, Val Parameters) Function WaitForProcessingCompletion(Val ProcessingStatus, Val InitializationID, Val URL, Val Parameters)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Command = "command"; Command = "command";
Fields = New Structure; Fields = New Structure;
Fields.Insert(Command , "STATUS"); Fields.Insert(Command , "STATUS");
Fields.Insert("media_id", InitializationID); Fields.Insert("media_id", InitializationID);
WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL);
Response = OPI_Tools.Get(URL, Fields, Authorization); Response = OPI_Tools.Get(URL, Fields, Authorization);
Information = Response[ProcessingInfo]; Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then If Not ValueIsFilled(Information) Then
Return Response; Return Response;
EndIf; EndIf;
ProcessingStatus = Information["state"]; ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then If Not ValueIsFilled(ProcessingStatus) Then
Return Response; Return Response;
EndIf; EndIf;
EndDo; EndDo;
If ProcessingStatus = "failed" Then If ProcessingStatus = "failed" Then
Raise "Twitter could not process the video you uploaded"; Raise "Twitter could not process the video you uploaded";
EndIf; EndIf;
Return Response; Return Response;
EndFunction EndFunction
Function GetStandardParameters(Val Parameters = "") Function GetStandardParameters(Val Parameters = "")
// The definition of the data required for the work is collected here. // The definition of the data required for the work is collected here.
// For Twitter, this is quite a significant set, which is due to the presence of 2 APIs at once, // For Twitter, this is quite a significant set, which is due to the presence of 2 APIs at once,
// which, at the same time, are not created for different tasks, but are simply versions of each other. // which, at the same time, are not created for different tasks, but are simply versions of each other.
// The current version of the API is v2 and it requires obtaining temporary tokens. Despite the fact, // The current version of the API is v2 and it requires obtaining temporary tokens. Despite the fact,
// that Twitter insists on using this latest version, they somehow managed not to transfer // that Twitter insists on using this latest version, they somehow managed not to transfer
// file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done // file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done
// on version 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1, // on version 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1,
// but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different // but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different
// The world gigacorporation of Elon Musk, by the way, a reminder ;) // The world gigacorporation of Elon Musk, by the way, a reminder ;)
// P.S The following is often referred to as the "Twitter Developer settings page" - this // P.S The following is often referred to as the "Twitter Developer settings page" - this
// https://developer.twitter.com/en/portal/dashboard and chosing of project from list (key icon) // https://developer.twitter.com/en/portal/dashboard and chosing of project from list (key icon)
Parameters_ = New Map; Parameters_ = New Map;
Permissions = "tweet.read tweet.write tweet.moderate.write users.read " Permissions = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read " + "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read " + "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write"; + "block.write bookmark.read bookmark.write";
// Data for API v2 // Data for API v2
// redirect_uri - URL of your http service (or other request handler) for authorization // redirect_uri - URL of your http service (or other request handler) for authorization
// scope - a set of permissions for the received key. Can be any, but offline.access is mandatory // scope - a set of permissions for the received key. Can be any, but offline.access is mandatory
// client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer // client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer // client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// access_token - GetAuthorizationLink() -> Browser -> code will come to redirect_uri -> GetToken(code) // access_token - GetAuthorizationLink() -> Browser -> code will come to redirect_uri -> GetToken(code)
// refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 hr) // refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 hr)
// The update is done using the UpdateToken method with new access_token and refresh_token. // The update is done using the UpdateToken method with new access_token and refresh_token.
// For the next update, you need to use a new refresh_token, so hardcode // For the next update, you need to use a new refresh_token, so hardcode
// won't work (access_token won't work either) // won't work (access_token won't work either)
// |--> RefreshToken() ->|access_token --> 2 hrs. lifetime // |--> RefreshToken() ->|access_token --> 2 hrs. lifetime
// | |refresh_token --| // | |refresh_token --|
// |--------[after 2 hrs.]-------------------| // |--------[after 2 hrs.]-------------------|
// Data for API v1.1 // Data for API v1.1
// oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer // oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer // oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer // oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer // oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// These tokens do not need to be updated // These tokens do not need to be updated
Parameters_.Insert("redirect_uri" , ""); Parameters_.Insert("redirect_uri" , "");
Parameters_.Insert("scope" , Permissions); Parameters_.Insert("scope" , Permissions);
Parameters_.Insert("client_id" , ""); Parameters_.Insert("client_id" , "");
Parameters_.Insert("client_secret" , ""); Parameters_.Insert("client_secret" , "");
Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get() Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get()
Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get() Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get()
Parameters_.Insert("oauth_token" , ""); Parameters_.Insert("oauth_token" , "");
Parameters_.Insert("oauth_token_secret" , ""); Parameters_.Insert("oauth_token_secret" , "");
Parameters_.Insert("oauth_consumer_key" , ""); Parameters_.Insert("oauth_consumer_key" , "");
Parameters_.Insert("oauth_consumer_secret", ""); Parameters_.Insert("oauth_consumer_secret", "");
OPI_TypeConversion.GetCollection(Parameters); OPI_TypeConversion.GetCollection(Parameters);
If TypeOf(Parameters) = Type("Structure") Or TypeOf(Parameters) = Type("Map") Then If TypeOf(Parameters) = Type("Structure") Or TypeOf(Parameters) = Type("Map") Then
For Each PassedParameter In Parameters Do For Each PassedParameter In Parameters Do
Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value)); Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value));
@ -551,137 +551,137 @@ Function GetStandardParameters(Val Parameters = "")
EndFunction EndFunction
Function CreateAuthorizationHeaderV1(Val Parameters, Val Fields, Val RequestType, Val URL) Function CreateAuthorizationHeaderV1(Val Parameters, Val Fields, Val RequestType, Val URL)
CurrentDate = OPI_Tools.GetCurrentDate(); CurrentDate = OPI_Tools.GetCurrentDate();
AuthorizationHeader = ""; AuthorizationHeader = "";
HashingMethod = "HMAC-SHA1"; HashingMethod = "HMAC-SHA1";
APIVersion = "1.0"; APIVersion = "1.0";
SignatureString = ""; SignatureString = "";
Signature = ""; Signature = "";
OCK = "oauth_consumer_key"; OCK = "oauth_consumer_key";
OTK = "oauth_token"; OTK = "oauth_token";
CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate); CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate);
CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate); CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate);
ParametersTable = New ValueTable; ParametersTable = New ValueTable;
ParametersTable.Columns.Add("Key"); ParametersTable.Columns.Add("Key");
ParametersTable.Columns.Add("Value"); ParametersTable.Columns.Add("Value");
For Each Field In Fields Do For Each Field In Fields Do
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = Field.Key; NewLine.Key = Field.Key;
NewLine.Value = Field.Value; NewLine.Value = Field.Value;
EndDo; EndDo;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = OCK; NewLine.Key = OCK;
NewLine.Value = Parameters[OCK]; NewLine.Value = Parameters[OCK];
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = OTK; NewLine.Key = OTK;
NewLine.Value = Parameters[OTK]; NewLine.Value = Parameters[OTK];
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_version"; NewLine.Key = "oauth_version";
NewLine.Value = APIVersion; NewLine.Value = APIVersion;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_signature_method"; NewLine.Key = "oauth_signature_method";
NewLine.Value = HashingMethod; NewLine.Value = HashingMethod;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_timestamp"; NewLine.Key = "oauth_timestamp";
NewLine.Value = CurrentUNIXDate; NewLine.Value = CurrentUNIXDate;
NewLine = ParametersTable.Add(); NewLine = ParametersTable.Add();
NewLine.Key = "oauth_nonce"; NewLine.Key = "oauth_nonce";
NewLine.Value = CurrentUNIXDate; NewLine.Value = CurrentUNIXDate;
For Each TableRow In ParametersTable Do For Each TableRow In ParametersTable Do
TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding); TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding);
TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding); TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding);
EndDo; EndDo;
ParametersTable.Sort("Key"); ParametersTable.Sort("Key");
For Each TableRow In ParametersTable Do For Each TableRow In ParametersTable Do
SignatureString = SignatureString SignatureString = SignatureString
+ TableRow.Key + TableRow.Key
+ "=" + " ="
+ TableRow.Value + TableRow.Value
+ "&"; + "&";
EndDo; EndDo;
SignatureString = Left(SignatureString, StrLen(SignatureString) - 1); SignatureString = Left(SignatureString, StrLen(SignatureString) - 1);
SignatureString = Upper(RequestType) SignatureString = Upper(RequestType)
+ "&" + "&"
+ EncodeString(URL, StringEncodingMethod.URLencoding) + EncodeString(URL , StringEncodingMethod.URLencoding)
+ "&" + "&"
+ EncodeString(SignatureString, StringEncodingMethod.URLencoding); + EncodeString(SignatureString, StringEncodingMethod.URLencoding);
Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding) Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding)
+ "&" + "&"
+ EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding); + EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding);
Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature) Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature)
, GetBinaryDataFromString(SignatureString) , GetBinaryDataFromString(SignatureString)
, HashFunction.SHA1 , HashFunction.SHA1
, 64); , 64);
Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding); Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding);
Delimiter = ""","; Delimiter = """,";
AuthorizationHeader = AuthorizationHeader AuthorizationHeader = AuthorizationHeader
+ "OAuth " + "OAuth "
+ "oauth_consumer_key=""" + Parameters[OCK] + Delimiter + "oauth_consumer_key =""" + Parameters[OCK] + Delimiter
+ "oauth_token=""" + Parameters[OTK] + Delimiter + "oauth_token =""" + Parameters[OTK] + Delimiter
+ "oauth_signature_method=""" + HashingMethod + Delimiter + "oauth_signature_method=""" + HashingMethod + Delimiter
+ "oauth_timestamp=""" + CurrentUNIXDate + Delimiter + "oauth_timestamp =""" + CurrentUNIXDate + Delimiter
+ "oauth_nonce=""" + CurrentUNIXDate + Delimiter + "oauth_nonce =""" + CurrentUNIXDate + Delimiter
+ "oauth_version=""" + APIVersion + Delimiter + "oauth_version =""" + APIVersion + Delimiter
+ "oauth_signature=""" + Signature; + "oauth_signature =""" + Signature;
HeaderMapping = New Map; HeaderMapping = New Map;
HeaderMapping.Insert("authorization", AuthorizationHeader); HeaderMapping.Insert("authorization", AuthorizationHeader);
Return HeaderMapping; Return HeaderMapping;
EndFunction EndFunction
Function CreateAuthorizationHeaderV2(Val Parameters) Function CreateAuthorizationHeaderV2(Val Parameters)
ReturnMapping = New Map; ReturnMapping = New Map;
ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]); ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]);
Return ReturnMapping; Return ReturnMapping;
EndFunction EndFunction
Function GetProcessingStatus(Val Parameters, Val Fields, Val URL) Function GetProcessingStatus(Val Parameters, Val Fields, Val URL)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL); Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False); Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Information = Response[ProcessingInfo]; Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then If Not ValueIsFilled(Information) Then
Return Response; Return Response;
EndIf; EndIf;
ProcessingStatus = Information["state"]; ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then If Not ValueIsFilled(ProcessingStatus) Then
Return Response; Return Response;
Else Else
Return ProcessingStatus; Return ProcessingStatus;
EndIf; EndIf;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -39,268 +39,268 @@
#Region Internal #Region Internal
Procedure GetBinaryData(Value) Export Procedure GetBinaryData(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If TypeOf(Value) = Type("BinaryData") Then If TypeOf(Value) = Type("BinaryData") Then
Return; Return;
Else Else
File = New File(Value); File = New File(Value);
If File.Exists() Then If File.Exists() Then
Value = New BinaryData(Value); Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then ElsIf StrFind(Value, "//") Then
Value = OPI_Tools.Get(Value); Value = OPI_Tools.Get(Value);
Else Else
Value = Base64Value(Value); Value = Base64Value(Value);
EndIf; EndIf;
EndIf; EndIf;
Except Except
Raise "Error getting binary data from parameter: " + ErrorDescription(); Raise "Error getting binary data from parameter: " + ErrorDescription();
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetBinaryOrStream(Value) Export Procedure GetBinaryOrStream(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
If TypeOf(Value) <> Type("String") Then If TypeOf(Value) <> Type("String") Then
GetBinaryData(Value); GetBinaryData(Value);
Return; Return;
EndIf; EndIf;
File = New File(Value); File = New File(Value);
If File.Exists() Then If File.Exists() Then
Value = New FileStream(Value, FileOpenMode.Open); Value = New FileStream(Value, FileOpenMode.Open);
Else Else
GetBinaryData(Value); GetBinaryData(Value);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetCollection(Value) Export Procedure GetCollection(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
InitialValue = Value; InitialValue = Value;
If ThisIsCollection(Value) Then If ThisIsCollection(Value) Then
Return; Return;
Else Else
If TypeOf(Value) = Type("BinaryData") Then If TypeOf(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value); Value = GetStringFromBinaryData(Value);
Else Else
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
File = New File(Value); File = New File(Value);
JSONReader = New JSONReader; JSONReader = New JSONReader;
If File.Exists() Then If File.Exists() Then
JSONReader.OpenFile(Value); JSONReader.OpenFile(Value);
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(Lower(Value), "http") Then
TFN = GetTempFileName(); TFN = GetTempFileName();
FileCopy(Value, TFN); FileCopy(Value, TFN);
JSONReader.OpenFile(TFN); JSONReader.OpenFile(TFN);
JSONReader.Read(); JSONReader.Read();
DeleteFiles(TFN); DeleteFiles(TFN);
Else Else
JSONReader.SetString(TrimAll(Value)); JSONReader.SetString(TrimAll(Value));
EndIf; EndIf;
Value = ReadJSON(JSONReader, True, Undefined, JSONDateFormat.ISO); Value = ReadJSON(JSONReader, True, Undefined, JSONDateFormat.ISO);
JSONReader.Close(); JSONReader.Close();
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
Value = InitialValue; Value = InitialValue;
GetArray(Value); GetArray(Value);
EndIf; EndIf;
EndIf; EndIf;
Except Except
Value = InitialValue; Value = InitialValue;
GetArray(Value); GetArray(Value);
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetArray(Value) Export Procedure GetArray(Value) Export
If TypeOf(Value) = Type("Array") Then If TypeOf(Value) = Type("Array") Then
Return; Return;
EndIf; EndIf;
If TypeOf(Value) = Type("String") If TypeOf(Value) = Type("String")
And StrStartsWith(Value, "[") And StrStartsWith(Value, "[")
And StrEndsWith(Value, "]") Then And StrEndsWith(Value, "]") Then
CommaInQuotes = "','"; CommaInQuotes = "','";
Value = StrReplace(Value, "['" , ""); Value = StrReplace(Value, "['" , "");
Value = StrReplace(Value, "']" , ""); Value = StrReplace(Value, "']" , "");
Value = StrReplace(Value, "', '" , CommaInQuotes); Value = StrReplace(Value, "', '" , CommaInQuotes);
Value = StrReplace(Value, "' , '", CommaInQuotes); Value = StrReplace(Value, "' , '", CommaInQuotes);
Value = StrReplace(Value, "' ,'" , CommaInQuotes); Value = StrReplace(Value, "' ,'" , CommaInQuotes);
Value = StrSplit(Value, CommaInQuotes, False); Value = StrSplit(Value, CommaInQuotes, False);
For N = 0 To Value.UBound() Do For N = 0 To Value.UBound() Do
Value[N] = TrimAll(Value[N]); Value[N] = TrimAll(Value[N]);
EndDo; EndDo;
Else Else
If TypeOf(Value) = Type("Number") Then If TypeOf(Value) = Type("Number") Then
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
OPI_Tools.ValueToArray(Value); OPI_Tools.ValueToArray(Value);
EndIf; EndIf;
EndProcedure EndProcedure
Procedure GetBoolean(Value) Export Procedure GetBoolean(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If TypeOf(Value) = Type("Boolean") Then If TypeOf(Value) = Type("Boolean") Then
Return; Return;
Else Else
Value = Boolean(Value); Value = Boolean(Value);
EndIf; EndIf;
Except Except
Raise "Error getting boolean data from parameter"; Raise "Error getting boolean data from parameter";
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetLine(Value, Val FromSource = False) Export Procedure GetLine(Value, Val FromSource = False) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Try Try
If ThisIsSymbolic(Value) Then If ThisIsSymbolic(Value) Then
If Not FromSource Then If Not FromSource Then
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
Return; Return;
EndIf; EndIf;
Value = OPI_Tools.NumberToString(Value); Value = OPI_Tools.NumberToString(Value);
File = New File(Value); File = New File(Value);
If File.Exists() Then If File.Exists() Then
TextReader = New TextReader(Value); TextReader = New TextReader(Value);
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(Lower(Value), "http") Then
TFN = GetTempFileName(); TFN = GetTempFileName();
FileCopy(Value, TFN); FileCopy(Value, TFN);
TextReader = New TextReader(TFN); TextReader = New TextReader(TFN);
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
DeleteFiles(TFN); DeleteFiles(TFN);
Else Else
Return; Return;
EndIf; EndIf;
ElsIf TypeOf(Value) = Type("BinaryData") Then ElsIf TypeOf(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value); Value = GetStringFromBinaryData(Value);
ElsIf ThisIsCollection(Value) Then ElsIf ThisIsCollection(Value) Then
Value = OPI_Tools.JSONString(Value); Value = OPI_Tools.JSONString(Value);
Else Else
Return; Return;
EndIf; EndIf;
Except Except
Value = String(Value); Value = String(Value);
Return; Return;
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetDate(Value) Export Procedure GetDate(Value) Export
If Value = Undefined Then If Value = Undefined Then
Return; Return;
EndIf; EndIf;
Date = "Date"; Date = "Date";
Try Try
If TypeOf(Value) = Type(Date) Then If TypeOf(Value) = Type(Date) Then
Return; Return;
Else Else
Value = XMLValue(Type(Date), Value); Value = XMLValue(Type(Date), Value);
EndIf; EndIf;
Except Except
OOD = New TypeDescription(Date); OOD = New TypeDescription(Date);
Value = OOD.AdjustValue(Value); Value = OOD.AdjustValue(Value);
EndTry; EndTry;
EndProcedure EndProcedure
Procedure GetNumber(Value) Export Procedure GetNumber(Value) Export
TypeDescription = New TypeDescription("Number"); TypeDescription = New TypeDescription("Number");
Value = TypeDescription.AdjustValue(Value); Value = TypeDescription.AdjustValue(Value);
EndProcedure EndProcedure
#EndRegion #EndRegion
@ -308,19 +308,19 @@ EndProcedure
#Region Private #Region Private
Function ThisIsCollection(Val Value) Function ThisIsCollection(Val Value)
Return TypeOf(Value) = Type("Array") Return TypeOf(Value) = Type("Array")
Or TypeOf(Value) = Type("Structure") Or TypeOf(Value) = Type("Structure")
Or TypeOf(Value) = Type("Map"); Or TypeOf(Value) = Type("Map");
EndFunction EndFunction
Function ThisIsSymbolic(Val Value) Function ThisIsSymbolic(Val Value)
Return TypeOf(Value) = Type("String") Return TypeOf(Value) = Type("String")
Or TypeOf(Value) = Type("Number") Or TypeOf(Value) = Type("Number")
Or TypeOf(Value) = Type("Date"); Or TypeOf(Value) = Type("Date");
EndFunction EndFunction
#EndRegion #EndRegion

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // 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 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
@ -46,55 +46,55 @@
// which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published // which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published
// on the server - you can use an HTTP service. Information about new messages will also be sent there // on the server - you can use an HTTP service. Information about new messages will also be sent there
// Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working // Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working
// //
// Parameters: // Parameters:
// Token - String - Viber Token - token // Token - String - Viber Token - token
// URL - String - URL for setting up Webhook - url // URL - String - URL for setting up Webhook - url
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SetWebhook(Val Token, Val URL) Export Function SetWebhook(Val Token, Val URL) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("url" , URL , "String", Parameters); OPI_Tools.AddField("url" , URL , "String", Parameters);
OPI_Tools.AddField("auth_token" , Token, "String", Parameters); OPI_Tools.AddField("auth_token" , Token, "String", Parameters);
Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters); Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters);
EndFunction EndFunction
// Get channel information // Get channel information
// Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals // Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals
// The user ID from channel information is not suitable for sending messages through the bot - they are different // The user ID from channel information is not suitable for sending messages through the bot - they are different
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetChannelInformation(Val Token) Export Function GetChannelInformation(Val Token) Export
URL = "https://chatapi.viber.com/pa/get_account_info"; URL = "https://chatapi.viber.com/pa/get_account_info";
Return OPI_Tools.Get(URL, , TokenInHeaders(Token)); Return OPI_Tools.Get(URL, , TokenInHeaders(Token));
EndFunction EndFunction
// Get user data // Get user data
// Gets user information by ID // Gets user information by ID
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// UserID - String, Number - Viber User ID - user // UserID - String, Number - Viber User ID - user
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetUserData(Val Token, Val UserID) Export Function GetUserData(Val Token, Val UserID) Export
URL = "https://chatapi.viber.com/pa/get_user_details"; URL = "https://chatapi.viber.com/pa/get_user_details";
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("id", UserID, "String", Parameters); OPI_Tools.AddField("id", UserID, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response; Return Response;
@ -103,22 +103,22 @@ EndFunction
// Get online users // Get online users
// Gets the status of a user or multiple users by ID // Gets the status of a user or multiple users by ID
// //
// Parameters: // Parameters:
// Token - String - Viber Token - token // Token - String - Viber Token - token
// UserIDs - String,Number,Array of String,Number - Viber User(s) ID - users // UserIDs - String,Number,Array of String,Number - Viber User(s) ID - users
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function GetOnlineUsers(Val Token, Val UserIDs) Export Function GetOnlineUsers(Val Token, Val UserIDs) Export
URL = "https://chatapi.viber.com/pa/get_online"; URL = "https://chatapi.viber.com/pa/get_online";
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters); OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response; Return Response;
EndFunction EndFunction
@ -129,14 +129,14 @@ EndFunction
// Send text message // Send text message
// Sends a text message to a chat or channel // Sends a text message to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Text - String - Message text - text // Text - String - Message text - text
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// Keyboard - Structure Of String - See CreateKeyboardFromArrayButton - keyboard // Keyboard - Structure Of String - See CreateKeyboardFromArrayButton - keyboard
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendTextMessage(Val Token Function SendTextMessage(Val Token
@ -144,40 +144,40 @@ Function SendTextMessage(Val Token
, Val UserID , Val UserID
, Val SendingToChannel , Val SendingToChannel
, Val Keyboard = "") Export , Val Keyboard = "") Export
Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard); Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard);
EndFunction EndFunction
// Send image // Send image
// Sends an image to a chat or channel // Sends an image to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Image URL - picture // URL - String - Image URL - picture
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - boolean - Sending to channel or bot chat - ischannel // SendingToChannel - boolean - Sending to channel or bot chat - ischannel
// Description - String - Image annotation - description // Description - String - Image annotation - description
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export
Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description); Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description);
EndFunction EndFunction
// SendFile // SendFile
// Sends a file (document) to a chat or channel // Sends a file (document) to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - File URL - file // URL - String - File URL - file
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// Extension - String - File extension - ext // Extension - String - File extension - ext
// Size - Number - File size. If not filled in > determined automatically by downloading the file - size // Size - Number - File size. If not filled in > determined automatically by downloading the file - size
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendFile(Val Token Function SendFile(Val Token
@ -186,36 +186,36 @@ Function SendFile(Val Token
, Val SendingToChannel , Val SendingToChannel
, Val Extension , Val Extension
, Val Size = "") Export , Val Size = "") Export
If Not ValueIsFilled(Size) Then If Not ValueIsFilled(Size) Then
Response = OPI_Tools.Get(URL); Response = OPI_Tools.Get(URL);
Size = Response.Size(); Size = Response.Size();
EndIf; EndIf;
String_ = "String"; String_ = "String";
Extension = StrReplace(Extension, ".", ""); Extension = StrReplace(Extension, ".", "");
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("URL" , URL , String_, Parameters); OPI_Tools.AddField("URL" , URL , String_, Parameters);
OPI_Tools.AddField("Size" , Size , String_, Parameters); OPI_Tools.AddField("Size" , Size , String_, Parameters);
OPI_Tools.AddField("Extension", Extension, String_, Parameters); OPI_Tools.AddField("Extension", Extension, String_, Parameters);
Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send contact // Send contact
// Sends a contact with a phone number to a chat or channel // Sends a contact with a phone number to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// ContactName - String - Contact name - name // ContactName - String - Contact name - name
// PhoneNumber - String - Phone number - phone // PhoneNumber - String - Phone number - phone
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendContact(Val Token Function SendContact(Val Token
@ -223,91 +223,91 @@ Function SendContact(Val Token
, Val PhoneNumber , Val PhoneNumber
, Val UserID , Val UserID
, Val SendingToChannel) Export , Val SendingToChannel) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("name" , ContactName , "String", Parameters); OPI_Tools.AddField("name" , ContactName , "String", Parameters);
OPI_Tools.AddField("phone_number", PhoneNumber, "String", Parameters); OPI_Tools.AddField("phone_number", PhoneNumber , "String", Parameters);
Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send location // Send location
// Sends geographic coordinates to a chat or channel // Sends geographic coordinates to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Latitude - String, Number - Geographic latitude - lat // Latitude - String, Number - Geographic latitude - lat
// Longitude - String, Number - Geographic longitude - long // Longitude - String, Number - Geographic longitude - long
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export
Parameters = New Structure; Parameters = New Structure;
OPI_Tools.AddField("lat", Latitude , "String", Parameters); OPI_Tools.AddField("lat", Latitude , "String", Parameters);
OPI_Tools.AddField("lon", Longitude, "String", Parameters); OPI_Tools.AddField("lon", Longitude, "String", Parameters);
Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters); Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters);
EndFunction EndFunction
// Send link // Send link
// Sends a URL with a preview to a chat or channel // Sends a URL with a preview to a chat or channel
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - SentLink - url // URL - String - SentLink - url
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user // UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel // SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Viber // Map Of KeyAndValue - serialized JSON response from Viber
Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export
Return SendMessage(Token, "url", UserID, SendingToChannel, URL); Return SendMessage(Token, "url", UserID, SendingToChannel, URL);
EndFunction EndFunction
// Create a keyboard from an array of buttons // Create a keyboard from an array of buttons
// Returns a keyboard structure for messages // Returns a keyboard structure for messages
// //
// Parameters: // Parameters:
// ButtonArray - Array of String - Array of buttons - buttons // ButtonArray - Array of String - Array of buttons - buttons
// ButtonColor - String - HEX color of buttons with # at the beginning - color // ButtonColor - String - HEX color of buttons with # at the beginning - color
// //
// Returns: // Returns:
// Structure - Create a keyboard from an array of buttons: // Structure - Create a keyboard from an array of buttons:
// * Buttons - Array of Structure - Array of formed buttons // * Buttons - Array of Structure - Array of formed buttons
// * Type - String - KeyboardType // * Type - String - KeyboardType
Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export
OPI_TypeConversion.GetLine(ButtonColor); OPI_TypeConversion.GetLine(ButtonColor);
OPI_TypeConversion.GetCollection(ButtonArray); OPI_TypeConversion.GetCollection(ButtonArray);
ArrayOfButtonStructures = New Array; ArrayOfButtonStructures = New Array;
KeyboardStructure = New Structure; KeyboardStructure = New Structure;
For Each ButtonText In ButtonArray Do For Each ButtonText In ButtonArray Do
ButtonStructure = New Structure; ButtonStructure = New Structure;
ButtonStructure.Insert("ActionType", "reply"); ButtonStructure.Insert("ActionType", "reply");
ButtonStructure.Insert("ActionBody", ButtonText); ButtonStructure.Insert("ActionBody", ButtonText);
ButtonStructure.Insert("Text" , ButtonText); ButtonStructure.Insert("Text" , ButtonText);
ButtonStructure.Insert("BgColor" , ButtonColor); ButtonStructure.Insert("BgColor" , ButtonColor);
ButtonStructure.Insert("Coloumns" , 3); ButtonStructure.Insert("Coloumns" , 3);
ArrayOfButtonStructures.Add(ButtonStructure); ArrayOfButtonStructures.Add(ButtonStructure);
EndDo; EndDo;
KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures); KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures);
KeyboardStructure.Insert("Type" , "keyboard"); KeyboardStructure.Insert("Type" , "keyboard");
Return KeyboardStructure; Return KeyboardStructure;
EndFunction EndFunction
#EndRegion #EndRegion
@ -317,7 +317,7 @@ EndFunction
#Region Private #Region Private
// Send message. // Send message.
// //
// Parameters: // Parameters:
// Token - String - Token // Token - String - Token
// Type - String - TypeOfSentMessage // Type - String - TypeOfSentMessage
@ -328,8 +328,8 @@ EndFunction
// * Size - Number, String - File size in case of sending // * Size - Number, String - File size in case of sending
// * Extension - String - File extension in case of sending // * Extension - String - File extension in case of sending
// Text - String - Message text // Text - String - Message text
// Keyboard - Structure Of String - Keyboard, if needed, see CreateKeyboardFromArrayButton // Keyboard - Structure Of String - Keyboard, if needed, see CreateKeyboardFromArrayButton
// //
// Returns: // Returns:
// Arbitrary, HTTPResponse - Send message // Arbitrary, HTTPResponse - Send message
Function SendMessage(Val Token Function SendMessage(Val Token
@ -339,81 +339,81 @@ Function SendMessage(Val Token
, Val Value = "" , Val Value = ""
, Val Text = "" , Val Text = ""
, Val Keyboard = "") , Val Keyboard = "")
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Type); OPI_TypeConversion.GetLine(Type);
OPI_TypeConversion.GetLine(UserID); OPI_TypeConversion.GetLine(UserID);
OPI_TypeConversion.GetLine(Text); OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetBoolean(IsChannel); OPI_TypeConversion.GetBoolean(IsChannel);
OPI_TypeConversion.GetCollection(Keyboard); OPI_TypeConversion.GetCollection(Keyboard);
ParametersStructure = ReturnStandardParameters(); ParametersStructure = ReturnStandardParameters();
ParametersStructure.Insert("type", Type); ParametersStructure.Insert("type", Type);
If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then
ParametersStructure.Insert("text", Text); ParametersStructure.Insert("text", Text);
EndIf; EndIf;
If TypeOf(Keyboard) = Type("Structure") Then If TypeOf(Keyboard) = Type("Structure") Then
ParametersStructure.Insert("keyboard", Keyboard); ParametersStructure.Insert("keyboard", Keyboard);
EndIf; EndIf;
If ValueIsFilled(Value) Then If ValueIsFilled(Value) Then
If Type = "file" Then If Type = "file" Then
ParametersStructure.Insert("media" , Value["URL"]); ParametersStructure.Insert("media" , Value["URL"]);
ParametersStructure.Insert("size" , Value["Size"]); ParametersStructure.Insert("size" , Value["Size"]);
ParametersStructure.Insert("file_name", "File." + Value["Extension"]); ParametersStructure.Insert("file_name", "File." + Value["Extension"]);
ElsIf Type = "contact" Then ElsIf Type = "contact" Then
ParametersStructure.Insert("contact" , Value); ParametersStructure.Insert("contact" , Value);
ElsIf Type = "location" Then ElsIf Type = "location" Then
ParametersStructure.Insert("location" , Value); ParametersStructure.Insert("location" , Value);
Else Else
ParametersStructure.Insert("media" , Value); ParametersStructure.Insert("media" , Value);
EndIf; EndIf;
EndIf; EndIf;
If IsChannel Then If IsChannel Then
ParametersStructure.Insert("from", UserID); ParametersStructure.Insert("from" , UserID);
URL = "https://chatapi.viber.com/pa/post"; URL = "https://chatapi.viber.com/pa/post";
Else Else
ParametersStructure.Insert("receiver", UserID); ParametersStructure.Insert("receiver", UserID);
URL = "https://chatapi.viber.com/pa/send_message"; URL = "https://chatapi.viber.com/pa/send_message";
EndIf; EndIf;
Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token)); Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token));
Try Try
Return OPI_Tools.JsonToStructure(Response.GetBodyAsBinaryData()); Return OPI_Tools.JsonToStructure(Response.GetBodyAsBinaryData());
Except Except
Return Response; Return Response;
EndTry; EndTry;
EndFunction EndFunction
Function ReturnStandardParameters() Function ReturnStandardParameters()
SenderStructure = New Structure; SenderStructure = New Structure;
SenderStructure.Insert("name" , "Bot"); SenderStructure.Insert("name" , "Bot");
SenderStructure.Insert("avatar", ""); SenderStructure.Insert("avatar", "");
ParametersStructure = New Structure; ParametersStructure = New Structure;
ParametersStructure.Insert("sender", SenderStructure); ParametersStructure.Insert("sender" , SenderStructure);
ParametersStructure.Insert("min_api_version", 1); ParametersStructure.Insert("min_api_version", 1);
Return ParametersStructure; Return ParametersStructure;
EndFunction EndFunction
Function TokenInHeaders(Val Token) Function TokenInHeaders(Val Token)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
HeadersStructure = New Map; HeadersStructure = New Map;
HeadersStructure.Insert("X-Viber-Auth-Token", Token); HeadersStructure.Insert("X-Viber-Auth-Token", Token);
Return HeadersStructure; Return HeadersStructure;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -37,7 +37,7 @@
//@skip-check wrong-string-literal-content //@skip-check wrong-string-literal-content
// Uncomment if OneScript is executed // Uncomment if OneScript is executed
// #Use "../../tools" // #Use "../../tools"
#Region Public #Region Public
@ -45,217 +45,217 @@
// Get disk information // Get disk information
// Gets information about the current disk // Gets information about the current disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDiskInformation(Val Token) Export Function GetDiskInformation(Val Token) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create folder // Create folder
// Creates a directory on the disk // Creates a directory on the disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the created folder - path // Path - String - Path to the created folder - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CreateFolder(Val Token, Val Path) Export Function CreateFolder(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources"; URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False); Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get object // Get object
// Gets information about a disk object at the specified path // Gets information about a disk object at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to folder or file - path // Path - String - Path to folder or file - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetObject(Val Token, Val Path) Export Function GetObject(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Delete object // Delete object
// Deletes an object at the specified path // Deletes an object at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the folder or file to be deleted - path // Path - String - Path to the folder or file to be deleted - path
// ToCart - Boolean - To cart - can // ToCart - Boolean - To cart - can
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function DeleteObject(Val Token, Val Path, Val ToCart = True) Export Function DeleteObject(Val Token, Val Path, Val ToCart = True) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(ToCart); OPI_TypeConversion.GetBoolean(ToCart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("permanently", Not ToCart); Parameters.Insert("permanently", Not ToCart);
Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers); Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Create object copy // Create object copy
// Creates a copy of the object at the specified path and path to the original // Creates a copy of the object at the specified path and path to the original
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Original - String - Path to the original file or directory - from // Original - String - Path to the original file or directory - from
// Path - String - Destination path for the copy - to // Path - String - Destination path for the copy - to
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CreateObjectCopy(Val Token, Val Original, Val Path, Val Overwrite = False) Export Function CreateObjectCopy(Val Token, Val Original, Val Path, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original); OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy"; URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("from" , Original); Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get download link // Get download link
// Gets a download link for the file // Gets a download link for the file
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the file for downloading - path // Path - String - Path to the file for downloading - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDownloadLink(Val Token, Val Path) Export Function GetDownloadLink(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Download file // Download file
// Downloads a file at the specified path // Downloads a file at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the file for downloading - path // Path - String - Path to the file for downloading - path
// SavePath - String - File save path - out // SavePath - String - File save path - out
// //
// Returns: // Returns:
// BinaryData,String - Binary data or file path when SavePath parameter is specified // BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Path, Val SavePath = "") Export Function DownloadFile(Val Token, Val Path, Val SavePath = "") Export
OPI_TypeConversion.GetLine(SavePath); OPI_TypeConversion.GetLine(SavePath);
Response = GetDownloadLink(Token, Path); Response = GetDownloadLink(Token, Path);
URL = Response["href"]; URL = Response["href"];
If Not ValueIsFilled(URL) Then If Not ValueIsFilled(URL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(URL, , , SavePath); Response = OPI_Tools.Get(URL, , , SavePath);
Return Response; Return Response;
EndFunction EndFunction
// Get list of files // Get list of files
// Gets a list of files with or without filtering by type // Gets a list of files with or without filtering by type
// List of available types: audio, backup, book, compressed, data, development, // List of available types: audio, backup, book, compressed, data, development,
// diskimage, document, encoded, executable, flash, font, // diskimage, document, encoded, executable, flash, font,
// mage, settings, spreadsheet, text, unknown, video, web // mage, settings, spreadsheet, text, unknown, video, web
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Count - Number, String - Number of returned objects - amount // Count - Number, String - Number of returned objects - amount
// OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset
// FilterByType - String - Filter by file type - type // FilterByType - String - Filter by file type - type
// SortByDate - Boolean - True > sort by date, False > alphabetically - datesort // SortByDate - Boolean - True > sort by date, False > alphabetically - datesort
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetFilesList(Val Token Function GetFilesList(Val Token
@ -263,50 +263,50 @@ Function GetFilesList(Val Token
, Val OffsetFromStart = 0 , Val OffsetFromStart = 0
, Val FilterByType = "" , Val FilterByType = ""
, Val SortByDate = False) Export , Val SortByDate = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(FilterByType); OPI_TypeConversion.GetLine(FilterByType);
OPI_TypeConversion.GetBoolean(SortByDate); OPI_TypeConversion.GetBoolean(SortByDate);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Count)); Parameters.Insert("limit", OPI_Tools.NumberToString(Count));
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart)); Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf; EndIf;
If ValueIsFilled(FilterByType) Then If ValueIsFilled(FilterByType) Then
Parameters.Insert("media_type", FilterByType); Parameters.Insert("media_type", FilterByType);
EndIf; EndIf;
If SortByDate Then If SortByDate Then
Destination = "last-uploaded"; Destination = "last-uploaded";
Else Else
Destination = "files"; Destination = "files";
EndIf; EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Move object // Move object
// Moves the object to the specified path and path to the original // Moves the object to the specified path and path to the original
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Original - String - Path to the original file or folder - from // Original - String - Path to the original file or folder - from
// Path - String - Destination path for moving - to // Path - String - Destination path for moving - to
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Export Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Export
@ -315,97 +315,97 @@ Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Ex
OPI_TypeConversion.GetLine(Original); OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("from" , Original); Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
// Upload file // Upload file
// Uploads a file to disk at the specified path // Uploads a file to disk at the specified path
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path for saving the file to disk - path // Path - String - Path for saving the file to disk - path
// File - String, BinaryData - File for upload - file // File - String, BinaryData - File for upload - file
// Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite // Overwrite - Boolean - Overwrite if a file with the same name already exists - rewrite
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function UploadFile(Val Token, Val Path, Val File, Val Overwrite = False) Export Function UploadFile(Val Token, Val Path, Val File, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite); OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetBinaryData(File); OPI_TypeConversion.GetBinaryData(File);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Href = "href"; Href = "href";
File = New Structure("file", File); File = New Structure("file", File);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path" , Path); Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite); Parameters.Insert("overwrite" , Overwrite);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers);
URL = Response[Href]; URL = Response[Href];
If Not ValueIsFilled(URL) Then If Not ValueIsFilled(URL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers); Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers);
Return Response; Return Response;
EndFunction EndFunction
// Upload file by URL // Upload file by URL
// Downloads a file to disk from the specified URL // Downloads a file to disk from the specified URL
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to place the downloaded file - path // Path - String - Path to place the downloaded file - path
// Address - String - File URL - url // Address - String - File URL - url
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function UploadFileByURL(Val Token, Val Path, Val Address) Export Function UploadFileByURL(Val Token, Val Path, Val Address) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Address); OPI_TypeConversion.GetLine(Address);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload"; URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLencoding)); Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLencoding));
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False); Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
@ -414,186 +414,186 @@ EndFunction
// Publish object // Publish object
// Publishes the disk object for public access // Publishes the disk object for public access
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the object to be published - path // Path - String - Path to the object to be published - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function PublishObject(Val Token, Val Path) Export Function PublishObject(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, True); Return TogglePublicAccess(Token, Path, True);
EndFunction EndFunction
// Unpublish object // Unpublish object
// Unpublishes a previously published object // Unpublishes a previously published object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Path - String - Path to the previously published object - path // Path - String - Path to the previously published object - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function CancelObjectPublication(Val Token, Val Path) Export Function CancelObjectPublication(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, False); Return TogglePublicAccess(Token, Path, False);
EndFunction EndFunction
// Get list of published objects. // Get list of published objects.
// Gets a list of published objects // Gets a list of published objects
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// Count - Number - Number of returned objects - amount // Count - Number - Number of returned objects - amount
// OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting objects not from the beginning of the list - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetPublishedObjectsList(Val Token, Val Count = 0, Val OffsetFromStart = 0) Export Function GetPublishedObjectsList(Val Token, Val Count = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", Count); Parameters.Insert("limit", Count);
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OffsetFromStart); Parameters.Insert("offset", OffsetFromStart);
EndIf; EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get public object // Get public object
// Gets information about the published object by its URL // Gets information about the published object by its URL
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// Count - Number - Number of returned nested objects (for catalog) - amount // Count - Number - Number of returned nested objects (for catalog) - amount
// OffsetFromStart - Number - Offset for getting nested objects not from the beginning of the list - offset // OffsetFromStart - Number - Offset for getting nested objects not from the beginning of the list - offset
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetPublicObject(Val Token, Val URL, Val Count = 0, Val OffsetFromStart = 0) Export Function GetPublicObject(Val Token, Val URL, Val Count = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Count); OPI_TypeConversion.GetLine(Count);
OPI_TypeConversion.GetLine(OffsetFromStart); OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Count) Then If ValueIsFilled(Count) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Count)); Parameters.Insert("limit", OPI_Tools.NumberToString(Count));
EndIf; EndIf;
If ValueIsFilled(OffsetFromStart) Then If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart)); Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf; EndIf;
Parameters.Insert("public_key", URL); Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Get download link for public object // Get download link for public object
// Gets a direct link to download the public object // Gets a direct link to download the public object
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// Path - String - Path inside the object - path // Path - String - Path inside the object - path
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetDownloadLinkForPublicObject(Val Token, Val URL, Val Path = "") Export Function GetDownloadLinkForPublicObject(Val Token, Val URL, Val Path = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Parameters = New Structure; Parameters = New Structure;
If ValueIsFilled(Path) Then If ValueIsFilled(Path) Then
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
EndIf; EndIf;
Parameters.Insert("public_key", URL); Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers); Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers);
Return Response; Return Response;
EndFunction EndFunction
// Save public object to disk // Save public object to disk
// Saves the public object to your disk // Saves the public object to your disk
// //
// Parameters: // Parameters:
// Token - String - Token - token // Token - String - Token - token
// URL - String - Object address - url // URL - String - Object address - url
// From - String - Path within public catalog (folders only) - from // From - String - Path within public catalog (folders only) - from
// Target - String - File save path - to // Target - String - File save path - to
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function SavePublicObjectToDisk(Val Token, Val URL, From = "", Target = "") Export Function SavePublicObjectToDisk(Val Token, Val URL, From = "", Target = "") Export
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL); OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(From); OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(Target); OPI_TypeConversion.GetLine(Target);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk"; Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href"; Href = "href";
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("public_key", EncodeString(URL, StringEncodingMethod.URLencoding)); Parameters.Insert("public_key", EncodeString(URL, StringEncodingMethod.URLencoding));
If ValueIsFilled(From) Then If ValueIsFilled(From) Then
Parameters.Insert("path", From); Parameters.Insert("path", From);
EndIf; EndIf;
If ValueIsFilled(Target) Then If ValueIsFilled(Target) Then
Parameters.Insert("save_path", Target); Parameters.Insert("save_path", Target);
EndIf; EndIf;
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(Address + Parameters, , Headers, False); Response = OPI_Tools.Post(Address + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion
#EndRegion #EndRegion
@ -601,42 +601,42 @@ EndFunction
#Region Private #Region Private
Function AuthorizationHeader(Val Token) Function AuthorizationHeader(Val Token)
Headers = New Map; Headers = New Map;
Headers.Insert("Authorization", "OAuth " + Token); Headers.Insert("Authorization", "OAuth " + Token);
Return Headers; Return Headers;
EndFunction EndFunction
Function TogglePublicAccess(Val Token, Val Path, Val PublicAccess) Function TogglePublicAccess(Val Token, Val Path, Val PublicAccess)
OPI_TypeConversion.GetLine(Token); OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path); OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(PublicAccess); OPI_TypeConversion.GetBoolean(PublicAccess);
Headers = AuthorizationHeader(Token); Headers = AuthorizationHeader(Token);
Destination = ?(PublicAccess, "publish", "unpublish"); Destination = ?(PublicAccess, "publish", "unpublish");
Href = "href"; Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination; URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination;
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("path", Path); Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters); Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False); Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href]; ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then If Not ValueIsFilled(ResponseURL) Then
Return Response; Return Response;
EndIf; EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers); Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -41,77 +41,77 @@
// Get confirmation code // Get confirmation code
// Gets the confirmation code and the address of the page where it needs to be entered // Gets the confirmation code and the address of the page where it needs to be entered
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function GetConfirmationCode(Val ClientId) Export Function GetConfirmationCode(Val ClientId) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
Parameters = New Structure("client_id", ClientId); Parameters = New Structure("client_id", ClientId);
Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Convert code to token // Convert code to token
// Converts the code to a token after entering the code when executing GetConfirmationCode // Converts the code to a token after entering the code when executing GetConfirmationCode
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// DeviceCode - String - device_code from GetConfirmationCode() - device // DeviceCode - String - device_code from GetConfirmationCode() - device
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(DeviceCode); OPI_TypeConversion.GetLine(DeviceCode);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("grant_type" , "device_code"); Parameters.Insert("grant_type" , "device_code");
Parameters.Insert("code" , DeviceCode); Parameters.Insert("code" , DeviceCode);
Parameters.Insert("client_id" , ClientId); Parameters.Insert("client_id" , ClientId);
Parameters.Insert("client_secret" , ClientSecret); Parameters.Insert("client_secret" , ClientSecret);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
// Refresh token // Refresh token
// Updates token by Refresh token // Updates token by Refresh token
// //
// Parameters: // Parameters:
// ClientId - String - Client id - id // ClientId - String - Client id - id
// ClientSecret - String - Client secret - secret // ClientSecret - String - Client secret - secret
// RefreshToken - String - Refresh token - refresh // RefreshToken - String - Refresh token - refresh
// //
// Returns: // Returns:
// Map Of KeyAndValue - serialized JSON response from Yandex // Map Of KeyAndValue - serialized JSON response from Yandex
Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientId); OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret); OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken); OPI_TypeConversion.GetLine(RefreshToken);
Parameters = New Structure; Parameters = New Structure;
Parameters.Insert("grant_type" , "refresh_token"); Parameters.Insert("grant_type" , "refresh_token");
Parameters.Insert("refresh_token" , RefreshToken); Parameters.Insert("refresh_token" , RefreshToken);
Parameters.Insert("client_id" , ClientId); Parameters.Insert("client_id" , ClientId);
Parameters.Insert("client_secret" , ClientSecret); Parameters.Insert("client_secret" , ClientSecret);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False); Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response; Return Response;
EndFunction EndFunction
#EndRegion #EndRegion

View File

@ -42,91 +42,91 @@
// Получить список баз // Получить список баз
// Получает список доступных баз // Получает список доступных баз
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset // Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ); OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ);
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить таблицы базы // Получить таблицы базы
// Получает схему таблиц базы // Получает схему таблиц базы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать базу // Создать базу
// Создает новую базу данных // Создает новую базу данных
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// РабочееПространство - Строка - Идентификатор рабочего пространства - ws // РабочееПространство - Строка - Идентификатор рабочего пространства - ws
// Наименование - Строка - Наименование новой базы - title // Наименование - Строка - Наименование новой базы - title
// КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata // КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц);
Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура") Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура")
И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка в данных коллекции таблиц"; ВызватьИсключение "Ошибка в данных коллекции таблиц";
КонецЕсли; КонецЕсли;
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
МассивТаблиц = Новый Массив; МассивТаблиц = Новый Массив;
Для Каждого Таблица Из КоллекцияТаблиц Цикл Для Каждого Таблица Из КоллекцияТаблиц Цикл
Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение); Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение);
МассивТаблиц.Добавить(Описание); МассивТаблиц.Добавить(Описание);
КонецЦикла; КонецЦикла;
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры); OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -137,56 +137,56 @@
// Создать таблицу // Создать таблицу
// Создает новую таблицу в базе // Создает новую таблицу в базе
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Наименование - Строка - Наименование новой таблицы - title // Наименование - Строка - Наименование новой таблицы - title
// МассивПолей - Массив Из Структура - Массив описаний полей - fieldsdata // МассивПолей - Массив Из Структура - Массив описаний полей - fieldsdata
// Описание - Строка - Описание таблицы - description // Описание - Строка - Описание таблицы - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание); Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить таблицу // Изменить таблицу
// Изменяет наименование и|или описание базы // Изменяет наименование и|или описание базы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание - description // Описание - Строка - Новое описание - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -197,40 +197,40 @@
// Создать поле // Создать поле
// Создет новое поле в таблице // Создет новое поле в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля - fielddata // СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля - fielddata
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля);
Если Не ТипЗнч(СтруктураПоля) = Тип("Структура") Если Не ТипЗнч(СтруктураПоля) = Тип("Структура")
И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка в данных описания поля"; ВызватьИсключение "Ошибка в данных описания поля";
КонецЕсли; КонецЕсли;
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки); Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить поле // Изменить поле
// Изменяет имя и|или описание существующего поля таблицы // Изменяет имя и|или описание существующего поля таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы База - base // База - Строка - Идентификатор базы База - base
@ -238,152 +238,152 @@
// Поле - Строка - Идентификатор поля - field // Поле - Строка - Идентификатор поля - field
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание - description // Описание - Строка - Новое описание - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле);
URL = "https://api.airtable.com/v0/meta/bases/" URL = "https://api.airtable.com/v0/meta/bases/"
+ База + База
+ "/tables/" + "/tables/"
+ Таблица + Таблица
+ "/fields/" + "/fields/"
+ Поле; + Поле;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить поле (строковое) // Получить поле (строковое)
// Получает описание поля строкового типа // Получает описание поля строкового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование нового поля - title // Наименование - Строка - Наименование нового поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "richText"); Возврат ОписаниеПримитивногоПоля(Наименование, "richText");
КонецФункции КонецФункции
// Получить поле (числовое) // Получить поле (числовое)
// Получает описание поля числового типа // Получает описание поля числового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование нового поля - title // Наименование - Строка - Наименование нового поля - title
// Точность - Число,Строка - Число знаков после запятой - precision // Точность - Число,Строка - Число знаков после запятой - precision
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность); OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность);
СтруктураОпций = Новый Структура("precision", Точность); СтруктураОпций = Новый Структура("precision", Точность);
Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (файл) // Получить поле (файл)
// Получает описание поля файлового типа // Получает описание поля файлового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеВложения(Знач Наименование) Экспорт Функция ПолучитьПолеВложения(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments"); Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments");
КонецФункции КонецФункции
// Получить поле (флажок) // Получить поле (флажок)
// Получает описание поля типа булево // Получает описание поля типа булево
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт
СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright"); СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright");
Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (дата) // Получить поле (дата)
// Получает описание поля типа дата // Получает описание поля типа дата
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеДаты(Знач Наименование) Экспорт Функция ПолучитьПолеДаты(Знач Наименование) Экспорт
СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso"); СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso");
СтруктураОпций = Новый Структура("dateFormat", СтруктураФормата); СтруктураОпций = Новый Структура("dateFormat", СтруктураФормата);
Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (email) // Получить поле (email)
// Получает описание поля с электронной почтой // Получает описание поля с электронной почтой
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеПочты(Знач Наименование) Экспорт Функция ПолучитьПолеПочты(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "email"); Возврат ОписаниеПримитивногоПоля(Наименование, "email");
КонецФункции КонецФункции
// Получить поле (телефон) // Получить поле (телефон)
// Получает описание поля с номером телефона // Получает описание поля с номером телефона
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber"); Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber");
КонецФункции КонецФункции
// Получить поле (url) // Получить поле (url)
// Получает описание поля с URL // Получает описание поля с URL
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "url"); Возврат ОписаниеПримитивногоПоля(Наименование, "url");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -392,67 +392,67 @@
// Получить список записей // Получить список записей
// Получает список записей выбранной таблицы // Получает список записей выбранной таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset // Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить запись // Получить запись
// Получает данные строки таблицы по идентификатору // Получает данные строки таблицы по идентификатору
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать записи // Создать записи
// Создает одну или массив записей по описанию или массиву описаний значений полей // Создает одну или массив записей по описанию или массиву описаний значений полей
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data // Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт
@ -460,52 +460,52 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
Параметры = Новый Структура(); Параметры = Новый Структура();
ДобавитьОписаниеДанных(Данные, Параметры); ДобавитьОписаниеДанных(Данные, Параметры);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить записи // Удалить записи
// Удаляет одну или массив записей по идентификаторам // Удаляет одну или массив записей по идентификаторам
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records // Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьМассив(Записи); OPI_ПреобразованиеТипов.ПолучитьМассив(Записи);
СтрокаЗаписей = ""; СтрокаЗаписей = "";
Для Каждого Запись Из Записи Цикл Для Каждого Запись Из Записи Цикл
СтрокаЗаписей = СтрокаЗаписей СтрокаЗаписей = СтрокаЗаписей
+ ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?") + ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?")
+ "records[]=" + "records[]="
+ OPI_Инструменты.ЧислоВСтроку(Запись); + OPI_Инструменты.ЧислоВСтроку(Запись);
КонецЦикла; КонецЦикла;
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -514,67 +514,67 @@
// Получить комментарии // Получить комментарии
// Получает список комментариев к записи в таблице // Получает список комментариев к записи в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset // Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments"; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать комментарий // Создать комментарий
// Создает комментарий к записи в таблице // Создает комментарий к записи в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Текст - Строка - Текст комментария - text // Текст - Строка - Текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments"; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить комментарий // Изменить комментарий
// Изменяет текст существующего комментария // Изменяет текст существующего комментария
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
@ -582,54 +582,54 @@
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Комментарий - Строка - Идентификатор комментария - comment // Комментарий - Строка - Идентификатор комментария - comment
// Текст - Строка - Новый текст комментария - text // Текст - Строка - Новый текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить комментарий // Удалить комментарий
// Удаляет комментарий к записи таблицы // Удаляет комментарий к записи таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Комментарий - Строка - Идентификатор комментария - comment // Комментарий - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -639,58 +639,58 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Функция ПолучитьЗаголовокАвторизации(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен); Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "") Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей);
ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей); ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей);
OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы); OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы);
Возврат ОписаниеТаблицы; Возврат ОписаниеТаблицы;
КонецФункции КонецФункции
Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "") Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "")
СтруктураПоля = Новый Структура(); СтруктураПоля = Новый Структура();
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля); OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля); OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля);
Возврат СтруктураПоля; Возврат СтруктураПоля;
КонецФункции КонецФункции
Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры) Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры)
Если ТипЗнч(Данные) = Тип("Массив") Тогда Если ТипЗнч(Данные) = Тип("Массив") Тогда
МассивОтправки = Новый Массив; МассивОтправки = Новый Массив;
Для Каждого ОписаниеЗаписи Из Данные Цикл Для Каждого ОписаниеЗаписи Из Данные Цикл
МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи)); МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи));
КонецЦикла; КонецЦикла;
OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры); OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры);
Иначе Иначе
OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -43,131 +43,131 @@
// Создать календарь // Создать календарь
// Создает пустой календарь // Создает пустой календарь
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Наименование - Строка - Наименование создаваемого календаря - title // Наименование - Строка - Наименование создаваемого календаря - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars"; URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("summary" , Наименование); Параметры.Вставить("summary" , Наименование);
Параметры.Вставить("timeZone", "Europe/Moscow"); Параметры.Вставить("timeZone", "Europe/Moscow");
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить календарь // Получить календарь
// Получает информацию о календаре по ID // Получает информацию о календаре по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить календарь // Изменить календарь
// Изменяет свойства существуещего календаря // Изменяет свойства существуещего календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание календаря - description // Описание - Строка - Новое описание календаря - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьМетаданныеКалендаря(Знач Токен Функция ИзменитьМетаданныеКалендаря(Знач Токен
, Знач Календарь , Знач Календарь
, Знач Наименование = "" , Знач Наименование = ""
, Знач Описание = "") Экспорт , Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание); OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Наименование) Тогда Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование); Параметры.Вставить("summary", Наименование);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Описание) Тогда Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание); Параметры.Вставить("description", Описание);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Очистить основной календарь // Очистить основной календарь
// Очищает список событий основного календаря // Очищает список событий основного календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear"; URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить календарь // Удалить календарь
// Удаляет календарь по ID // Удаляет календарь по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -178,105 +178,105 @@
// Получить список календарей // Получить список календарей
// Получает массив календарей аккаунта // Получает массив календарей аккаунта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий данных календарей // Соответствие Из КлючИЗначение - Массив соответствий данных календарей
Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивКалендарей = Новый Массив; МассивКалендарей = Новый Массив;
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей); ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей);
Возврат МассивКалендарей; Возврат МассивКалендарей;
КонецФункции КонецФункции
// Добавить календарь в список // Добавить календарь в список
// Добавляет существующий календарь в список пользователя // Добавляет существующий календарь в список пользователя
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("id", Календарь); Параметры.Вставить("id", Календарь);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить календарь списка // Получить календарь списка
// Получает календарь из списка пользователя по ID // Получает календарь из списка пользователя по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить календарь из списка // Удалить календарь из списка
// Удаляет календарь из списка пользователя // Удаляет календарь из списка пользователя
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить календарь списка // Изменить календарь списка
// Изменяет свойства календаря из списка пользователей // Изменяет свойства календаря из списка пользователей
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОсновнойЦвет - Строка - HEX основного цвета (#ffffff) - primary // ОсновнойЦвет - Строка - HEX основного цвета (#ffffff) - primary
// ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff) - secondary // ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff) - secondary
// Скрытый - Булево - Скрытый календарь - hidden // Скрытый - Булево - Скрытый календарь - hidden
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьКалендарьСписка(Знач Токен Функция ИзменитьКалендарьСписка(Знач Токен
@ -284,23 +284,23 @@
, Знач ОсновнойЦвет , Знач ОсновнойЦвет
, Знач ДополнительныйЦвет , Знач ДополнительныйЦвет
, Знач Скрытый = Ложь) Экспорт , Знач Скрытый = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет); OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет); OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет);
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый); OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
Параметры = Новый Соответствие; Параметры = Новый Соответствие;
Параметры.Вставить("hidden" , Скрытый); Параметры.Вставить("hidden" , Скрытый);
Параметры.Вставить("foregroundColor", ОсновнойЦвет); Параметры.Вставить("foregroundColor", ОсновнойЦвет);
Параметры.Вставить("backgroundColor", ДополнительныйЦвет); Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -310,15 +310,15 @@
#Область РаботаССобытиями #Область РаботаССобытиями
// Получить описание события !NOCLI // Получить описание события !NOCLI
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Пустой макет события // Соответствие Из КлючИЗначение - Пустой макет события
Функция ПолучитьОписаниеСобытия() Экспорт Функция ПолучитьОписаниеСобытия() Экспорт
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату(); ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
Час = 3600; Час = 3600;
Событие = Новый Соответствие; Событие = Новый Соответствие;
Событие.Вставить("Описание" , ""); // Описание события Событие.Вставить("Описание" , ""); // Описание события
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
@ -328,149 +328,149 @@
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам
Возврат Событие; Возврат Событие;
КонецФункции КонецФункции
// Получить список событий // Получить список событий
// Получает список всех событий календаря // Получает список всех событий календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий событий // Соответствие Из КлючИЗначение - Массив соответствий событий
Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивСобытий = Новый Массив; МассивСобытий = Новый Массив;
ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий); ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
Возврат МассивСобытий; Возврат МассивСобытий;
КонецФункции КонецФункции
// Получить событие // Получить событие
// Получает событие по ID // Получает событие по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events/" + "/events/"
+ Событие; + Событие;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать событие // Создать событие
// Создает новое событие // Создает новое событие
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props // ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google // Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия); Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
КонецФункции КонецФункции
// Переместить событие // Переместить событие
// Перемещает событие в другой календарь // Перемещает событие в другой календарь
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// КалендарьИсточник - Строка - ID календаря источника - from // КалендарьИсточник - Строка - ID календаря источника - from
// КалендарьПриемник - Строка - ID календаря приемника - to // КалендарьПриемник - Строка - ID календаря приемника - to
// Событие - Строка - ID события календаря источника - event // Событие - Строка - ID события календаря источника - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник); OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник); OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ КалендарьИсточник + КалендарьИсточник
+ "/events/" + "/events/"
+ Событие + Событие
+ "/move?destination=" + "/move?destination="
+ КалендарьПриемник; + КалендарьПриемник;
Ответ = OPI_Инструменты.Post(URL, , Заголовки); Ответ = OPI_Инструменты.Post(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить событие // Изменить событие
// Изменяет существующее событие // Изменяет существующее событие
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОписаниеСобытия - Строка - Новое описание события - props // ОписаниеСобытия - Строка - Новое описание события - props
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие); Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
КонецФункции КонецФункции
// Удалить событие // Удалить событие
// Удаляет событие по ID // Удаляет событие по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events/" + "/events/"
+ Событие; + Событие;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -482,51 +482,51 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПреобразоватьДату(Знач Дата) Функция ПреобразоватьДату(Знач Дата)
OPI_ПреобразованиеТипов.ПолучитьДату(Дата); OPI_ПреобразованиеТипов.ПолучитьДату(Дата);
СтруктураДаты = Новый Структура; СтруктураДаты = Новый Структура;
Если Не ТипЗнч(Дата) = Тип("Дата") Тогда Если Не ТипЗнч(Дата) = Тип("Дата") Тогда
Возврат Неопределено; Возврат Неопределено;
КонецЕсли; КонецЕсли;
Если Дата = НачалоДня(Дата) Тогда Если Дата = НачалоДня(Дата) Тогда
ФорматДаты = "ДФ=yyyy-MM-dd"; ФорматДаты = "ДФ=yyyy-MM-dd";
Поле = "date"; Поле = "date";
Иначе Иначе
ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ"; ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
Поле = "dateTime"; Поле = "dateTime";
КонецЕсли; КонецЕсли;
Дата = Формат(Дата, ФорматДаты); Дата = Формат(Дата, ФорматДаты);
СтруктураДаты.Вставить(Поле , Дата); СтруктураДаты.Вставить(Поле , Дата);
СтруктураДаты.Вставить("timeZone", "Europe/Moscow"); СтруктураДаты.Вставить("timeZone", "Europe/Moscow");
Возврат СтруктураДаты; Возврат СтруктураДаты;
КонецФункции КонецФункции
Функция ПреобразоватьВложения(Знач Вложения) Функция ПреобразоватьВложения(Знач Вложения)
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения);
МассивВложений = Новый Массив; МассивВложений = Новый Массив;
Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда
Для Каждого Вложение Из Вложения Цикл Для Каждого Вложение Из Вложения Цикл
ТекущеВложение = Новый Структура; ТекущеВложение = Новый Структура;
ТекущеВложение.Вставить("title" , Вложение.Ключ); ТекущеВложение.Вставить("title" , Вложение.Ключ);
ТекущеВложение.Вставить("fileUrl", Вложение.Значение); ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
МассивВложений.Добавить(ТекущеВложение); МассивВложений.Добавить(ТекущеВложение);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Если МассивВложений.Количество() > 0 Тогда Если МассивВложений.Количество() > 0 Тогда
Возврат МассивВложений; Возврат МассивВложений;
Иначе Иначе
@ -536,19 +536,19 @@
КонецФункции КонецФункции
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "") Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
Существующее = ЗначениеЗаполнено(Событие); Существующее = ЗначениеЗаполнено(Событие);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events" + "/events"
+ ?(Существующее, "/" + Событие, ""); + ?(Существующее, "/" + Событие, "");
Дата0 = ОписаниеСобытия["ДатаНачала"]; Дата0 = ОписаниеСобытия["ДатаНачала"];
Дата1 = ОписаниеСобытия["ДатаОкончания"]; Дата1 = ОписаниеСобытия["ДатаОкончания"];
Вложения = ОписаниеСобытия["МассивURLФайловВложений"]; Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
@ -556,85 +556,85 @@
Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено
, Ложь , Ложь
, ОписаниеСобытия["ОтправлятьУведомления"]); , ОписаниеСобытия["ОтправлятьУведомления"]);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]); Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
Параметры.Вставить("description", ОписаниеСобытия["Описание"]); Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]); Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
Параметры.Вставить("start" , ПреобразоватьДату(Дата0)); Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
Параметры.Вставить("end" , ПреобразоватьДату(Дата1)); Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
Параметры.Вставить("attachments", Вложения); Параметры.Вставить("attachments", Вложения);
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none")); ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления , "all" , "none"));
ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false")); ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false"));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры); OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);
Если Существующее Тогда Если Существующее Тогда
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Иначе Иначе
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "") Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList" Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Параметры , Параметры
, Заголовки); , Заголовки);
Календари = Результат[Items]; Календари = Результат[Items];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого Календарь Из Календари Цикл Для Каждого Календарь Из Календари Цикл
МассивКалендарей.Добавить(Календарь); МассивКалендарей.Добавить(Календарь);
КонецЦикла; КонецЦикла;
Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница); ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "") Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events" Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
, Параметры , Параметры
, Заголовки); , Заголовки);
События = Результат[Items]; События = Результат[Items];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого Событие Из События Цикл Для Каждого Событие Из События Цикл
МассивСобытий.Добавить(Событие); МассивСобытий.Добавить(Событие);
КонецЦикла; КонецЦикла;
Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница); ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -43,277 +43,277 @@
// Получить информацию об объекте // Получить информацию об объекте
// Получает информацию о папке или файле по ID // Получает информацию о папке или файле по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор файла или каталога - object // Идентификатор - Строка - Идентификатор файла или каталога - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список каталогов // Получить список каталогов
// Получает список каталогов диска // Получает список каталогов диска
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяСодержит - Строка - Отбор по имени - querry // ИмяСодержит - Строка - Отбор по имени - querry
// Подробно - Булево - Добавляет список файлов к полям каталога - depth // Подробно - Булево - Добавляет список файлов к полям каталога - depth
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий каталогов // Соответствие Из КлючИЗначение - Массив соответствий каталогов
Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно); OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивОбъектов = Новый Массив; МассивОбъектов = Новый Массив;
Отбор = Новый Массив; Отбор = Новый Массив;
Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'"); Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'");
Если ЗначениеЗаполнено(ИмяСодержит) Тогда Если ЗначениеЗаполнено(ИмяСодержит) Тогда
Отбор.Добавить("name contains '" + ИмяСодержит + "'"); Отбор.Добавить("name contains '" + ИмяСодержит + "'");
КонецЕсли; КонецЕсли;
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор);
Если Подробно Тогда Если Подробно Тогда
РазложитьОбъектыПодробно(Токен, МассивОбъектов); РазложитьОбъектыПодробно(Токен, МассивОбъектов);
КонецЕсли; КонецЕсли;
Возврат МассивОбъектов; Возврат МассивОбъектов;
КонецФункции КонецФункции
// Получить список файлов // Получить список файлов
// Получает список файлов // Получает список файлов
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяСодержит - Строка - Отбор по имени - querry // ИмяСодержит - Строка - Отбор по имени - querry
// Каталог - Строка - Отбор по ID каталога родителя - catalog // Каталог - Строка - Отбор по ID каталога родителя - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий файлов // Соответствие Из КлючИЗначение - Массив соответствий файлов
Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог); OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивОбъектов = Новый Массив; МассивОбъектов = Новый Массив;
Отбор = Новый Массив; Отбор = Новый Массив;
Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'"); Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'");
Если ЗначениеЗаполнено(ИмяСодержит) Тогда Если ЗначениеЗаполнено(ИмяСодержит) Тогда
Отбор.Добавить("name contains '" + ИмяСодержит + "'"); Отбор.Добавить("name contains '" + ИмяСодержит + "'");
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Каталог) Тогда Если ЗначениеЗаполнено(Каталог) Тогда
Отбор.Добавить("'" + Каталог + "' in parents"); Отбор.Добавить("'" + Каталог + "' in parents");
КонецЕсли; КонецЕсли;
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор);
Возврат МассивОбъектов; Возврат МассивОбъектов;
КонецФункции КонецФункции
// Загрузить файл // Загрузить файл
// Загружает файл на диск // Загружает файл на диск
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Файл - ДвоичныеДанные,Строка - Загружаемый файл - file // Файл - ДвоичныеДанные,Строка - Загружаемый файл - file
// Описание - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json // Описание - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт
Возврат УправлениеФайлом(Токен, Файл, Описание); Возврат УправлениеФайлом(Токен, Файл, Описание);
КонецФункции КонецФункции
// Создать папку // Создать папку
// Создает пустой каталог на диске // Создает пустой каталог на диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Имя - Строка - Имя папки - title // Имя - Строка - Имя папки - title
// Родитель - Строка - Родитель - catalog // Родитель - Строка - Родитель - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель); OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("MIME" , "application/vnd.google-apps.folder"); Описание.Вставить("MIME" , "application/vnd.google-apps.folder");
Описание.Вставить("Имя" , Имя); Описание.Вставить("Имя" , Имя);
Описание.Вставить("Описание", ""); Описание.Вставить("Описание", "");
Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root")); Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root"));
Возврат УправлениеФайлом(Токен, , Описание); Возврат УправлениеФайлом(Токен, , Описание);
КонецФункции КонецФункции
// Скачать файл // Скачать файл
// Получает файл по ID // Получает файл по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор файла - object // Идентификатор - Строка - Идентификатор файла - object
// ПутьСохранения - Строка - Путь сохранения файла - out // ПутьСохранения - Строка - Путь сохранения файла - out
// //
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения // ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Параметры = Новый Соответствие; Параметры = Новый Соответствие;
Параметры.Вставить("alt", "media"); Параметры.Вставить("alt", "media");
Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения); Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Скоприровать объект // Скоприровать объект
// Копирует файл или каталог // Копирует файл или каталог
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта - object // Идентификатор - Строка - Идентификатор объекта - object
// НовоеИмя - Строка - Новое имя объекта - title // НовоеИмя - Строка - Новое имя объекта - title
// НовыйРодитель - Строка - Новый каталог размещения - catalog // НовыйРодитель - Строка - Новый каталог размещения - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy"; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(НовоеИмя) Тогда Если ЗначениеЗаполнено(НовоеИмя) Тогда
Параметры.Вставить("name", НовоеИмя); Параметры.Вставить("name", НовоеИмя);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(НовыйРодитель) Тогда Если ЗначениеЗаполнено(НовыйРодитель) Тогда
МассивРодителей = Новый Массив; МассивРодителей = Новый Массив;
МассивРодителей.Добавить(НовыйРодитель); МассивРодителей.Добавить(НовыйРодитель);
Параметры.Вставить("parents", МассивРодителей); Параметры.Вставить("parents", МассивРодителей);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина); Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить файл // Обновить файл
// Обновляет двоичные данные файла // Обновляет двоичные данные файла
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор обновляемого объекта - object // Идентификатор - Строка - Идентификатор обновляемого объекта - object
// Файл - ДвоичныеДанные,Строка - Файл источник обновления - file // Файл - ДвоичныеДанные,Строка - Файл источник обновления - file
// НовоеИмя - Строка - Новое имя файла (если необходимо) - title // НовоеИмя - Строка - Новое имя файла (если необходимо) - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Если ЗначениеЗаполнено(НовоеИмя) Тогда Если ЗначениеЗаполнено(НовоеИмя) Тогда
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("Имя", НовоеИмя); Описание.Вставить("Имя", НовоеИмя);
Иначе Иначе
Описание = ""; Описание = "";
КонецЕсли; КонецЕсли;
Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор); Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор);
КонецФункции КонецФункции
// Удалить объект // Удалить объект
// Удаляет файл или каталог по ID // Удаляет файл или каталог по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта для удаления - object // Идентификатор - Строка - Идентификатор объекта для удаления - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить описание файла !NOCLI // Получить описание файла !NOCLI
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Описание файла // Соответствие Из КлючИЗначение - Описание файла
Функция ПолучитьОписаниеФайла() Экспорт Функция ПолучитьОписаниеФайла() Экспорт
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("MIME" , "image/jpeg"); // MIME-тип загружаемого файла Описание.Вставить("MIME" , "image/jpeg"); // MIME-тип загружаемого файла
Описание.Вставить("Имя" , "Новый файл.jpg"); // Имя файла с расширением Описание.Вставить("Имя" , "Новый файл.jpg"); // Имя файла с расширением
Описание.Вставить("Описание" , "Это новый файл"); // Описание файла Описание.Вставить("Описание" , "Это новый файл"); // Описание файла
Описание.Вставить("Родитель" , "root"); // ID каталога загрузки или "root" для загрузки в корень Описание.Вставить("Родитель" , "root"); // ID каталога загрузки или "root" для загрузки в корень
Возврат Описание; Возврат Описание;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -322,107 +322,107 @@
// Создать комментарий // Создать комментарий
// Создает комментарий к файлу или каталогу // Создает комментарий к файлу или каталогу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object // Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object
// Комментарий - Строка - Текст комментария - text // Комментарий - Строка - Текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*"; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("content", Комментарий); Параметры.Вставить("content", Комментарий);
Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить комментарий // Получить комментарий
// Получает комментарий по ID // Получает комментарий по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object // ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
// ИДКомментария - Строка - Идентификатор комментария - comment // ИДКомментария - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список комментариев // Получить список комментариев
// Получает список всех комментариев объекта // Получает список всех комментариев объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор объекта - object // ИДОбъекта - Строка - Идентификатор объекта - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments"; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить комментарий // Удалить комментарий
// Удаляет комментарий по ID // Удаляет комментарий по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object // ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
// ИДКомментария - Строка - Идентификатор комментария - comment // ИДКомментария - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -433,59 +433,59 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "") Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "")
URL = "https://www.googleapis.com/drive/v3/files"; URL = "https://www.googleapis.com/drive/v3/files";
Files = "files"; Files = "files";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда
ОтборСтрока = СтрСоединить(Отбор, " and "); ОтборСтрока = СтрСоединить(Отбор, " and ");
Параметры.Вставить("q", ОтборСтрока); Параметры.Вставить("q", ОтборСтрока);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки); Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Объекты = Результат[Files]; Объекты = Результат[Files];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого ТекущийОбъект Из Объекты Цикл Для Каждого ТекущийОбъект Из Объекты Цикл
МассивОбъектов.Добавить(ТекущийОбъект); МассивОбъектов.Добавить(ТекущийОбъект);
КонецЦикла; КонецЦикла;
Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов) Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов)
Для Каждого ТекущийОбъект Из МассивОбъектов Цикл Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
МассивФайлов = Новый Массив; МассивФайлов = Новый Массив;
ТекущийИД = ТекущийОбъект["id"]; ТекущийИД = ТекущийОбъект["id"];
Результат = ПолучитьСписокФайлов(Токен, , ТекущийИД); Результат = ПолучитьСписокФайлов(Токен, , ТекущийИД);
Для Каждого Файл Из Результат Цикл Для Каждого Файл Из Результат Цикл
МассивФайлов.Добавить(Файл); МассивФайлов.Добавить(Файл);
КонецЦикла; КонецЦикла;
ТекущийОбъект.Вставить("files", МассивФайлов); ТекущийОбъект.Вставить("files", МассивФайлов);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Процедура СформироватьПараметрыЗагрузкиФайла(Описание) Процедура СформироватьПараметрыЗагрузкиФайла(Описание)
СформированноеОписание = Новый Соответствие; СформированноеОписание = Новый Соответствие;
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание); OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание);
@ -495,81 +495,81 @@
СоответствиеПолей.Вставить("Описание" , "description"); СоответствиеПолей.Вставить("Описание" , "description");
СоответствиеПолей.Вставить("Родитель" , "parents"); СоответствиеПолей.Вставить("Родитель" , "parents");
СоответствиеПолей.Вставить("Расширение", "fileExtension"); СоответствиеПолей.Вставить("Расширение", "fileExtension");
Для Каждого Элемент Из Описание Цикл Для Каждого Элемент Из Описание Цикл
Если Элемент.Ключ = "Родитель" Тогда Если Элемент.Ключ = "Родитель" Тогда
ТекущееЗначение = Новый Массив; ТекущееЗначение = Новый Массив;
ТекущееЗначение.Добавить(Элемент.Значение); ТекущееЗначение.Добавить(Элемент.Значение);
Иначе Иначе
ТекущееЗначение = Элемент.Значение; ТекущееЗначение = Элемент.Значение;
КонецЕсли; КонецЕсли;
ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ); ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ);
СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение); СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение);
КонецЦикла; КонецЦикла;
Описание = СформированноеОписание; Описание = СформированноеОписание;
КонецПроцедуры КонецПроцедуры
Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "") Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Если ЗначениеЗаполнено(Описание) Тогда Если ЗначениеЗаполнено(Описание) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание);
КонецЕсли; КонецЕсли;
MimeType = "mimeType"; MimeType = "mimeType";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType]; MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType];
Иначе Иначе
MIME = Описание["MIME"]; MIME = Описание["MIME"];
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(Описание) Тогда Если Не ЗначениеЗаполнено(Описание) Тогда
Описание = Новый Соответствие; Описание = Новый Соответствие;
КонецЕсли; КонецЕсли;
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
СформироватьПараметрыЗагрузкиФайла(Описание); СформироватьПараметрыЗагрузкиФайла(Описание);
ОписаниеJSON = OPI_Инструменты.JSONСтрокой(Описание); ОписаниеJSON = OPI_Инструменты.JSONСтрокой(Описание);
СоответствиеФайла = Новый Соответствие; СоответствиеФайла = Новый Соответствие;
Если ЗначениеЗаполнено(Файл) Тогда Если ЗначениеЗаполнено(Файл) Тогда
РазмерЧасти = 268435457; РазмерЧасти = 268435457;
Размер = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти); Размер = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти);
СоответствиеФайла.Вставить(Файл, MIME); СоответствиеФайла.Вставить(Файл, MIME);
Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
Иначе Иначе
Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор);
КонецЕсли; КонецЕсли;
Иначе Иначе
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "") Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор); URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки); Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
@ -578,149 +578,149 @@
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "") Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
Для Каждого Файл Из СоответствиеФайла Цикл Для Каждого Файл Из СоответствиеФайла Цикл
Двоичные = Файл.Ключ; Двоичные = Файл.Ключ;
Прервать; Прервать;
КонецЦикла; КонецЦикла;
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор); URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина); Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина);
Иначе Иначе
Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина); Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина);
КонецЕсли; КонецЕсли;
АдресЗагрузки = Ответ.Заголовки["Location"]; АдресЗагрузки = Ответ.Заголовки["Location"];
Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки); ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки);
Ответ = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ); Ответ = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ);
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки) Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки)
Ответ = ""; Ответ = "";
РазмерЧасти = 268435456; РазмерЧасти = 268435456;
ПрочитаноБайт = 0; ПрочитаноБайт = 0;
ТекущаяПозиция = 0; ТекущаяПозиция = 0;
ОбщийРазмер = Двоичные.Размер(); ОбщийРазмер = Двоичные.Размер();
СтрОбщийРазмер = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер); СтрОбщийРазмер = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер);
ЧтениеДанных = Новый ЧтениеДанных(Двоичные); ЧтениеДанных = Новый ЧтениеДанных(Двоичные);
ИсходныйПоток = ЧтениеДанных.ИсходныйПоток(); ИсходныйПоток = ЧтениеДанных.ИсходныйПоток();
Пока ПрочитаноБайт < ОбщийРазмер Цикл Пока ПрочитаноБайт < ОбщийРазмер Цикл
ПрочитаноБайт = ИсходныйПоток.ТекущаяПозиция(); ПрочитаноБайт = ИсходныйПоток.ТекущаяПозиция();
Результат = ЧтениеДанных.Прочитать(РазмерЧасти); Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные(); ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
РазмерТекущих = ТекущиеДанные.Размер(); РазмерТекущих = ТекущиеДанные.Размер();
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1; СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1;
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
Прервать; Прервать;
КонецЕсли; КонецЕсли;
ЗаголовокПотока = "bytes " ЗаголовокПотока = "bytes "
+ OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция) + OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция)
+ "-" + "-"
+ OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция) + OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция)
+ "/" + "/"
+ СтрОбщийРазмер; + СтрОбщийРазмер;
ДопЗаголовки = Новый Соответствие; ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих)); ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих));
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока); ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
ДопЗаголовки.Вставить("Content-Type" , "application/octet-stream"); ДопЗаголовки.Вставить("Content-Type" , "application/octet-stream");
Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина); Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина);
РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция); РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция);
Если ЗначениеЗаполнено(РезультатПроверки) Тогда Если ЗначениеЗаполнено(РезультатПроверки) Тогда
Возврат РезультатПроверки; Возврат РезультатПроверки;
КонецЕсли; КонецЕсли;
КБайт = 1024; КБайт = 1024;
МБайт = КБайт * КБайт; МБайт = КБайт * КБайт;
Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт)); Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
ВыполнитьСборкуМусора(); ВыполнитьСборкуМусора();
ОсвободитьОбъект(ТекущиеДанные); ОсвободитьОбъект(ТекущиеДанные);
КонецЦикла; КонецЦикла;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция) Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция)
НачалоКодовОшибок = 400; НачалоКодовОшибок = 400;
КонецКодовПадений = 600; КонецКодовПадений = 600;
НачалоКодовУспеха = 200; НачалоКодовУспеха = 200;
КонецКодовУспеха = 300; КонецКодовУспеха = 300;
Перенаправление = 308; Перенаправление = 308;
Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда
ЗаголовокПотока = "bytes */" + СтрОбщийРазмер; ЗаголовокПотока = "bytes */" + СтрОбщийРазмер;
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока); ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина); ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина);
Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда
OPI_Инструменты.ОбработатьОтвет(ОтветПроверки); OPI_Инструменты.ОбработатьОтвет(ОтветПроверки);
Возврат ОтветПроверки; Возврат ОтветПроверки;
ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда
ЗагруженныеДанные = Ответ.Заголовки["Range"]; ЗагруженныеДанные = Ответ.Заголовки["Range"];
Иначе Иначе
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Иначе Иначе
ЗагруженныеДанные = Ответ.Заголовки["Range"]; ЗагруженныеДанные = Ответ.Заголовки["Range"];
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", ""); ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", "");
МассивИнформации = СтрРазделить(ЗагруженныеДанные, "-", Ложь); МассивИнформации = СтрРазделить(ЗагруженныеДанные, "-", Ложь);
НеобходимоЧастей = 2; НеобходимоЧастей = 2;
Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ТекущаяПозиция = Число(МассивИнформации[1]) + 1; ТекущаяПозиция = Число(МассивИнформации[1]) + 1;
Возврат ""; Возврат "";
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -43,90 +43,90 @@
// Создать книгу // Создать книгу
// Создает новую книгу // Создает новую книгу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Наименование - Строка - Наименование - title // Наименование - Строка - Наименование - title
// МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets // МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets"; URL = "https://sheets.googleapis.com/v4/spreadsheets";
Свойства = Новый Структура("title" , Наименование); Свойства = Новый Структура("title" , Наименование);
Листы = Новый Массив; Листы = Новый Массив;
ЗаполнитьМассивЛистов(МассивИменЛистов, Листы); ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить книгу // Получить книгу
// Получает информацию о книге по ID // Получает информацию о книге по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор книги - spreadsheet // Идентификатор - Строка - Идентификатор книги - spreadsheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить наименование книги // Изменить наименование книги
// Изменяет наименование существующей книги // Изменяет наименование существующей книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Изменение = Новый Структура("title", Наименование); Изменение = Новый Структура("title", Наименование);
ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title"); ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения); Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
МассивЗапросов = Новый Массив; МассивЗапросов = Новый Массив;
МассивЗапросов.Добавить(Запрос); МассивЗапросов.Добавить(Запрос);
Параметры = Новый Структура("requests", МассивЗапросов); Параметры = Новый Структура("requests", МассивЗапросов);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -135,95 +135,95 @@
// Добавить лист // Добавить лист
// Добавляет новый лист в книгу // Добавляет новый лист в книгу
// //
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Наименование - Строка - Наименование нового листа - title // Наименование - Строка - Наименование нового листа - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Лист = СоздатьЛист(Наименование); Лист = СоздатьЛист(Наименование);
Запросы = Новый Массив; Запросы = Новый Массив;
Изменение = Новый Структура("addSheet", Лист); Изменение = Новый Структура("addSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить лист // Удалить лист
// Удаляет лист из книги // Удаляет лист из книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Лист - Строка - Идентификатор удаляемого листа - sheet // Лист - Строка - Идентификатор удаляемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Запросы = Новый Массив; Запросы = Новый Массив;
Лист = Новый Структура("sheetId" , Лист); Лист = Новый Структура("sheetId" , Лист);
Изменение = Новый Структура("deleteSheet", Лист); Изменение = Новый Структура("deleteSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Копировать лист // Копировать лист
// Копирует лист из одной книги в другую // Копирует лист из одной книги в другую
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Откуда - Строка - ID книги источника - from // Откуда - Строка - ID книги источника - from
// Куда - Строка - ID книги приемника - to // Куда - Строка - ID книги приемника - to
// Лист - Строка - ID копируемого листа - sheet // Лист - Строка - ID копируемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ Откуда + Откуда
+ "/sheets/" + "/sheets/"
+ Лист + Лист
+ ":copyTo"; + ":copyTo";
Параметры = Новый Структура("destinationSpreadsheetId", Куда); Параметры = Новый Структура("destinationSpreadsheetId", Куда);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -232,14 +232,14 @@
// Установить значения ячеек // Установить значения ячеек
// Устанавливает значения ячеек листа // Устанавливает значения ячеек листа
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data // СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim // ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УстановитьЗначенияЯчеек(Знач Токен Функция УстановитьЗначенияЯчеек(Знач Токен
@ -247,90 +247,90 @@
, Знач СоответствиеЗначений , Знач СоответствиеЗначений
, Знач Лист = "" , Знач Лист = ""
, Знач ОсновноеИзмерение = "COLUMNS") Экспорт , Знач ОсновноеИзмерение = "COLUMNS") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура") Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
Возврат "Не удалось привести структуру значений к коллекции"; Возврат "Не удалось привести структуру значений к коллекции";
КонецЕсли; КонецЕсли;
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист); МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED"); Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Очистить ячейки // Очистить ячейки
// Очищает значение в ячейках // Очищает значение в ячейках
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Параметры = Новый Структура("ranges", МассивЯчеек); Параметры = Новый Структура("ranges", МассивЯчеек);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить значения ячеек // Получить значения ячеек
// Получает значения ячеек таблицы // Получает значения ячеек таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
Если ЗначениеЗаполнено(МассивЯчеек) Тогда Если ЗначениеЗаполнено(МассивЯчеек) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Первый = Истина; Первый = Истина;
Для Каждого Ячейка Из МассивЯчеек Цикл Для Каждого Ячейка Из МассивЯчеек Цикл
Разделитель = ?(Первый, "?", "&"); Разделитель = ?(Первый, "?", "&");
URL = URL + Разделитель + "ranges=" + Ячейка; URL = URL + Разделитель + "ranges=" + Ячейка;
Первый = Ложь; Первый = Ложь;
КонецЦикла; КонецЦикла;
Иначе Иначе
URL = URL + "?ranges='" + Лист + "'"; URL = URL + "?ranges ='" + Лист + "'";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -340,75 +340,75 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов) Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
Для Каждого ИмяЛиста Из МассивИмен Цикл Для Каждого ИмяЛиста Из МассивИмен Цикл
Лист = СоздатьЛист(ИмяЛиста); Лист = СоздатьЛист(ИмяЛиста);
МассивЛистов.Добавить(Лист); МассивЛистов.Добавить(Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист) Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
Если ЗначениеЗаполнено(Лист) Тогда Если ЗначениеЗаполнено(Лист) Тогда
Ячейка = "'" + Лист + "'!" + Ячейка; Ячейка = "'" + Лист + "'!" + Ячейка;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Функция СоздатьЛист(Знач Наименование) Функция СоздатьЛист(Знач Наименование)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
СвойстваЛиста = Новый Структура("title" , Наименование); СвойстваЛиста = Новый Структура("title" , Наименование);
Лист = Новый Структура("properties", СвойстваЛиста); Лист = Новый Структура("properties", СвойстваЛиста);
Возврат Лист; Возврат Лист;
КонецФункции КонецФункции
Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист) Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
МассивДанных = Новый Массив; МассивДанных = Новый Массив;
Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
ТекущееЗначение = ДанныеЯчейки.Значение; ТекущееЗначение = ДанныеЯчейки.Значение;
ТекущийКлюч = ДанныеЯчейки.Ключ; ТекущийКлюч = ДанныеЯчейки.Ключ;
ДобавитьИмяЛиста(ТекущийКлюч, Лист); ДобавитьИмяЛиста(ТекущийКлюч, Лист);
OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение); OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
ТекущиеДанные = Новый Соответствие; ТекущиеДанные = Новый Соответствие;
ТекущийМассив = Новый Массив; ТекущийМассив = Новый Массив;
ТекущийМассив.Добавить(ТекущееЗначение); ТекущийМассив.Добавить(ТекущееЗначение);
OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
МассивДанных.Добавить(ТекущиеДанные); МассивДанных.Добавить(ТекущиеДанные);
КонецЦикла; КонецЦикла;
Возврат МассивДанных; Возврат МассивДанных;
КонецФункции КонецФункции
Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист) Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Для Н = 0 По МассивИмен.ВГраница() Цикл Для Н = 0 По МассивИмен.ВГраница() Цикл
ДобавитьИмяЛиста(МассивИмен[Н], Лист); ДобавитьИмяЛиста(МассивИмен[Н], Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -41,97 +41,97 @@
// Сформировать ссылку получения кода // Сформировать ссылку получения кода
// Возвращает URL для авторизации в браузере // Возвращает URL для авторизации в браузере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// Calendar - Булево - разрешение на методы Calendar - calendar // Calendar - Булево - разрешение на методы Calendar - calendar
// Drive - Булево - разрешение на методы Drive - drive // Drive - Булево - разрешение на методы Drive - drive
// Sheets - Булево - разрешение на методы Sheets - sheets // Sheets - Булево - разрешение на методы Sheets - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка - Ссылка получения кода // Строка - Ссылка получения кода
Функция СформироватьСсылкуПолученияКода(Знач ClientID Функция СформироватьСсылкуПолученияКода(Знач ClientID
, Знач Calendar = Истина , Знач Calendar = Истина
, Знач Drive = Истина , Знач Drive = Истина
, Знач Sheets = Истина) Экспорт , Знач Sheets = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar); OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets); OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
OPI_ПреобразованиеТипов.ПолучитьБулево(Drive); OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
URL = "https://accounts.google.com/o/oauth2/auth"; URL = "https://accounts.google.com/o/oauth2/auth";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("response_type", "code"); ПараметрыURL.Вставить("response_type", "code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("access_type" , "offline"); ПараметрыURL.Вставить("access_type" , "offline");
ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets)); ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Возврат URL; Возврат URL;
КонецФункции КонецФункции
// Получить токен по коду // Получить токен по коду
// Получает токен по коду из авторизации в бразуере // Получает токен по коду из авторизации в бразуере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// Code - Строка - Code из браузера - code // Code - Строка - Code из браузера - code
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Code); OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "authorization_code"); ПараметрыURL.Вставить("grant_type" , "authorization_code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("code" , Code); ПараметрыURL.Вставить("code" , Code);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "refresh_token"); ПараметрыURL.Вставить("grant_type" , "refresh_token");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("refresh_token", RefreshToken); ПараметрыURL.Вставить("refresh_token", RefreshToken);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -141,14 +141,14 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен); Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -156,23 +156,23 @@
#Область СлужебныеПроцедурыИфункции #Область СлужебныеПроцедурыИфункции
Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets) Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
МассивРазрешений = Новый Массив; МассивРазрешений = Новый Массив;
Если Calendar Тогда Если Calendar Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
КонецЕсли; КонецЕсли;
Если Drive Тогда Если Drive Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
КонецЕсли; КонецЕсли;
Если Sheets Тогда Если Sheets Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
КонецЕсли; КонецЕсли;
Возврат СтрСоединить(МассивРазрешений, " "); Возврат СтрСоединить(МассивРазрешений, " ");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -48,18 +48,18 @@
// Получить ссылку для авторизации // Получить ссылку для авторизации
// Формирует ссылку для авторизации через браузер // Формирует ссылку для авторизации через браузер
// //
// Параметры: // Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка - URL для перехода в браузере // Строка - URL для перехода в браузере
Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("response_type" , "code"); ПараметрыURL.Вставить("response_type" , "code");
ПараметрыURL.Вставить("client_id" , Параметры_["client_id"]); ПараметрыURL.Вставить("client_id" , Параметры_["client_id"]);
ПараметрыURL.Вставить("redirect_uri" , Параметры_["redirect_uri"]); ПараметрыURL.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
@ -67,27 +67,27 @@
ПараметрыURL.Вставить("state" , "state"); ПараметрыURL.Вставить("state" , "state");
ПараметрыURL.Вставить("code_challenge" , "challenge"); ПараметрыURL.Вставить("code_challenge" , "challenge");
ПараметрыURL.Вставить("code_challenge_method", "plain"); ПараметрыURL.Вставить("code_challenge_method", "plain");
ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL; Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL;
Возврат Линк; Возврат Линк;
КонецФункции КонецФункции
// Получить токен // Получить токен
// Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации // Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации
// //
// Параметры: // Параметры:
// Код - Строка - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code // Код - Строка - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Код); OPI_ПреобразованиеТипов.ПолучитьСтроку(Код);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса = Новый Структура;
@ -96,35 +96,35 @@
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]); ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]); ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
ПараметрыЗапроса.Вставить("code_verifier", "challenge"); ПараметрыЗапроса.Вставить("code_verifier", "challenge");
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token" Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
, ПараметрыЗапроса, , Ложь); , ПараметрыЗапроса, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет v2 токен при помощи refresh_token // Обновляет v2 токен при помощи refresh_token
// //
// Параметры: // Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция ОбновитьТокен(Знач Параметры = "") Экспорт Функция ОбновитьТокен(Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Refresh = "refresh_token"; Refresh = "refresh_token";
ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]); ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]);
ПараметрыЗапроса.Вставить("grant_type" , Refresh); ПараметрыЗапроса.Вставить("grant_type" , Refresh);
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]); ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token" Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
, ПараметрыЗапроса, , Ложь); , ПараметрыЗапроса, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -133,23 +133,23 @@
// Метод для вставки в http-сервис, адрес которого указывается в redirect_uri // Метод для вставки в http-сервис, адрес которого указывается в redirect_uri
// Вызывает метод получения токена, так как для получения токена из кода, приходящего // Вызывает метод получения токена, так как для получения токена из кода, приходящего
// на redirect_uri после авторизации через браузер есть всего 30 секунд // на redirect_uri после авторизации через браузер есть всего 30 секунд
// //
// Параметры: // Параметры:
// Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис // Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис
// //
// Возвращаемое значение: // Возвращаемое значение:
// HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера // HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера
Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт
Код = Запрос.ПараметрыЗапроса["code"]; Код = Запрос.ПараметрыЗапроса["code"];
ОтветТокен = ПолучитьТокен(Код); ОтветТокен = ПолучитьТокен(Код);
// BSLLS:CommentedCode-off // BSLLS:CommentedCode-off
// Предпочтительное хранение токенов // Предпочтительное хранение токенов
// Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]); // Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]);
// Константы.TwitterToken.Установить(ОтветТокен["access_token"]); // Константы.TwitterToken.Установить(ОтветТокен["access_token"]);
// BSLLS:CommentedCode-on // BSLLS:CommentedCode-on
Возврат ОтветТокен; Возврат ОтветТокен;
КонецФункции КонецФункции
@ -160,189 +160,189 @@
// !NOCLI // !NOCLI
// Создать произвольный твит // Создать произвольный твит
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита // Текст - Строка - Текст твита
// МассивМедиа - Массив из Строка,ДвоичныеДанные - Массив двоичных данных или путей к файлам // МассивМедиа - Массив из Строка,ДвоичныеДанные - Массив двоичных данных или путей к файлам
// МассивВариантовОпроса - Массив из Строка - Массив вариантов опроса, если необходимо // МассивВариантовОпроса - Массив из Строка - Массив вариантов опроса, если необходимо
// ДлительностьОпроса - Строка,Число - Длительность опроса, если необходимо (опрос без длительности не создается) // ДлительностьОпроса - Строка,Число - Длительность опроса, если необходимо (опрос без длительности не создается)
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьПроизвольныйТвит(Знач Текст = "" Функция СоздатьПроизвольныйТвит(Знач Текст = ""
, Знач МассивМедиа = "" , Знач МассивМедиа = ""
, Знач МассивВариантовОпроса = "" , Знач МассивВариантовОпроса = ""
, Знач ДлительностьОпроса = "" , Знач ДлительностьОпроса = ""
, Знач Параметры = "") Экспорт , Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса); OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса);
Если ЗначениеЗаполнено(МассивМедиа) Тогда Если ЗначениеЗаполнено(МассивМедиа) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса);
КонецЕсли; КонецЕсли;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://api.twitter.com/2/tweets"; URL = "https://api.twitter.com/2/tweets";
Массив = "Массив"; Массив = "Массив";
Поля = Новый Соответствие; Поля = Новый Соответствие;
Если ЗначениеЗаполнено(Текст) Тогда Если ЗначениеЗаполнено(Текст) Тогда
Поля.Вставить("text", Текст); Поля.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
ДлительностьОпроса = Число(ДлительностьОпроса); ДлительностьОпроса = Число(ДлительностьОпроса);
Если МассивВариантовОпроса.Количество() > 0 Тогда Если МассивВариантовОпроса.Количество() > 0 Тогда
СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса); СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса);
Поля.Вставить("poll", СтруктураВарианта); Поля.Вставить("poll", СтруктураВарианта);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
Если МассивМедиа.Количество() > 0 Тогда Если МассивМедиа.Количество() > 0 Тогда
Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа)); Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_); Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать текстовый твит // Создать текстовый твит
// Создает твит без вложений // Создает твит без вложений
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт
Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры);
КонецФункции КонецФункции
// Создать твит картинки // Создать твит картинки
// Создает твит с картинкой вложением // Создает твит с картинкой вложением
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures // МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "photo", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "photo", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит гифки // Создать твит гифки
// Создает твит с вложением-гифкой // Создает твит с вложением-гифкой
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs // МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "animated_gif", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "animated_gif", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит видео // Создать твит видео
// Создает твит с видеовложением // Создает твит с видеовложением
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos // МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "video", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "video", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит опрос // Создать твит опрос
// Создает твит с опросом // Создает твит с опросом
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивВариантов - Массив из Строка - Массив вариантов опроса - options // МассивВариантов - Массив из Строка - Массив вариантов опроса - options
// Длительность - Строка,Число - Длительность опроса - duration // Длительность - Строка,Число - Длительность опроса - duration
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт
Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры); Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры);
КонецФункции КонецФункции
// Загрузить массив вложений !NOCLI // Загрузить массив вложений !NOCLI
// Загружает файлы на сервер и возвращает их ID // Загружает файлы на сервер и возвращает их ID
// //
// Параметры: // Параметры:
// МассивФайлов - Массив из Строка, ДвоичныеДанные - Массив файлов // МассивФайлов - Массив из Строка, ДвоичныеДанные - Массив файлов
// ТипВложений - Строка - Тип вложений // ТипВложений - Строка - Тип вложений
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Массив Из Строка - Массив ID медиа // Массив Из Строка - Массив ID медиа
Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений); OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов);
МассивМедиа = Новый Массив; МассивМедиа = Новый Массив;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
MIS = "media_id_string"; MIS = "media_id_string";
Если ЗначениеЗаполнено(МассивФайлов) Тогда Если ЗначениеЗаполнено(МассивФайлов) Тогда
Для Каждого ФайлОтправки Из МассивФайлов Цикл Для Каждого ФайлОтправки Из МассивФайлов Цикл
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки);
Ответ = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_); Ответ = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_);
IDМедиа = Ответ[MIS]; IDМедиа = Ответ[MIS];
Если Не ЗначениеЗаполнено(IDМедиа) Тогда Если Не ЗначениеЗаполнено(IDМедиа) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
МассивМедиа.Добавить(IDМедиа); МассивМедиа.Добавить(IDМедиа);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Возврат МассивМедиа; Возврат МассивМедиа;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -351,70 +351,70 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры) Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
ВидЗапроса = "POST"; ВидЗапроса = "POST";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://upload.twitter.com/1.1/media/upload.json"; URL = "https://upload.twitter.com/1.1/media/upload.json";
Если Тип = "photo" Тогда Если Тип = "photo" Тогда
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("media_data" , Base64Строка(Файл)); Поля.Вставить("media_data" , Base64Строка(Файл));
Поля.Вставить("media_category", Тип); Поля.Вставить("media_category", Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Иначе Иначе
Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_); Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры) Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры)
Единица = 1024; Единица = 1024;
Количество = 4; Количество = 4;
MediaKey = "media_key"; MediaKey = "media_key";
MIS = "media_id_string"; MIS = "media_id_string";
Command = "command"; Command = "command";
Размер = Файл.Размер(); Размер = Файл.Размер();
СоответствиеMIME = Новый Соответствие; СоответствиеMIME = Новый Соответствие;
СоответствиеMIME.Вставить("photo" , "image/jpeg"); СоответствиеMIME.Вставить("photo" , "image/jpeg");
СоответствиеMIME.Вставить("video" , "video/mp4"); СоответствиеMIME.Вставить("video" , "video/mp4");
СоответствиеMIME.Вставить("animated_gif", "image/gif"); СоответствиеMIME.Вставить("animated_gif", "image/gif");
РазмерЧасти = Количество * Единица * Единица; РазмерЧасти = Количество * Единица * Единица;
МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти); МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "INIT"); Поля.Вставить(Command , "INIT");
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер)); Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип)); Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
Поля.Вставить("media_category" , Тип); Поля.Вставить("media_category" , Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации[MediaKey]; KeyИнициализации = ОтветИнициализации[MediaKey];
IDИнициализации = ОтветИнициализации[MIS]; IDИнициализации = ОтветИнициализации[MIS];
Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
Возврат ОтветИнициализации; Возврат ОтветИнициализации;
КонецЕсли; КонецЕсли;
Счетчик = 0; Счетчик = 0;
Для Каждого Часть Из МассивЧтения Цикл Для Каждого Часть Из МассивЧтения Цикл
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "APPEND"); Поля.Вставить(Command , "APPEND");
Поля.Вставить("media_key" , KeyИнициализации); Поля.Вставить("media_key" , KeyИнициализации);
@ -422,111 +422,111 @@
Поля.Вставить("media" , Часть); Поля.Вставить("media" , Часть);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация); OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
КонецЦикла; КонецЦикла;
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "FINALIZE"); Поля.Вставить(Command , "FINALIZE");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL); СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL);
Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
Возврат СтатусОбработки; Возврат СтатусОбработки;
КонецЕсли; КонецЕсли;
Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры); Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры) Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Command = "command"; Command = "command";
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "STATUS"); Поля.Вставить(Command , "STATUS");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация); Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
Информация = Ответ[ProcessingInfo]; Информация = Ответ[ProcessingInfo];
Если Не ЗначениеЗаполнено(Информация) Тогда Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
СтатусОбработки = Информация["state"]; СтатусОбработки = Информация["state"];
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если СтатусОбработки = "failed" Тогда Если СтатусОбработки = "failed" Тогда
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео"; ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ПолучитьСтандартныеПараметры(Знач Параметры = "") Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
// Здесь собрано определение данных, необходимых для работы. // Здесь собрано определение данных, необходимых для работы.
// Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API, // Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API,
// которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга. // которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга.
// Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то, // Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то,
// что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести // что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести
// механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать // механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать
// на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1, // на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1,
// но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные // но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные
// Мировая гигокорпорация Илона Маска, кстати, напоминаю ;) // Мировая гигокорпорация Илона Маска, кстати, напоминаю ;)
// P.S Далее часто упоминается "страница настроек Twitter Developer" - это // P.S Далее часто упоминается "страница настроек Twitter Developer" - это
// https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем) // https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем)
Параметры_ = Новый Соответствие; Параметры_ = Новый Соответствие;
Разрешения = "tweet.read tweet.write tweet.moderate.write users.read " Разрешения = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read " + "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read " + "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write"; + "block.write bookmark.read bookmark.write";
// Данные для API v2 // Данные для API v2
// redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации // redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации
// scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен // scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен
// client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer // client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
// client_secret - Из 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) // access_token - ПолучитьСсылкуАвторизации() -> Браузер -> code придет на redirect_uri -> ПолучитьТокен(code)
// refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч) // refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч)
// Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token. // Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token.
// При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить // При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить
// не получится (access_token тоже не получится) // не получится (access_token тоже не получится)
// |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов // |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов
// | |refresh_token --| // | |refresh_token --|
// |--------[через 2 ч.]-------------------| // |--------[через 2 ч.]-------------------|
// Данные для API v1.1 // Данные для API v1.1
// oauth_token - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer // oauth_token - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
// oauth_token_secret - Из 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_key - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
// oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer // oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
// Эти токены обновлять не надо // Эти токены обновлять не надо
Параметры_.Вставить("redirect_uri" , ""); Параметры_.Вставить("redirect_uri" , "");
Параметры_.Вставить("scope" , Разрешения); Параметры_.Вставить("scope" , Разрешения);
Параметры_.Вставить("client_id" , ""); Параметры_.Вставить("client_id" , "");
@ -537,9 +537,9 @@
Параметры_.Вставить("oauth_token_secret" , ""); Параметры_.Вставить("oauth_token_secret" , "");
Параметры_.Вставить("oauth_consumer_key" , ""); Параметры_.Вставить("oauth_consumer_key" , "");
Параметры_.Вставить("oauth_consumer_secret", ""); Параметры_.Вставить("oauth_consumer_secret", "");
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
Для Каждого ПереданныйПараметр Из Параметры Цикл Для Каждого ПереданныйПараметр Из Параметры Цикл
Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение)); Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
@ -551,7 +551,7 @@
КонецФункции КонецФункции
Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL) Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату(); ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
ЗаголовокАвторизации = ""; ЗаголовокАвторизации = "";
МетодХэширования = "HMAC-SHA1"; МетодХэширования = "HMAC-SHA1";
@ -565,123 +565,123 @@
ТаблицаПараметров = Новый ТаблицаЗначений; ТаблицаПараметров = Новый ТаблицаЗначений;
ТаблицаПараметров.Колонки.Добавить("Ключ"); ТаблицаПараметров.Колонки.Добавить("Ключ");
ТаблицаПараметров.Колонки.Добавить("Значение"); ТаблицаПараметров.Колонки.Добавить("Значение");
Для Каждого Поле Из Поля Цикл Для Каждого Поле Из Поля Цикл
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = Поле.Ключ; НоваяСтрока.Ключ = Поле.Ключ;
НоваяСтрока.Значение = Поле.Значение; НоваяСтрока.Значение = Поле.Значение;
КонецЦикла; КонецЦикла;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = OCK; НоваяСтрока.Ключ = OCK;
НоваяСтрока.Значение = Параметры[OCK]; НоваяСтрока.Значение = Параметры[OCK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = OTK; НоваяСтрока.Ключ = OTK;
НоваяСтрока.Значение = Параметры[OTK]; НоваяСтрока.Значение = Параметры[OTK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_version"; НоваяСтрока.Ключ = "oauth_version";
НоваяСтрока.Значение = ВерсияАпи; НоваяСтрока.Значение = ВерсияАпи;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_signature_method"; НоваяСтрока.Ключ = "oauth_signature_method";
НоваяСтрока.Значение = МетодХэширования; НоваяСтрока.Значение = МетодХэширования;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_timestamp"; НоваяСтрока.Ключ = "oauth_timestamp";
НоваяСтрока.Значение = ТекущаяДатаUNIX; НоваяСтрока.Значение = ТекущаяДатаUNIX;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_nonce"; НоваяСтрока.Ключ = "oauth_nonce";
НоваяСтрока.Значение = ТекущаяДатаUNIX; НоваяСтрока.Значение = ТекущаяДатаUNIX;
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL); СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL); СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
КонецЦикла; КонецЦикла;
ТаблицаПараметров.Сортировать("Ключ"); ТаблицаПараметров.Сортировать("Ключ");
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
СтрокаСигнатуры = СтрокаСигнатуры СтрокаСигнатуры = СтрокаСигнатуры
+ СтрокаТаблицы.Ключ + СтрокаТаблицы.Ключ
+ "=" + " ="
+ СтрокаТаблицы.Значение + СтрокаТаблицы.Значение
+ "&"; + "&";
КонецЦикла; КонецЦикла;
СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1); СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
СтрокаСигнатуры = вРег(ВидЗапроса) СтрокаСигнатуры = вРег(ВидЗапроса)
+ "&" + "&"
+ КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL) + КодироватьСтроку(URL , СпособКодированияСтроки.КодировкаURL)
+ "&" + "&"
+ КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL); + КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL) Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL)
+ "&" + "&"
+ КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL); + КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись) Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
, ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры) , ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
, ХешФункция.SHA1 , ХешФункция.SHA1
, 64); , 64);
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL); Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
Разделитель = ""","; Разделитель = """,";
ЗаголовокАвторизации = ЗаголовокАвторизации ЗаголовокАвторизации = ЗаголовокАвторизации
+ "OAuth " + "OAuth "
+ "oauth_consumer_key=""" + Параметры[OCK] + Разделитель + "oauth_consumer_key =""" + Параметры[OCK] + Разделитель
+ "oauth_token=""" + Параметры[OTK] + Разделитель + "oauth_token =""" + Параметры[OTK] + Разделитель
+ "oauth_signature_method=""" + МетодХэширования + Разделитель + "oauth_signature_method=""" + МетодХэширования + Разделитель
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель + "oauth_timestamp =""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель + "oauth_nonce =""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_version=""" + ВерсияАпи + Разделитель + "oauth_version =""" + ВерсияАпи + Разделитель
+ "oauth_signature=""" + Сигнатура; + "oauth_signature =""" + Сигнатура;
СоответствиеЗаголовка = Новый Соответствие; СоответствиеЗаголовка = Новый Соответствие;
СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации); СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации);
Возврат СоответствиеЗаголовка; Возврат СоответствиеЗаголовка;
КонецФункции КонецФункции
Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры) Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
СоответствиеВозврата = Новый Соответствие; СоответствиеВозврата = Новый Соответствие;
СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]); СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]);
Возврат СоответствиеВозврата; Возврат СоответствиеВозврата;
КонецФункции КонецФункции
Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL) Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Информация = Ответ[ProcessingInfo]; Информация = Ответ[ProcessingInfo];
Если Не ЗначениеЗаполнено(Информация) Тогда Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
СтатусОбработки = Информация["state"]; СтатусОбработки = Информация["state"];
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ; Возврат Ответ;
Иначе Иначе
Возврат СтатусОбработки; Возврат СтатусОбработки;
КонецЕсли; КонецЕсли;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // 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 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
@ -46,55 +46,55 @@
// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована // который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях // на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать // Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// URL - Строка - URL для установки Webhook - url // URL - Строка - URL для установки Webhook - url
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры);
Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры); Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
КонецФункции КонецФункции
// Получить информацию о канале // Получить информацию о канале
// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook // Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные // ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
URL = "https://chatapi.viber.com/pa/get_account_info"; URL = "https://chatapi.viber.com/pa/get_account_info";
Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен)); Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
КонецФункции КонецФункции
// Получить данные пользователя // Получить данные пользователя
// Получает информацию о пользователе по ID // Получает информацию о пользователе по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// IDПользователя - Строка, Число - ID пользователя Viber - user // IDПользователя - Строка, Число - ID пользователя Viber - user
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
URL = "https://chatapi.viber.com/pa/get_user_details"; URL = "https://chatapi.viber.com/pa/get_user_details";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
@ -103,22 +103,22 @@
// Получить онлайн пользователей // Получить онлайн пользователей
// Получает статус пользователя или нескольких пользователей по ID // Получает статус пользователя или нескольких пользователей по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users // IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
URL = "https://chatapi.viber.com/pa/get_online"; URL = "https://chatapi.viber.com/pa/get_online";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -129,14 +129,14 @@
// Отправить текстовое сообщение // Отправить текстовое сообщение
// Отправляет текстовое сообщение в чат или канал // Отправляет текстовое сообщение в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Текст - Строка - Текст сообщения - text // Текст - Строка - Текст сообщения - text
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard // Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьТекстовоеСообщение(Знач Токен Функция ОтправитьТекстовоеСообщение(Знач Токен
@ -144,40 +144,40 @@
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Клавиатура = "") Экспорт , Знач Клавиатура = "") Экспорт
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура); Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
КонецФункции КонецФункции
// Отправить картинку // Отправить картинку
// Отправляет картинку в чат или канал // Отправляет картинку в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL картинки - picture // URL - Строка - URL картинки - picture
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel
// Описание - Строка - Аннотация к картинке - description // Описание - Строка - Аннотация к картинке - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание); Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
КонецФункции КонецФункции
// Отправить файл // Отправить файл
// Отправляет файл (документ) в чат или канал // Отправляет файл (документ) в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL файла - file // URL - Строка - URL файла - file
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Расширение - Строка - Расширение файла - ext // Расширение - Строка - Расширение файла - ext
// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size // Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьФайл(Знач Токен Функция ОтправитьФайл(Знач Токен
@ -186,36 +186,36 @@
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Расширение , Знач Расширение
, Знач Размер = "") Экспорт , Знач Размер = "") Экспорт
Если Не ЗначениеЗаполнено(Размер) Тогда Если Не ЗначениеЗаполнено(Размер) Тогда
Ответ = OPI_Инструменты.Get(URL); Ответ = OPI_Инструменты.Get(URL);
Размер = Ответ.Размер(); Размер = Ответ.Размер();
КонецЕсли; КонецЕсли;
Строка_ = "Строка"; Строка_ = "Строка";
Расширение = СтрЗаменить(Расширение, ".", ""); Расширение = СтрЗаменить(Расширение, ".", "");
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить контакт // Отправить контакт
// Отправляет контакт с номером телефона в чат или канал // Отправляет контакт с номером телефона в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяКонтакта - Строка - Имя контакта - name // ИмяКонтакта - Строка - Имя контакта - name
// НомерТелефона - Строка - Номер телефона - phone // НомерТелефона - Строка - Номер телефона - phone
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКонтакт(Знач Токен Функция ОтправитьКонтакт(Знач Токен
@ -223,91 +223,91 @@
, Знач НомерТелефона , Знач НомерТелефона
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал) Экспорт , Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить локацию // Отправить локацию
// Отправляет географические координаты в чат или канал // Отправляет географические координаты в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Широта - Строка,Число - Географическая широта - lat // Широта - Строка,Число - Географическая широта - lat
// Долгота - Строка,Число - Географическая долгота - long // Долгота - Строка,Число - Географическая долгота - long
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить ссылку // Отправить ссылку
// Отправляет URL с предпросмотром в чат или канал // Отправляет URL с предпросмотром в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Отправляемая ссылка - url // URL - Строка - Отправляемая ссылка - url
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL); Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
КонецФункции КонецФункции
// Сформировать клавиатуру из массива кнопок // Сформировать клавиатуру из массива кнопок
// Возвращает структура клавиатуры для сообщений // Возвращает структура клавиатуры для сообщений
// //
// Параметры: // Параметры:
// МассивКнопок - Массив из Строка - Массив кнопок - buttons // МассивКнопок - Массив из Строка - Массив кнопок - buttons
// ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color // ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Сформировать клавиатуру из массива кнопок: // Структура - Сформировать клавиатуру из массива кнопок:
// * Buttons - Массив из Структура - Массив сформированных кнопок // * Buttons - Массив из Структура - Массив сформированных кнопок
// * Type - Строка - Тип клавиатуры // * Type - Строка - Тип клавиатуры
Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок); OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
МассивСтруктурКнопок = Новый Массив; МассивСтруктурКнопок = Новый Массив;
СтруктураКлавиатуры = Новый Структура; СтруктураКлавиатуры = Новый Структура;
Для Каждого ТекстКнопки Из МассивКнопок Цикл Для Каждого ТекстКнопки Из МассивКнопок Цикл
СтруктураКнопки = Новый Структура; СтруктураКнопки = Новый Структура;
СтруктураКнопки.Вставить("ActionType", "reply"); СтруктураКнопки.Вставить("ActionType", "reply");
СтруктураКнопки.Вставить("ActionBody", ТекстКнопки); СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
СтруктураКнопки.Вставить("Text" , ТекстКнопки); СтруктураКнопки.Вставить("Text" , ТекстКнопки);
СтруктураКнопки.Вставить("BgColor" , ЦветКнопок); СтруктураКнопки.Вставить("BgColor" , ЦветКнопок);
СтруктураКнопки.Вставить("Coloumns" , 3); СтруктураКнопки.Вставить("Coloumns" , 3);
МассивСтруктурКнопок.Добавить(СтруктураКнопки); МассивСтруктурКнопок.Добавить(СтруктураКнопки);
КонецЦикла; КонецЦикла;
СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок); СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
СтруктураКлавиатуры.Вставить("Type" , "keyboard"); СтруктураКлавиатуры.Вставить("Type" , "keyboard");
Возврат СтруктураКлавиатуры; Возврат СтруктураКлавиатуры;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -317,7 +317,7 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Отправить сообщение. // Отправить сообщение.
// //
// Параметры: // Параметры:
// Токен - Строка - Токен // Токен - Строка - Токен
// Тип - Строка - Тип отправляемого сообщения // Тип - Строка - Тип отправляемого сообщения
@ -328,8 +328,8 @@
// * Размер - Число, Строка - Размер файла в случае отправке // * Размер - Число, Строка - Размер файла в случае отправке
// * Расширение - Строка - Расширение файла в случае отправки // * Расширение - Строка - Расширение файла в случае отправки
// Текст - Строка - Текст сообщения // Текст - Строка - Текст сообщения
// Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок // Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Отправить сообщение // Произвольный, HTTPОтвет - Отправить сообщение
Функция ОтправитьСообщение(Знач Токен Функция ОтправитьСообщение(Знач Токен
@ -339,28 +339,28 @@
, Знач Значение = "" , Знач Значение = ""
, Знач Текст = "" , Знач Текст = ""
, Знач Клавиатура = "") , Знач Клавиатура = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал); OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
СтруктураПараметров = ВернутьСтандартныеПараметры(); СтруктураПараметров = ВернутьСтандартныеПараметры();
СтруктураПараметров.Вставить("type", Тип); СтруктураПараметров.Вставить("type", Тип);
Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
СтруктураПараметров.Вставить("text", Текст); СтруктураПараметров.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
СтруктураПараметров.Вставить("keyboard", Клавиатура); СтруктураПараметров.Вставить("keyboard", Клавиатура);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда Если ЗначениеЗаполнено(Значение) Тогда
Если Тип = "file" Тогда Если Тип = "file" Тогда
СтруктураПараметров.Вставить("media" , Значение["URL"]); СтруктураПараметров.Вставить("media" , Значение["URL"]);
СтруктураПараметров.Вставить("size" , Значение["Размер"]); СтруктураПараметров.Вставить("size" , Значение["Размер"]);
СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]); СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
@ -371,49 +371,49 @@
Иначе Иначе
СтруктураПараметров.Вставить("media" , Значение); СтруктураПараметров.Вставить("media" , Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ЭтоКанал Тогда Если ЭтоКанал Тогда
СтруктураПараметров.Вставить("from", IDПользователя); СтруктураПараметров.Вставить("from" , IDПользователя);
URL = "https://chatapi.viber.com/pa/post"; URL = "https://chatapi.viber.com/pa/post";
Иначе Иначе
СтруктураПараметров.Вставить("receiver", IDПользователя); СтруктураПараметров.Вставить("receiver", IDПользователя);
URL = "https://chatapi.viber.com/pa/send_message"; URL = "https://chatapi.viber.com/pa/send_message";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
Попытка Попытка
Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()); Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
Исключение Исключение
Возврат Ответ; Возврат Ответ;
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция ВернутьСтандартныеПараметры() Функция ВернутьСтандартныеПараметры()
СтруктураОтправителя = Новый Структура; СтруктураОтправителя = Новый Структура;
СтруктураОтправителя.Вставить("name" , "Bot"); СтруктураОтправителя.Вставить("name" , "Bot");
СтруктураОтправителя.Вставить("avatar", ""); СтруктураОтправителя.Вставить("avatar", "");
СтруктураПараметров = Новый Структура; СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("sender", СтруктураОтправителя); СтруктураПараметров.Вставить("sender" , СтруктураОтправителя);
СтруктураПараметров.Вставить("min_api_version", 1); СтруктураПараметров.Вставить("min_api_version", 1);
Возврат СтруктураПараметров; Возврат СтруктураПараметров;
КонецФункции КонецФункции
Функция ТокенВЗаголовки(Знач Токен) Функция ТокенВЗаголовки(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
СтруктураЗаголовков = Новый Соответствие; СтруктураЗаголовков = Новый Соответствие;
СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен); СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
Возврат СтруктураЗаголовков; Возврат СтруктураЗаголовков;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -37,7 +37,7 @@
//@skip-check wrong-string-literal-content //@skip-check wrong-string-literal-content
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "../../tools" #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
@ -45,217 +45,217 @@
// Получить информацию о диске // Получить информацию о диске
// Получает информацию о текущем диске // Получает информацию о текущем диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать папку // Создать папку
// Создает каталог на диске // Создает каталог на диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к созаваемой папке - path // Путь - Строка - Путь к созаваемой папке - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources"; URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить объект // Получить объект
// Получает информацию об объекте диска по заданному пути // Получает информацию об объекте диска по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к папке или файлу - path // Путь - Строка - Путь к папке или файлу - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить объект // Удалить объект
// Удаляет объект по заданному пути // Удаляет объект по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к удаляемой папке или файлу - path // Путь - Строка - Путь к удаляемой папке или файлу - path
// ВКорзину - Булево - В корзину - can // ВКорзину - Булево - В корзину - can
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину); OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("permanently", Не ВКорзину); Параметры.Вставить("permanently", Не ВКорзину);
Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать копию объекта // Создать копию объекта
// Создает копию объекта по заданному пути и пути к оригиналу // Создает копию объекта по заданному пути и пути к оригиналу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Оригинал - Строка - Путь к оригинальному файлу или каталогу - from // Оригинал - Строка - Путь к оригинальному файлу или каталогу - from
// Путь - Строка - Путь назначения для копии - to // Путь - Строка - Путь назначения для копии - to
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал); OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy"; URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал); Параметры.Вставить("from" , Оригинал);
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить ссылку для скачивания // Получить ссылку для скачивания
// Получает ссылку для скачивания файла // Получает ссылку для скачивания файла
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к файлу для скачивания - path // Путь - Строка - Путь к файлу для скачивания - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Скачать файл // Скачать файл
// Скачивает файл по указанному пути // Скачивает файл по указанному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к файлу для скачивания - path // Путь - Строка - Путь к файлу для скачивания - path
// ПутьСохранения - Строка - Путь сохранения файла - out // ПутьСохранения - Строка - Путь сохранения файла - out
// //
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения // ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения); OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения);
Ответ = ПолучитьСсылкуДляСкачивания(Токен, Путь); Ответ = ПолучитьСсылкуДляСкачивания(Токен, Путь);
URL = Ответ["href"]; URL = Ответ["href"];
Если Не ЗначениеЗаполнено(URL) Тогда Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения); Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список файлов // Получить список файлов
// Получает список файлов с или без отбора по типу // Получает список файлов с или без отбора по типу
// Список доступных типов: audio, backup, book, compressed, data, development, // Список доступных типов: audio, backup, book, compressed, data, development,
// diskimage, document, encoded, executable, flash, font, // diskimage, document, encoded, executable, flash, font,
// mage, settings, spreadsheet, text, unknown, video, web // mage, settings, spreadsheet, text, unknown, video, web
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Количество - Число,Строка - Количество возвращаемых объектов - amount // Количество - Число,Строка - Количество возвращаемых объектов - amount
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
// ОтборПоТипу - Строка - Отбор по типу файла - type // ОтборПоТипу - Строка - Отбор по типу файла - type
// СортироватьПоДате - Булево - Истина > сортировать по дате, Ложь > по алфавиту - datesort // СортироватьПоДате - Булево - Истина > сортировать по дате, Ложь > по алфавиту - datesort
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСписокФайлов(Знач Токен Функция ПолучитьСписокФайлов(Знач Токен
@ -263,50 +263,50 @@
, Знач СмещениеОтНачала = 0 , Знач СмещениеОтНачала = 0
, Знач ОтборПоТипу = "" , Знач ОтборПоТипу = ""
, Знач СортироватьПоДате = Ложь) Экспорт , Знач СортироватьПоДате = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу); OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу);
OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате); OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество)); Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала)); Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(ОтборПоТипу) Тогда Если ЗначениеЗаполнено(ОтборПоТипу) Тогда
Параметры.Вставить("media_type", ОтборПоТипу); Параметры.Вставить("media_type", ОтборПоТипу);
КонецЕсли; КонецЕсли;
Если СортироватьПоДате Тогда Если СортироватьПоДате Тогда
Назначение = "last-uploaded"; Назначение = "last-uploaded";
Иначе Иначе
Назначение = "files"; Назначение = "files";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Переместить объект // Переместить объект
// Перемещает объект по заданному пути и пути к оригиналу // Перемещает объект по заданному пути и пути к оригиналу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Оригинал - Строка - Путь к оригинальному файлу или папке - from // Оригинал - Строка - Путь к оригинальному файлу или папке - from
// Путь - Строка - Путь назначение для перемещения - to // Путь - Строка - Путь назначение для перемещения - to
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
@ -315,97 +315,97 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал); OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал); Параметры.Вставить("from" , Оригинал);
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Загрузить файл // Загрузить файл
// Загружает файл на диск по заданному пути // Загружает файл на диск по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь для сохранение файла на Диске - path // Путь - Строка - Путь для сохранение файла на Диске - path
// Файл - Строка,ДвоичныеДанные - Файл для загрузки - file // Файл - Строка,ДвоичныеДанные - Файл для загрузки - file
// Перезаписывать - Булево - Перезаписывать, если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать, если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Href = "href"; Href = "href";
Файл = Новый Структура("file", Файл); Файл = Новый Структура("file", Файл);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки);
URL = Ответ[Href]; URL = Ответ[Href];
Если Не ЗначениеЗаполнено(URL) Тогда Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки); Ответ = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Загрузить файл по URL // Загрузить файл по URL
// Загружает файл на диск, забирая его по заданному URL // Загружает файл на диск, забирая его по заданному URL
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь помещения загруженного файла - path // Путь - Строка - Путь помещения загруженного файла - path
// Адрес - Строка - URL файла - url // Адрес - Строка - URL файла - url
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес); OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload"; URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL)); Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL));
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -414,186 +414,186 @@
// Опубликовать объект // Опубликовать объект
// Публикует объект диска в публичный доступ // Публикует объект диска в публичный доступ
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к публикуемому объекту - path // Путь - Строка - Путь к публикуемому объекту - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина); Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина);
КонецФункции КонецФункции
// Отменить публикацию объекта // Отменить публикацию объекта
// Отменяет публикацию ранее опубликованного объекта // Отменяет публикацию ранее опубликованного объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к опубликованному ранее объекту - path // Путь - Строка - Путь к опубликованному ранее объекту - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь); Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь);
КонецФункции КонецФункции
// Получить список опубликованных объектов. // Получить список опубликованных объектов.
// Получает список опубликованных объектов // Получает список опубликованных объектов
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Количество - Число - Количество возвращаемых объектов - amount // Количество - Число - Количество возвращаемых объектов - amount
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", Количество); Параметры.Вставить("limit", Количество);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", СмещениеОтНачала); Параметры.Вставить("offset", СмещениеОтНачала);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить публичный объект // Получить публичный объект
// Получает информацию об опубликованном объекте по его URL // Получает информацию об опубликованном объекте по его URL
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Количество - Число - Количество возвращаемых вложенных объектов (для каталога) - amount // Количество - Число - Количество возвращаемых вложенных объектов (для каталога) - amount
// СмещениеОтНачала - Число - Смещение для получение вложенных объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение вложенных объектов не из начала списка - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество)); Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала)); Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
КонецЕсли; КонецЕсли;
Параметры.Вставить("public_key", URL); Параметры.Вставить("public_key", URL);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить ссылку скачивания публичного объекта // Получить ссылку скачивания публичного объекта
// Получает прямую ссылку для скачивания публичного объекта // Получает прямую ссылку для скачивания публичного объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Путь - Строка - Путь внутри объекта - path // Путь - Строка - Путь внутри объекта - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Путь) Тогда Если ЗначениеЗаполнено(Путь) Тогда
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
КонецЕсли; КонецЕсли;
Параметры.Вставить("public_key", URL); Параметры.Вставить("public_key", URL);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Сохранить публичный объект на диск // Сохранить публичный объект на диск
// Сохраняет публичный объект на ваш диск // Сохраняет публичный объект на ваш диск
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Откуда - Строка - Путь внутри публичного каталога (только для папок) - from // Откуда - Строка - Путь внутри публичного каталога (только для папок) - from
// Куда - Строка - Путь сохранения файла - to // Куда - Строка - Путь сохранения файла - to
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk"; Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("public_key", КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL)); Параметры.Вставить("public_key", КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL));
Если ЗначениеЗаполнено(Откуда) Тогда Если ЗначениеЗаполнено(Откуда) Тогда
Параметры.Вставить("path", Откуда); Параметры.Вставить("path", Откуда);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Куда) Тогда Если ЗначениеЗаполнено(Куда) Тогда
Параметры.Вставить("save_path", Куда); Параметры.Вставить("save_path", Куда);
КонецЕсли; КонецЕсли;
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
@ -601,42 +601,42 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЗаголовокАвторизации(Знач Токен) Функция ЗаголовокАвторизации(Знач Токен)
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "OAuth " + Токен); Заголовки.Вставить("Authorization", "OAuth " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ) Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ); OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Назначение = ?(ОбщийДоступ, "publish", "unpublish"); Назначение = ?(ОбщийДоступ, "publish", "unpublish");
Href = "href"; Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение; URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -41,77 +41,77 @@
// Получить код подтверждения // Получить код подтверждения
// Получает код подтверждения и адрес страницы, на которой его необходимо ввести // Получает код подтверждения и адрес страницы, на которой его необходимо ввести
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
Параметры = Новый Структура("client_id", ClientId); Параметры = Новый Структура("client_id", ClientId);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Преобразовать код в токен // Преобразовать код в токен
// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения // Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device // КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства); OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "device_code"); Параметры.Вставить("grant_type" , "device_code");
Параметры.Вставить("code" , КодУстройства); Параметры.Вставить("code" , КодУстройства);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "refresh_token"); Параметры.Вставить("grant_type" , "refresh_token");
Параметры.Вставить("refresh_token" , RefreshToken); Параметры.Вставить("refresh_token" , RefreshToken);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,8 +1,8 @@
#Использовать "./internal" #Использовать "./internal"
#Использовать "../../tools" #Использовать "../../tools"
Тесты = OPI_ПолучениеДанныхТестов.СформироватьТестыАссертс(); Тесты = OPI_ПолучениеДанныхТестов.СформироватьТестыАссертс();
Для Каждого Тест Из Тесты Цикл Для Каждого Тест Из Тесты Цикл
Выполнить("OPI_Тесты." + Тест + "()"); Выполнить("OPI_Тесты." + Тест + "()");
КонецЦикла; КонецЦикла;

File diff suppressed because it is too large Load Diff

View File

@ -46,10 +46,10 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьСоответствиеРазделовТестирования() Экспорт Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
СтандартныеЗависимости = "[Decode, Build]"; СтандартныеЗависимости = "[Decode, Build]";
ЗависимостиГугл = "Testing-GoogleWorkspace"; ЗависимостиГугл = "Testing-GoogleWorkspace";
Разделы = Новый Структура; Разделы = Новый Структура;
Разделы.Вставить("Telegram" , СтандартныеЗависимости); Разделы.Вставить("Telegram" , СтандартныеЗависимости);
Разделы.Вставить("VK" , СтандартныеЗависимости); Разделы.Вставить("VK" , СтандартныеЗависимости);
@ -57,7 +57,7 @@
Разделы.Вставить("Twitter" , СтандартныеЗависимости); Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости); Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл); Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл); Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
Разделы.Вставить("Notion" , СтандартныеЗависимости); Разделы.Вставить("Notion" , СтандартныеЗависимости);
@ -65,13 +65,13 @@
Разделы.Вставить("Airtable" , СтандартныеЗависимости); Разделы.Вставить("Airtable" , СтандартныеЗависимости);
Разделы.Вставить("Dropbox" , СтандартныеЗависимости); Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
Разделы.Вставить("Bitrix24" , СтандартныеЗависимости); Разделы.Вставить("Bitrix24" , СтандартныеЗависимости);
Возврат Разделы; Возврат Разделы;
КонецФункции КонецФункции
Функция ПолучитьТаблицуТестов() Экспорт Функция ПолучитьТаблицуТестов() Экспорт
Телеграм = "Telegram"; Телеграм = "Telegram";
ВКонтакте = "VK"; ВКонтакте = "VK";
ЯДиск = "YandexDisk"; ЯДиск = "YandexDisk";
@ -86,13 +86,13 @@
АирТ = "Airtable"; АирТ = "Airtable";
ДропБокс = "Dropbox"; ДропБокс = "Dropbox";
Битрикс = "Bitrix24"; Битрикс = "Bitrix24";
ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Метод");
ТаблицаТестов.Колонки.Добавить("Синоним"); ТаблицаТестов.Колонки.Добавить("Синоним");
ТаблицаТестов.Колонки.Добавить("Раздел"); ТаблицаТестов.Колонки.Добавить("Раздел");
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
@ -114,7 +114,7 @@
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте);
@ -135,7 +135,7 @@
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
@ -146,25 +146,25 @@
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв);
НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы);
НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер);
@ -172,7 +172,7 @@
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер);
@ -182,7 +182,7 @@
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн);
@ -192,7 +192,7 @@
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак);
@ -206,12 +206,12 @@
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс);
@ -220,7 +220,7 @@
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьСписокФайловПапки" , "Получить список файлов папки" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьСписокФайловПапки" , "Получить список файлов папки" , ДропБокс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСТокеном" , "Работа с токеном" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСТокеном" , "Работа с токеном" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_СерверноеВремя" , "Серверное время" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_СерверноеВремя" , "Серверное время" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСНовостями" , "Работа с новостями" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСНовостями" , "Работа с новостями" , Битрикс);
@ -231,215 +231,215 @@
НовыйТест(ТаблицаТестов, "Б24_УчетРабочегоВремени" , "Учет рабочего времени" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_УчетРабочегоВремени" , "Учет рабочего времени" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСЧатами" , "Работа с чатами" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСЧатами" , "Работа с чатами" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСУведомлениями" , "Работа с уведомлениями" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСУведомлениями" , "Работа с уведомлениями" , Битрикс);
Возврат ТаблицаТестов; Возврат ТаблицаТестов;
КонецФункции КонецФункции
Функция ОжидаетЧто(Значение) Экспорт Функция ОжидаетЧто(Значение) Экспорт
Попытка Попытка
Модуль = ПолучитьОбщийМодуль("ЮТест"); Модуль = ПолучитьОбщийМодуль("ЮТест");
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль"); Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
Возврат Модуль.ОжидаетЧто(Значение); Возврат Модуль.ОжидаетЧто(Значение);
Исключение Исключение
Возврат Ожидаем.Что(Значение); Возврат Ожидаем.Что(Значение);
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция СформироватьТестыЯкс() Экспорт Функция СформироватьТестыЯкс() Экспорт
Модуль = ПолучитьОбщийМодуль("ЮТТесты"); Модуль = ПолучитьОбщийМодуль("ЮТТесты");
Разделы = ПолучитьСоответствиеРазделовТестирования(); Разделы = ПолучитьСоответствиеРазделовТестирования();
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
Для Каждого Раздел Из Разделы Цикл Для Каждого Раздел Из Разделы Цикл
ТекущийРаздел = Раздел.Ключ; ТекущийРаздел = Раздел.Ключ;
Отбор = Новый Структура("Раздел", ТекущийРаздел); Отбор = Новый Структура("Раздел", ТекущийРаздел);
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор); ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел); Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
Для Каждого Тест Из ТестыРаздела Цикл Для Каждого Тест Из ТестыРаздела Цикл
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним); Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
Возврат ""; Возврат "";
КонецФункции КонецФункции
Функция СформироватьТестыАссертс() Экспорт Функция СформироватьТестыАссертс() Экспорт
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
МассивТестов = Новый Массив; МассивТестов = Новый Массив;
Для Каждого Тест Из ТаблицаТестов Цикл Для Каждого Тест Из ТаблицаТестов Цикл
МассивТестов.Добавить(Тест.Метод); МассивТестов.Добавить(Тест.Метод);
КонецЦикла; КонецЦикла;
Возврат МассивТестов; Возврат МассивТестов;
КонецФункции КонецФункции
Функция ПолучитьПараметр(Параметр) Экспорт Функция ПолучитьПараметр(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь); Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
КонецФункции КонецФункции
Функция ПолучитьДвоичные(Параметр) Экспорт Функция ПолучитьДвоичные(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ПараметрЛокальный = Параметр + "Local"; ПараметрЛокальный = Параметр + "Local";
ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь); ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь);
ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь); ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
ФайлЛокальный = Новый Файл(ЗначениеЛокальный); ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
Если ФайлЛокальный.Существует() Тогда Если ФайлЛокальный.Существует() Тогда
Значение = Новый ДвоичныеДанные(ЗначениеЛокальный); Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
Иначе Иначе
Значение = ЗначениеОсновной; Значение = ЗначениеОсновной;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Тогда Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный); Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);
КонецЕсли; КонецЕсли;
Возврат Значение; Возврат Значение;
КонецФункции КонецФункции
Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
Если СтрНайти(Путь, "http") > 0 Если СтрНайти(Путь, "http") > 0
Или СтрНайти(Путь, "www") > 0 Тогда Или СтрНайти(Путь, "www") > 0 Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Путь, ИВФ); КопироватьФайл(Путь, ИВФ);
Путь = ИВФ; Путь = ИВФ;
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
Если СохранятьЛокально Тогда Если СохранятьЛокально Тогда
ЗаписатьПараметр(ПараметрЛокальный, ИВФ); ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
Иначе Иначе
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
КонецЕсли; КонецЕсли;
Иначе Иначе
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
КонецЕсли; КонецЕсли;
Возврат Двоичные; Возврат Двоичные;
КонецФункции КонецФункции
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьПараметр(Параметр); Значение = ПолучитьПараметр(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьДвоичные(Параметр); Значение = ПолучитьДвоичные(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ЗаписатьПараметрВФайл(Параметр, Значение, Путь); ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод; Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
Попытка Попытка
Данные = OPI_Инструменты.JSONСтрокой(Результат); Данные = OPI_Инструменты.JSONСтрокой(Результат);
Исключение Исключение
Данные = "Не JSON: " + Строка(Результат); Данные = "Не JSON: " + Строка(Результат);
КонецПопытки; КонецПопытки;
Данные = " " + Данные; Данные = " " + Данные;
Сообщить(Шапка); Сообщить(Шапка);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить(Данные); Сообщить(Данные);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить("---------------------------------"); Сообщить("---------------------------------");
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Если ЗначениеЗаполнено(Библиотека) Тогда Если ЗначениеЗаполнено(Библиотека) Тогда
ЗаписатьФайлЛога(Данные, Метод, Библиотека); ЗаписатьФайлЛога(Данные, Метод, Библиотека);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗначениеИзФайла(Параметр, Путь) Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], ""); Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
КонецФункции КонецФункции
Функция ПутьКФайлуДанных() Функция ПутьКФайлуДанных()
Путь = ""; Путь = "";
ВозможныеПути = Новый Массив; ВозможныеПути = Новый Массив;
ВозможныеПути.Добавить("./data.json"); ВозможныеПути.Добавить("./data.json");
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json"); ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
ВозможныеПути.Добавить("D:\GD\Мой диск\data.json"); ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
Для Каждого ВозможныйПуть Из ВозможныеПути Цикл Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
ФайлРепозитория = Новый Файл(ВозможныйПуть); ФайлРепозитория = Новый Файл(ВозможныйПуть);
Если ФайлРепозитория.Существует() Тогда Если ФайлРепозитория.Существует() Тогда
Путь = ВозможныйПуть; Путь = ВозможныйПуть;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Возврат Путь; Возврат Путь;
КонецФункции КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя) Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя); Модуль = Вычислить(Имя);
Возврат Модуль; Возврат Модуль;
КонецФункции КонецФункции
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел) Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
НовыйТест = ТаблицаЗначений.Добавить(); НовыйТест = ТаблицаЗначений.Добавить();
НовыйТест.Метод = Метод; НовыйТест.Метод = Метод;
НовыйТест.Синоним = Синоним; НовыйТест.Синоним = Синоним;
НовыйТест.Раздел = Раздел; НовыйТест.Раздел = Раздел;
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь) Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Значения.Вставить(Параметр, Значение); Значения.Вставить(Параметр, Значение);
@ -452,37 +452,37 @@
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека) Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
Попытка Попытка
ПутьЛогов = "./docs/ru/results"; ПутьЛогов = "./docs/ru/results";
ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека; ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
КаталогЛогов = Новый Файл(ПутьЛогов); КаталогЛогов = Новый Файл(ПутьЛогов);
Если Не КаталогЛогов.Существует() Тогда Если Не КаталогЛогов.Существует() Тогда
СоздатьКаталог(ПутьЛогов); СоздатьКаталог(ПутьЛогов);
КонецЕсли; КонецЕсли;
КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки); КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
Если Не КаталогЛоговБиблиотеки.Существует() Тогда Если Не КаталогЛоговБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьЛоговБиблиотеки); СоздатьКаталог(ПутьЛоговБиблиотеки);
КонецЕсли; КонецЕсли;
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log"; ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
ФайлЛога = Новый Файл(ПутьКФайлу); ФайлЛога = Новый Файл(ПутьКФайлу);
Если Не ФайлЛога.Существует() Тогда Если Не ФайлЛога.Существует() Тогда
ДокументЛога = Новый ТекстовыйДокумент; ДокументЛога = Новый ТекстовыйДокумент;
ДокументЛога.УстановитьТекст(Данные); ДокументЛога.УстановитьТекст(Данные);
ДокументЛога.Записать(ПутьКФайлу); ДокументЛога.Записать(ПутьКФайлу);
КонецЕсли; КонецЕсли;
Исключение Исключение
Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки()); Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -39,268 +39,268 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Возврат; Возврат;
Иначе Иначе
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение); Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНайти(Значение, "//") Тогда ИначеЕсли СтрНайти(Значение, "//") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
Иначе Иначе
Значение = Base64Значение(Значение); Значение = Base64Значение(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки(); ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) <> Тип("Строка") Тогда Если ТипЗнч(Значение) <> Тип("Строка") Тогда
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть); Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);
Иначе Иначе
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьКоллекцию(Значение) Экспорт Процедура ПолучитьКоллекцию(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
ИсходноеЗначение = Значение; ИсходноеЗначение = Значение;
Если ЭтоКоллекция(Значение) Тогда Если ЭтоКоллекция(Значение) Тогда
Возврат; Возврат;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе Иначе
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеJSON.ОткрытьФайл(Значение); ЧтениеJSON.ОткрытьФайл(Значение);
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеJSON.ОткрытьФайл(ИВФ); ЧтениеJSON.ОткрытьФайл(ИВФ);
ЧтениеJSON.Прочитать(); ЧтениеJSON.Прочитать();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение)); ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
КонецЕсли; КонецЕсли;
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
ЧтениеJSON.Закрыть(); ЧтениеJSON.Закрыть();
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьМассив(Значение) Экспорт Процедура ПолучитьМассив(Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Массив") Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Если ТипЗнч(Значение) = Тип("Строка")
И СтрНачинаетсяС(Значение, "[") И СтрНачинаетсяС(Значение, "[")
И СтрЗаканчиваетсяНа(Значение, "]") Тогда И СтрЗаканчиваетсяНа(Значение, "]") Тогда
ЗапятаяВКавычках = "','"; ЗапятаяВКавычках = "','";
Значение = СтрЗаменить(Значение, "['" , ""); Значение = СтрЗаменить(Значение, "['" , "");
Значение = СтрЗаменить(Значение, "']" , ""); Значение = СтрЗаменить(Значение, "']" , "");
Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь); Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
Для Н = 0 По Значение.ВГраница() Цикл Для Н = 0 По Значение.ВГраница() Цикл
Значение[Н] = СокрЛП(Значение[Н]); Значение[Н] = СокрЛП(Значение[Н]);
КонецЦикла; КонецЦикла;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("Число") Тогда Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
OPI_Инструменты.ЗначениеВМассив(Значение); OPI_Инструменты.ЗначениеВМассив(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьБулево(Значение) Экспорт Процедура ПолучитьБулево(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("Булево") Тогда Если ТипЗнч(Значение) = Тип("Булево") Тогда
Возврат; Возврат;
Иначе Иначе
Значение = Булево(Значение); Значение = Булево(Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения данных булево из параметра"; ВызватьИсключение "Ошибка получения данных булево из параметра";
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ЭтоСимвольное(Значение) Тогда Если ЭтоСимвольное(Значение) Тогда
Если Не ИзИсточника Тогда Если Не ИзИсточника Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеТекста = Новый ЧтениеТекста(Значение); ЧтениеТекста = Новый ЧтениеТекста(Значение);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеТекста = Новый ЧтениеТекста(ИВФ); ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
ИначеЕсли ЭтоКоллекция(Значение) Тогда ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение); Значение = OPI_Инструменты.JSONСтрокой(Значение);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = Строка(Значение); Значение = Строка(Значение);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДату(Значение) Экспорт Процедура ПолучитьДату(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Дата = "Дата"; Дата = "Дата";
Попытка Попытка
Если ТипЗнч(Значение) = Тип(Дата) Тогда Если ТипЗнч(Значение) = Тип(Дата) Тогда
Возврат; Возврат;
Иначе Иначе
Значение = XMLЗначение(Тип(Дата), Значение); Значение = XMLЗначение(Тип(Дата), Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ООД = Новый ОписаниеТипов(Дата); ООД = Новый ОписаниеТипов(Дата);
Значение = ООД.ПривестиЗначение(Значение); Значение = ООД.ПривестиЗначение(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьЧисло(Значение) Экспорт Процедура ПолучитьЧисло(Значение) Экспорт
ОписаниеТипа = Новый ОписаниеТипов("Число"); ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение(Значение); Значение = ОписаниеТипа.ПривестиЗначение(Значение);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@ -308,19 +308,19 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЭтоКоллекция(Знач Значение) Функция ЭтоКоллекция(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Массив") Возврат ТипЗнч(Значение) = Тип("Массив")
Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Структура")
Или ТипЗнч(Значение) = Тип("Соответствие"); Или ТипЗнч(Значение) = Тип("Соответствие");
КонецФункции КонецФункции
Функция ЭтоСимвольное(Знач Значение) Функция ЭтоСимвольное(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Строка") Возврат ТипЗнч(Значение) = Тип("Строка")
Или ТипЗнч(Значение) = Тип("Число") Или ТипЗнч(Значение) = Тип("Число")
Или ТипЗнч(Значение) = Тип("Дата"); Или ТипЗнч(Значение) = Тип("Дата");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -39,75 +39,75 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт // Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются // Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке: // Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode // https://creativecommons.org/licenses/by/4.0/legalcode
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64); Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
КонецФункции КонецФункции
Функция Хеш(ДвоичныеДанные, Тип) Экспорт Функция Хеш(ДвоичныеДанные, Тип) Экспорт
Хеширование = Новый ХешированиеДанных(Тип); Хеширование = Новый ХешированиеДанных(Тип);
Хеширование.Добавить(ДвоичныеДанные); Хеширование.Добавить(ДвоичныеДанные);
Возврат Хеширование.ХешСумма; Возврат Хеширование.ХешСумма;
КонецФункции КонецФункции
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
Дважды = 2; Дважды = 2;
Если Ключ.Размер() > РазмерБлока Тогда Если Ключ.Размер() > РазмерБлока Тогда
Ключ = Хеш(Ключ, Тип); Ключ = Хеш(Ключ, Тип);
КонецЕсли; КонецЕсли;
Если Ключ.Размер() <= РазмерБлока Тогда Если Ключ.Размер() <= РазмерБлока Тогда
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ); Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды); Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
КонецЕсли; КонецЕсли;
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ)); Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока)); Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока)); Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad); Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad); Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип); Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
КонецФункции КонецФункции
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
МассивДвоичныхДанных = Новый Массив; МассивДвоичныхДанных = Новый Массив;
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1); МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2); МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных); Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
КонецФункции КонецФункции
Функция ПовторитьСтроку(Строка, Количество) Экспорт Функция ПовторитьСтроку(Строка, Количество) Экспорт
Части = Новый Массив(Количество); Части = Новый Массив(Количество);
Для К = 1 По Количество Цикл Для К = 1 По Количество Цикл
Части.Добавить(Строка); Части.Добавить(Строка);
КонецЦикла; КонецЦикла;
Возврат СтрСоединить(Части, ""); Возврат СтрСоединить(Части, "");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Airtable.os // OneScript: ./OInt/core/Modules/OPI_Airtable.os
// Lib: Airtable // Lib: Airtable
// CLI: airtable // CLI: airtable
@ -42,91 +42,91 @@
// Получить список баз // Получить список баз
// Получает список доступных баз // Получает список доступных баз
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset // Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ); OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ);
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить таблицы базы // Получить таблицы базы
// Получает схему таблиц базы // Получает схему таблиц базы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать базу // Создать базу
// Создает новую базу данных // Создает новую базу данных
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// РабочееПространство - Строка - Идентификатор рабочего пространства - ws // РабочееПространство - Строка - Идентификатор рабочего пространства - ws
// Наименование - Строка - Наименование новой базы - title // Наименование - Строка - Наименование новой базы - title
// КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata // КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц);
Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура") Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура")
И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка в данных коллекции таблиц"; ВызватьИсключение "Ошибка в данных коллекции таблиц";
КонецЕсли; КонецЕсли;
URL = "https://api.airtable.com/v0/meta/bases"; URL = "https://api.airtable.com/v0/meta/bases";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
МассивТаблиц = Новый Массив; МассивТаблиц = Новый Массив;
Для Каждого Таблица Из КоллекцияТаблиц Цикл Для Каждого Таблица Из КоллекцияТаблиц Цикл
Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение); Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение);
МассивТаблиц.Добавить(Описание); МассивТаблиц.Добавить(Описание);
КонецЦикла; КонецЦикла;
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры); OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -137,56 +137,56 @@
// Создать таблицу // Создать таблицу
// Создает новую таблицу в базе // Создает новую таблицу в базе
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Наименование - Строка - Наименование новой таблицы - title // Наименование - Строка - Наименование новой таблицы - title
// МассивПолей - Массив Из Структура - Массив описаний полей - fieldsdata // МассивПолей - Массив Из Структура - Массив описаний полей - fieldsdata
// Описание - Строка - Описание таблицы - description // Описание - Строка - Описание таблицы - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание); Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить таблицу // Изменить таблицу
// Изменяет наименование и|или описание базы // Изменяет наименование и|или описание базы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание - description // Описание - Строка - Новое описание - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -197,40 +197,40 @@
// Создать поле // Создать поле
// Создет новое поле в таблице // Создет новое поле в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы - base // База - Строка - Идентификатор базы - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля - fielddata // СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля - fielddata
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля);
Если Не ТипЗнч(СтруктураПоля) = Тип("Структура") Если Не ТипЗнч(СтруктураПоля) = Тип("Структура")
И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка в данных описания поля"; ВызватьИсключение "Ошибка в данных описания поля";
КонецЕсли; КонецЕсли;
URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields"; URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки); Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить поле // Изменить поле
// Изменяет имя и|или описание существующего поля таблицы // Изменяет имя и|или описание существующего поля таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы База - base // База - Строка - Идентификатор базы База - base
@ -238,152 +238,152 @@
// Поле - Строка - Идентификатор поля - field // Поле - Строка - Идентификатор поля - field
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание - description // Описание - Строка - Новое описание - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле);
URL = "https://api.airtable.com/v0/meta/bases/" URL = "https://api.airtable.com/v0/meta/bases/"
+ База + База
+ "/tables/" + "/tables/"
+ Таблица + Таблица
+ "/fields/" + "/fields/"
+ Поле; + Поле;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить поле (строковое) // Получить поле (строковое)
// Получает описание поля строкового типа // Получает описание поля строкового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование нового поля - title // Наименование - Строка - Наименование нового поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "richText"); Возврат ОписаниеПримитивногоПоля(Наименование, "richText");
КонецФункции КонецФункции
// Получить поле (числовое) // Получить поле (числовое)
// Получает описание поля числового типа // Получает описание поля числового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование нового поля - title // Наименование - Строка - Наименование нового поля - title
// Точность - Число,Строка - Число знаков после запятой - precision // Точность - Число,Строка - Число знаков после запятой - precision
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность); OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность);
СтруктураОпций = Новый Структура("precision", Точность); СтруктураОпций = Новый Структура("precision", Точность);
Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (файл) // Получить поле (файл)
// Получает описание поля файлового типа // Получает описание поля файлового типа
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеВложения(Знач Наименование) Экспорт Функция ПолучитьПолеВложения(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments"); Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments");
КонецФункции КонецФункции
// Получить поле (флажок) // Получить поле (флажок)
// Получает описание поля типа булево // Получает описание поля типа булево
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт
СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright"); СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright");
Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (дата) // Получить поле (дата)
// Получает описание поля типа дата // Получает описание поля типа дата
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеДаты(Знач Наименование) Экспорт Функция ПолучитьПолеДаты(Знач Наименование) Экспорт
СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso"); СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso");
СтруктураОпций = Новый Структура("dateFormat", СтруктураФормата); СтруктураОпций = Новый Структура("dateFormat", СтруктураФормата);
Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций); Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций);
КонецФункции КонецФункции
// Получить поле (email) // Получить поле (email)
// Получает описание поля с электронной почтой // Получает описание поля с электронной почтой
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеПочты(Знач Наименование) Экспорт Функция ПолучитьПолеПочты(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "email"); Возврат ОписаниеПримитивногоПоля(Наименование, "email");
КонецФункции КонецФункции
// Получить поле (телефон) // Получить поле (телефон)
// Получает описание поля с номером телефона // Получает описание поля с номером телефона
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber"); Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber");
КонецФункции КонецФункции
// Получить поле (url) // Получить поле (url)
// Получает описание поля с URL // Получает описание поля с URL
// //
// Параметры: // Параметры:
// Наименование - Строка - Наименование поля - title // Наименование - Строка - Наименование поля - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Описание поля // Структура - Описание поля
Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт
Возврат ОписаниеПримитивногоПоля(Наименование, "url"); Возврат ОписаниеПримитивногоПоля(Наименование, "url");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -392,67 +392,67 @@
// Получить список записей // Получить список записей
// Получает список записей выбранной таблицы // Получает список записей выбранной таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset // Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить запись // Получить запись
// Получает данные строки таблицы по идентификатору // Получает данные строки таблицы по идентификатору
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать записи // Создать записи
// Создает одну или массив записей по описанию или массиву описаний значений полей // Создает одну или массив записей по описанию или массиву описаний значений полей
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data // Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт
@ -460,52 +460,52 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
Параметры = Новый Структура(); Параметры = Новый Структура();
ДобавитьОписаниеДанных(Данные, Параметры); ДобавитьОписаниеДанных(Данные, Параметры);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить записи // Удалить записи
// Удаляет одну или массив записей по идентификаторам // Удаляет одну или массив записей по идентификаторам
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records // Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьМассив(Записи); OPI_ПреобразованиеТипов.ПолучитьМассив(Записи);
СтрокаЗаписей = ""; СтрокаЗаписей = "";
Для Каждого Запись Из Записи Цикл Для Каждого Запись Из Записи Цикл
СтрокаЗаписей = СтрокаЗаписей СтрокаЗаписей = СтрокаЗаписей
+ ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?") + ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?")
+ "records[]=" + "records[]="
+ OPI_Инструменты.ЧислоВСтроку(Запись); + OPI_Инструменты.ЧислоВСтроку(Запись);
КонецЦикла; КонецЦикла;
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -514,67 +514,67 @@
// Получить комментарии // Получить комментарии
// Получает список комментариев к записи в таблице // Получает список комментариев к записи в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset // Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments"; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать комментарий // Создать комментарий
// Создает комментарий к записи в таблице // Создает комментарий к записи в таблице
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Текст - Строка - Текст комментария - text // Текст - Строка - Текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments"; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить комментарий // Изменить комментарий
// Изменяет текст существующего комментария // Изменяет текст существующего комментария
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
@ -582,54 +582,54 @@
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Комментарий - Строка - Идентификатор комментария - comment // Комментарий - Строка - Идентификатор комментария - comment
// Текст - Строка - Новый текст комментария - text // Текст - Строка - Новый текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура(); Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить комментарий // Удалить комментарий
// Удаляет комментарий к записи таблицы // Удаляет комментарий к записи таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base // База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table // Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record // Запись - Строка - Идентификатор записи в таблице - record
// Комментарий - Строка - Идентификатор комментария - comment // Комментарий - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База); OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись); OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий; URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
Заголовки = ПолучитьЗаголовокАвторизации(Токен); Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -639,58 +639,58 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Функция ПолучитьЗаголовокАвторизации(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен); Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "") Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей);
ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей); ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей);
OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы); OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы);
Возврат ОписаниеТаблицы; Возврат ОписаниеТаблицы;
КонецФункции КонецФункции
Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "") Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "")
СтруктураПоля = Новый Структура(); СтруктураПоля = Новый Структура();
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля); OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля); OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля); OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля);
Возврат СтруктураПоля; Возврат СтруктураПоля;
КонецФункции КонецФункции
Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры) Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры)
Если ТипЗнч(Данные) = Тип("Массив") Тогда Если ТипЗнч(Данные) = Тип("Массив") Тогда
МассивОтправки = Новый Массив; МассивОтправки = Новый Массив;
Для Каждого ОписаниеЗаписи Из Данные Цикл Для Каждого ОписаниеЗаписи Из Данные Цикл
МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи)); МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи));
КонецЦикла; КонецЦикла;
OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры); OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры);
Иначе Иначе
OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os // OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os
// Lib: Google Calendar // Lib: Google Calendar
// CLI: gcalendar // CLI: gcalendar
@ -43,131 +43,131 @@
// Создать календарь // Создать календарь
// Создает пустой календарь // Создает пустой календарь
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Наименование - Строка - Наименование создаваемого календаря - title // Наименование - Строка - Наименование создаваемого календаря - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars"; URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("summary" , Наименование); Параметры.Вставить("summary" , Наименование);
Параметры.Вставить("timeZone", "Europe/Moscow"); Параметры.Вставить("timeZone", "Europe/Moscow");
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить календарь // Получить календарь
// Получает информацию о календаре по ID // Получает информацию о календаре по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить календарь // Изменить календарь
// Изменяет свойства существуещего календаря // Изменяет свойства существуещего календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// Описание - Строка - Новое описание календаря - description // Описание - Строка - Новое описание календаря - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьМетаданныеКалендаря(Знач Токен Функция ИзменитьМетаданныеКалендаря(Знач Токен
, Знач Календарь , Знач Календарь
, Знач Наименование = "" , Знач Наименование = ""
, Знач Описание = "") Экспорт , Знач Описание = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание); OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Наименование) Тогда Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование); Параметры.Вставить("summary", Наименование);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Описание) Тогда Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание); Параметры.Вставить("description", Описание);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Очистить основной календарь // Очистить основной календарь
// Очищает список событий основного календаря // Очищает список событий основного календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear"; URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить календарь // Удалить календарь
// Удаляет календарь по ID // Удаляет календарь по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -178,105 +178,105 @@
// Получить список календарей // Получить список календарей
// Получает массив календарей аккаунта // Получает массив календарей аккаунта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий данных календарей // Соответствие Из КлючИЗначение - Массив соответствий данных календарей
Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивКалендарей = Новый Массив; МассивКалендарей = Новый Массив;
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей); ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей);
Возврат МассивКалендарей; Возврат МассивКалендарей;
КонецФункции КонецФункции
// Добавить календарь в список // Добавить календарь в список
// Добавляет существующий календарь в список пользователя // Добавляет существующий календарь в список пользователя
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("id", Календарь); Параметры.Вставить("id", Календарь);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить календарь списка // Получить календарь списка
// Получает календарь из списка пользователя по ID // Получает календарь из списка пользователя по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить календарь из списка // Удалить календарь из списка
// Удаляет календарь из списка пользователя // Удаляет календарь из списка пользователя
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить календарь списка // Изменить календарь списка
// Изменяет свойства календаря из списка пользователей // Изменяет свойства календаря из списка пользователей
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОсновнойЦвет - Строка - HEX основного цвета (#ffffff) - primary // ОсновнойЦвет - Строка - HEX основного цвета (#ffffff) - primary
// ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff) - secondary // ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff) - secondary
// Скрытый - Булево - Скрытый календарь - hidden // Скрытый - Булево - Скрытый календарь - hidden
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьКалендарьСписка(Знач Токен Функция ИзменитьКалендарьСписка(Знач Токен
@ -284,23 +284,23 @@
, Знач ОсновнойЦвет , Знач ОсновнойЦвет
, Знач ДополнительныйЦвет , Знач ДополнительныйЦвет
, Знач Скрытый = Ложь) Экспорт , Знач Скрытый = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет); OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет); OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет);
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый); OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true"; URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
Параметры = Новый Соответствие; Параметры = Новый Соответствие;
Параметры.Вставить("hidden" , Скрытый); Параметры.Вставить("hidden" , Скрытый);
Параметры.Вставить("foregroundColor", ОсновнойЦвет); Параметры.Вставить("foregroundColor", ОсновнойЦвет);
Параметры.Вставить("backgroundColor", ДополнительныйЦвет); Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -310,15 +310,15 @@
#Область РаботаССобытиями #Область РаботаССобытиями
// Получить описание события !NOCLI // Получить описание события !NOCLI
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Пустой макет события // Соответствие Из КлючИЗначение - Пустой макет события
Функция ПолучитьОписаниеСобытия() Экспорт Функция ПолучитьОписаниеСобытия() Экспорт
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату(); ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
Час = 3600; Час = 3600;
Событие = Новый Соответствие; Событие = Новый Соответствие;
Событие.Вставить("Описание" , ""); // Описание события Событие.Вставить("Описание" , ""); // Описание события
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
@ -328,149 +328,149 @@
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам
Возврат Событие; Возврат Событие;
КонецФункции КонецФункции
// Получить список событий // Получить список событий
// Получает список всех событий календаря // Получает список всех событий календаря
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий событий // Соответствие Из КлючИЗначение - Массив соответствий событий
Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивСобытий = Новый Массив; МассивСобытий = Новый Массив;
ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий); ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
Возврат МассивСобытий; Возврат МассивСобытий;
КонецФункции КонецФункции
// Получить событие // Получить событие
// Получает событие по ID // Получает событие по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events/" + "/events/"
+ Событие; + Событие;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать событие // Создать событие
// Создает новое событие // Создает новое событие
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props // ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google // Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия); Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
КонецФункции КонецФункции
// Переместить событие // Переместить событие
// Перемещает событие в другой календарь // Перемещает событие в другой календарь
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// КалендарьИсточник - Строка - ID календаря источника - from // КалендарьИсточник - Строка - ID календаря источника - from
// КалендарьПриемник - Строка - ID календаря приемника - to // КалендарьПриемник - Строка - ID календаря приемника - to
// Событие - Строка - ID события календаря источника - event // Событие - Строка - ID события календаря источника - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник); OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник); OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ КалендарьИсточник + КалендарьИсточник
+ "/events/" + "/events/"
+ Событие + Событие
+ "/move?destination=" + "/move?destination="
+ КалендарьПриемник; + КалендарьПриемник;
Ответ = OPI_Инструменты.Post(URL, , Заголовки); Ответ = OPI_Инструменты.Post(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить событие // Изменить событие
// Изменяет существующее событие // Изменяет существующее событие
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// ОписаниеСобытия - Строка - Новое описание события - props // ОписаниеСобытия - Строка - Новое описание события - props
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие); Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
КонецФункции КонецФункции
// Удалить событие // Удалить событие
// Удаляет событие по ID // Удаляет событие по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Календарь - Строка - ID календаря - calendar // Календарь - Строка - ID календаря - calendar
// Событие - Строка - ID события - event // Событие - Строка - ID события - event
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events/" + "/events/"
+ Событие; + Событие;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -482,51 +482,51 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПреобразоватьДату(Знач Дата) Функция ПреобразоватьДату(Знач Дата)
OPI_ПреобразованиеТипов.ПолучитьДату(Дата); OPI_ПреобразованиеТипов.ПолучитьДату(Дата);
СтруктураДаты = Новый Структура; СтруктураДаты = Новый Структура;
Если Не ТипЗнч(Дата) = Тип("Дата") Тогда Если Не ТипЗнч(Дата) = Тип("Дата") Тогда
Возврат Неопределено; Возврат Неопределено;
КонецЕсли; КонецЕсли;
Если Дата = НачалоДня(Дата) Тогда Если Дата = НачалоДня(Дата) Тогда
ФорматДаты = "ДФ=yyyy-MM-dd"; ФорматДаты = "ДФ=yyyy-MM-dd";
Поле = "date"; Поле = "date";
Иначе Иначе
ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ"; ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
Поле = "dateTime"; Поле = "dateTime";
КонецЕсли; КонецЕсли;
Дата = Формат(Дата, ФорматДаты); Дата = Формат(Дата, ФорматДаты);
СтруктураДаты.Вставить(Поле , Дата); СтруктураДаты.Вставить(Поле , Дата);
СтруктураДаты.Вставить("timeZone", "Europe/Moscow"); СтруктураДаты.Вставить("timeZone", "Europe/Moscow");
Возврат СтруктураДаты; Возврат СтруктураДаты;
КонецФункции КонецФункции
Функция ПреобразоватьВложения(Знач Вложения) Функция ПреобразоватьВложения(Знач Вложения)
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения);
МассивВложений = Новый Массив; МассивВложений = Новый Массив;
Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда
Для Каждого Вложение Из Вложения Цикл Для Каждого Вложение Из Вложения Цикл
ТекущеВложение = Новый Структура; ТекущеВложение = Новый Структура;
ТекущеВложение.Вставить("title" , Вложение.Ключ); ТекущеВложение.Вставить("title" , Вложение.Ключ);
ТекущеВложение.Вставить("fileUrl", Вложение.Значение); ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
МассивВложений.Добавить(ТекущеВложение); МассивВложений.Добавить(ТекущеВложение);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Если МассивВложений.Количество() > 0 Тогда Если МассивВложений.Количество() > 0 Тогда
Возврат МассивВложений; Возврат МассивВложений;
Иначе Иначе
@ -536,19 +536,19 @@
КонецФункции КонецФункции
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "") Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие); OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
Существующее = ЗначениеЗаполнено(Событие); Существующее = ЗначениеЗаполнено(Событие);
URL = "https://www.googleapis.com/calendar/v3/calendars/" URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь + Календарь
+ "/events" + "/events"
+ ?(Существующее, "/" + Событие, ""); + ?(Существующее, "/" + Событие, "");
Дата0 = ОписаниеСобытия["ДатаНачала"]; Дата0 = ОписаниеСобытия["ДатаНачала"];
Дата1 = ОписаниеСобытия["ДатаОкончания"]; Дата1 = ОписаниеСобытия["ДатаОкончания"];
Вложения = ОписаниеСобытия["МассивURLФайловВложений"]; Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
@ -556,85 +556,85 @@
Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено
, Ложь , Ложь
, ОписаниеСобытия["ОтправлятьУведомления"]); , ОписаниеСобытия["ОтправлятьУведомления"]);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]); Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
Параметры.Вставить("description", ОписаниеСобытия["Описание"]); Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]); Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
Параметры.Вставить("start" , ПреобразоватьДату(Дата0)); Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
Параметры.Вставить("end" , ПреобразоватьДату(Дата1)); Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
Параметры.Вставить("attachments", Вложения); Параметры.Вставить("attachments", Вложения);
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none")); ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления , "all" , "none"));
ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false")); ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false"));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры); OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);
Если Существующее Тогда Если Существующее Тогда
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
Иначе Иначе
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "") Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList" Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Параметры , Параметры
, Заголовки); , Заголовки);
Календари = Результат[Items]; Календари = Результат[Items];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого Календарь Из Календари Цикл Для Каждого Календарь Из Календари Цикл
МассивКалендарей.Добавить(Календарь); МассивКалендарей.Добавить(Календарь);
КонецЦикла; КонецЦикла;
Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница); ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "") Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "")
Items = "items"; Items = "items";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events" Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
, Параметры , Параметры
, Заголовки); , Заголовки);
События = Результат[Items]; События = Результат[Items];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого Событие Из События Цикл Для Каждого Событие Из События Цикл
МассивСобытий.Добавить(Событие); МассивСобытий.Добавить(Событие);
КонецЦикла; КонецЦикла;
Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница); ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os // OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os
// Lib: Google Drive // Lib: Google Drive
// CLI: gdrive // CLI: gdrive
@ -43,277 +43,277 @@
// Получить информацию об объекте // Получить информацию об объекте
// Получает информацию о папке или файле по ID // Получает информацию о папке или файле по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор файла или каталога - object // Идентификатор - Строка - Идентификатор файла или каталога - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список каталогов // Получить список каталогов
// Получает список каталогов диска // Получает список каталогов диска
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяСодержит - Строка - Отбор по имени - querry // ИмяСодержит - Строка - Отбор по имени - querry
// Подробно - Булево - Добавляет список файлов к полям каталога - depth // Подробно - Булево - Добавляет список файлов к полям каталога - depth
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий каталогов // Соответствие Из КлючИЗначение - Массив соответствий каталогов
Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно); OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивОбъектов = Новый Массив; МассивОбъектов = Новый Массив;
Отбор = Новый Массив; Отбор = Новый Массив;
Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'"); Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'");
Если ЗначениеЗаполнено(ИмяСодержит) Тогда Если ЗначениеЗаполнено(ИмяСодержит) Тогда
Отбор.Добавить("name contains '" + ИмяСодержит + "'"); Отбор.Добавить("name contains '" + ИмяСодержит + "'");
КонецЕсли; КонецЕсли;
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор);
Если Подробно Тогда Если Подробно Тогда
РазложитьОбъектыПодробно(Токен, МассивОбъектов); РазложитьОбъектыПодробно(Токен, МассивОбъектов);
КонецЕсли; КонецЕсли;
Возврат МассивОбъектов; Возврат МассивОбъектов;
КонецФункции КонецФункции
// Получить список файлов // Получить список файлов
// Получает список файлов // Получает список файлов
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяСодержит - Строка - Отбор по имени - querry // ИмяСодержит - Строка - Отбор по имени - querry
// Каталог - Строка - Отбор по ID каталога родителя - catalog // Каталог - Строка - Отбор по ID каталога родителя - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий файлов // Соответствие Из КлючИЗначение - Массив соответствий файлов
Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог); OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
МассивОбъектов = Новый Массив; МассивОбъектов = Новый Массив;
Отбор = Новый Массив; Отбор = Новый Массив;
Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'"); Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'");
Если ЗначениеЗаполнено(ИмяСодержит) Тогда Если ЗначениеЗаполнено(ИмяСодержит) Тогда
Отбор.Добавить("name contains '" + ИмяСодержит + "'"); Отбор.Добавить("name contains '" + ИмяСодержит + "'");
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Каталог) Тогда Если ЗначениеЗаполнено(Каталог) Тогда
Отбор.Добавить("'" + Каталог + "' in parents"); Отбор.Добавить("'" + Каталог + "' in parents");
КонецЕсли; КонецЕсли;
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор);
Возврат МассивОбъектов; Возврат МассивОбъектов;
КонецФункции КонецФункции
// Загрузить файл // Загрузить файл
// Загружает файл на диск // Загружает файл на диск
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Файл - ДвоичныеДанные,Строка - Загружаемый файл - file // Файл - ДвоичныеДанные,Строка - Загружаемый файл - file
// Описание - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json // Описание - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт
Возврат УправлениеФайлом(Токен, Файл, Описание); Возврат УправлениеФайлом(Токен, Файл, Описание);
КонецФункции КонецФункции
// Создать папку // Создать папку
// Создает пустой каталог на диске // Создает пустой каталог на диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Имя - Строка - Имя папки - title // Имя - Строка - Имя папки - title
// Родитель - Строка - Родитель - catalog // Родитель - Строка - Родитель - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель); OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("MIME" , "application/vnd.google-apps.folder"); Описание.Вставить("MIME" , "application/vnd.google-apps.folder");
Описание.Вставить("Имя" , Имя); Описание.Вставить("Имя" , Имя);
Описание.Вставить("Описание", ""); Описание.Вставить("Описание", "");
Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root")); Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root"));
Возврат УправлениеФайлом(Токен, , Описание); Возврат УправлениеФайлом(Токен, , Описание);
КонецФункции КонецФункции
// Скачать файл // Скачать файл
// Получает файл по ID // Получает файл по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор файла - object // Идентификатор - Строка - Идентификатор файла - object
// ПутьСохранения - Строка - Путь сохранения файла - out // ПутьСохранения - Строка - Путь сохранения файла - out
// //
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения // ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Параметры = Новый Соответствие; Параметры = Новый Соответствие;
Параметры.Вставить("alt", "media"); Параметры.Вставить("alt", "media");
Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения); Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Скоприровать объект // Скоприровать объект
// Копирует файл или каталог // Копирует файл или каталог
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта - object // Идентификатор - Строка - Идентификатор объекта - object
// НовоеИмя - Строка - Новое имя объекта - title // НовоеИмя - Строка - Новое имя объекта - title
// НовыйРодитель - Строка - Новый каталог размещения - catalog // НовыйРодитель - Строка - Новый каталог размещения - catalog
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy"; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy";
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(НовоеИмя) Тогда Если ЗначениеЗаполнено(НовоеИмя) Тогда
Параметры.Вставить("name", НовоеИмя); Параметры.Вставить("name", НовоеИмя);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(НовыйРодитель) Тогда Если ЗначениеЗаполнено(НовыйРодитель) Тогда
МассивРодителей = Новый Массив; МассивРодителей = Новый Массив;
МассивРодителей.Добавить(НовыйРодитель); МассивРодителей.Добавить(НовыйРодитель);
Параметры.Вставить("parents", МассивРодителей); Параметры.Вставить("parents", МассивРодителей);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина); Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить файл // Обновить файл
// Обновляет двоичные данные файла // Обновляет двоичные данные файла
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор обновляемого объекта - object // Идентификатор - Строка - Идентификатор обновляемого объекта - object
// Файл - ДвоичныеДанные,Строка - Файл источник обновления - file // Файл - ДвоичныеДанные,Строка - Файл источник обновления - file
// НовоеИмя - Строка - Новое имя файла (если необходимо) - title // НовоеИмя - Строка - Новое имя файла (если необходимо) - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя); OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Если ЗначениеЗаполнено(НовоеИмя) Тогда Если ЗначениеЗаполнено(НовоеИмя) Тогда
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("Имя", НовоеИмя); Описание.Вставить("Имя", НовоеИмя);
Иначе Иначе
Описание = ""; Описание = "";
КонецЕсли; КонецЕсли;
Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор); Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор);
КонецФункции КонецФункции
// Удалить объект // Удалить объект
// Удаляет файл или каталог по ID // Удаляет файл или каталог по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта для удаления - object // Идентификатор - Строка - Идентификатор объекта для удаления - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить описание файла !NOCLI // Получить описание файла !NOCLI
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - Описание файла // Соответствие Из КлючИЗначение - Описание файла
Функция ПолучитьОписаниеФайла() Экспорт Функция ПолучитьОписаниеФайла() Экспорт
Описание = Новый Соответствие; Описание = Новый Соответствие;
Описание.Вставить("MIME" , "image/jpeg"); // MIME-тип загружаемого файла Описание.Вставить("MIME" , "image/jpeg"); // MIME-тип загружаемого файла
Описание.Вставить("Имя" , "Новый файл.jpg"); // Имя файла с расширением Описание.Вставить("Имя" , "Новый файл.jpg"); // Имя файла с расширением
Описание.Вставить("Описание" , "Это новый файл"); // Описание файла Описание.Вставить("Описание" , "Это новый файл"); // Описание файла
Описание.Вставить("Родитель" , "root"); // ID каталога загрузки или "root" для загрузки в корень Описание.Вставить("Родитель" , "root"); // ID каталога загрузки или "root" для загрузки в корень
Возврат Описание; Возврат Описание;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -322,107 +322,107 @@
// Создать комментарий // Создать комментарий
// Создает комментарий к файлу или каталогу // Создает комментарий к файлу или каталогу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object // Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object
// Комментарий - Строка - Текст комментария - text // Комментарий - Строка - Текст комментария - text
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий); OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*"; URL = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("content", Комментарий); Параметры.Вставить("content", Комментарий);
Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить комментарий // Получить комментарий
// Получает комментарий по ID // Получает комментарий по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object // ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
// ИДКомментария - Строка - Идентификатор комментария - comment // ИДКомментария - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список комментариев // Получить список комментариев
// Получает список всех комментариев объекта // Получает список всех комментариев объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор объекта - object // ИДОбъекта - Строка - Идентификатор объекта - object
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments"; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить комментарий // Удалить комментарий
// Удаляет комментарий по ID // Удаляет комментарий по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object // ИДОбъекта - Строка - Идентификатор файла или каталога размещения комментария - object
// ИДКомментария - Строка - Идентификатор комментария - comment // ИДКомментария - Строка - Идентификатор комментария - comment
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария); OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; URL = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки); Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -433,59 +433,59 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "") Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "")
URL = "https://www.googleapis.com/drive/v3/files"; URL = "https://www.googleapis.com/drive/v3/files";
Files = "files"; Files = "files";
NPT = "nextPageToken"; NPT = "nextPageToken";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("fields", "*"); Параметры.Вставить("fields", "*");
Если ЗначениеЗаполнено(Страница) Тогда Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница); Параметры.Вставить("pageToken", Страница);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда
ОтборСтрока = СтрСоединить(Отбор, " and "); ОтборСтрока = СтрСоединить(Отбор, " and ");
Параметры.Вставить("q", ОтборСтрока); Параметры.Вставить("q", ОтборСтрока);
КонецЕсли; КонецЕсли;
Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки); Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Объекты = Результат[Files]; Объекты = Результат[Files];
Страница = Результат[NPT]; Страница = Результат[NPT];
Для Каждого ТекущийОбъект Из Объекты Цикл Для Каждого ТекущийОбъект Из Объекты Цикл
МассивОбъектов.Добавить(ТекущийОбъект); МассивОбъектов.Добавить(ТекущийОбъект);
КонецЦикла; КонецЦикла;
Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница); ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов) Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов)
Для Каждого ТекущийОбъект Из МассивОбъектов Цикл Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
МассивФайлов = Новый Массив; МассивФайлов = Новый Массив;
ТекущийИД = ТекущийОбъект["id"]; ТекущийИД = ТекущийОбъект["id"];
Результат = ПолучитьСписокФайлов(Токен, , ТекущийИД); Результат = ПолучитьСписокФайлов(Токен, , ТекущийИД);
Для Каждого Файл Из Результат Цикл Для Каждого Файл Из Результат Цикл
МассивФайлов.Добавить(Файл); МассивФайлов.Добавить(Файл);
КонецЦикла; КонецЦикла;
ТекущийОбъект.Вставить("files", МассивФайлов); ТекущийОбъект.Вставить("files", МассивФайлов);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Процедура СформироватьПараметрыЗагрузкиФайла(Описание) Процедура СформироватьПараметрыЗагрузкиФайла(Описание)
СформированноеОписание = Новый Соответствие; СформированноеОписание = Новый Соответствие;
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание); OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание);
@ -495,81 +495,81 @@
СоответствиеПолей.Вставить("Описание" , "description"); СоответствиеПолей.Вставить("Описание" , "description");
СоответствиеПолей.Вставить("Родитель" , "parents"); СоответствиеПолей.Вставить("Родитель" , "parents");
СоответствиеПолей.Вставить("Расширение", "fileExtension"); СоответствиеПолей.Вставить("Расширение", "fileExtension");
Для Каждого Элемент Из Описание Цикл Для Каждого Элемент Из Описание Цикл
Если Элемент.Ключ = "Родитель" Тогда Если Элемент.Ключ = "Родитель" Тогда
ТекущееЗначение = Новый Массив; ТекущееЗначение = Новый Массив;
ТекущееЗначение.Добавить(Элемент.Значение); ТекущееЗначение.Добавить(Элемент.Значение);
Иначе Иначе
ТекущееЗначение = Элемент.Значение; ТекущееЗначение = Элемент.Значение;
КонецЕсли; КонецЕсли;
ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ); ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ);
СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение); СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение);
КонецЦикла; КонецЦикла;
Описание = СформированноеОписание; Описание = СформированноеОписание;
КонецПроцедуры КонецПроцедуры
Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "") Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Если ЗначениеЗаполнено(Описание) Тогда Если ЗначениеЗаполнено(Описание) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание);
КонецЕсли; КонецЕсли;
MimeType = "mimeType"; MimeType = "mimeType";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType]; MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType];
Иначе Иначе
MIME = Описание["MIME"]; MIME = Описание["MIME"];
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(Описание) Тогда Если Не ЗначениеЗаполнено(Описание) Тогда
Описание = Новый Соответствие; Описание = Новый Соответствие;
КонецЕсли; КонецЕсли;
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
СформироватьПараметрыЗагрузкиФайла(Описание); СформироватьПараметрыЗагрузкиФайла(Описание);
ОписаниеJSON = OPI_Инструменты.JSONСтрокой(Описание); ОписаниеJSON = OPI_Инструменты.JSONСтрокой(Описание);
СоответствиеФайла = Новый Соответствие; СоответствиеФайла = Новый Соответствие;
Если ЗначениеЗаполнено(Файл) Тогда Если ЗначениеЗаполнено(Файл) Тогда
РазмерЧасти = 268435457; РазмерЧасти = 268435457;
Размер = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти); Размер = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти);
СоответствиеФайла.Вставить(Файл, MIME); СоответствиеФайла.Вставить(Файл, MIME);
Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
Иначе Иначе
Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор);
КонецЕсли; КонецЕсли;
Иначе Иначе
Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор); Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "") Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор); URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки); Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
@ -578,149 +578,149 @@
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "") Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
Для Каждого Файл Из СоответствиеФайла Цикл Для Каждого Файл Из СоответствиеФайла Цикл
Двоичные = Файл.Ключ; Двоичные = Файл.Ключ;
Прервать; Прервать;
КонецЦикла; КонецЦикла;
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable"; URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
Если ЗначениеЗаполнено(Идентификатор) Тогда Если ЗначениеЗаполнено(Идентификатор) Тогда
URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор); URL = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина); Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина);
Иначе Иначе
Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина); Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина);
КонецЕсли; КонецЕсли;
АдресЗагрузки = Ответ.Заголовки["Location"]; АдресЗагрузки = Ответ.Заголовки["Location"];
Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки); ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки);
Ответ = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ); Ответ = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ);
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки) Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки)
Ответ = ""; Ответ = "";
РазмерЧасти = 268435456; РазмерЧасти = 268435456;
ПрочитаноБайт = 0; ПрочитаноБайт = 0;
ТекущаяПозиция = 0; ТекущаяПозиция = 0;
ОбщийРазмер = Двоичные.Размер(); ОбщийРазмер = Двоичные.Размер();
СтрОбщийРазмер = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер); СтрОбщийРазмер = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер);
ЧтениеДанных = Новый ЧтениеДанных(Двоичные); ЧтениеДанных = Новый ЧтениеДанных(Двоичные);
ИсходныйПоток = ЧтениеДанных.ИсходныйПоток(); ИсходныйПоток = ЧтениеДанных.ИсходныйПоток();
Пока ПрочитаноБайт < ОбщийРазмер Цикл Пока ПрочитаноБайт < ОбщийРазмер Цикл
ПрочитаноБайт = ИсходныйПоток.ТекущаяПозиция(); ПрочитаноБайт = ИсходныйПоток.ТекущаяПозиция();
Результат = ЧтениеДанных.Прочитать(РазмерЧасти); Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные(); ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
РазмерТекущих = ТекущиеДанные.Размер(); РазмерТекущих = ТекущиеДанные.Размер();
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1; СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1;
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
Прервать; Прервать;
КонецЕсли; КонецЕсли;
ЗаголовокПотока = "bytes " ЗаголовокПотока = "bytes "
+ OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция) + OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция)
+ "-" + "-"
+ OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция) + OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция)
+ "/" + "/"
+ СтрОбщийРазмер; + СтрОбщийРазмер;
ДопЗаголовки = Новый Соответствие; ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих)); ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих));
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока); ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
ДопЗаголовки.Вставить("Content-Type" , "application/octet-stream"); ДопЗаголовки.Вставить("Content-Type" , "application/octet-stream");
Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина); Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина);
РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция); РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция);
Если ЗначениеЗаполнено(РезультатПроверки) Тогда Если ЗначениеЗаполнено(РезультатПроверки) Тогда
Возврат РезультатПроверки; Возврат РезультатПроверки;
КонецЕсли; КонецЕсли;
// !OInt КБайт = 1024; // !OInt КБайт = 1024;
// !OInt МБайт = КБайт * КБайт; // !OInt МБайт = КБайт * КБайт;
// !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт)); // !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
// !OInt ВыполнитьСборкуМусора(); // !OInt ВыполнитьСборкуМусора();
// !OInt ОсвободитьОбъект(ТекущиеДанные); // !OInt ОсвободитьОбъект(ТекущиеДанные);
КонецЦикла; КонецЦикла;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция) Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция)
НачалоКодовОшибок = 400; НачалоКодовОшибок = 400;
КонецКодовПадений = 600; КонецКодовПадений = 600;
НачалоКодовУспеха = 200; НачалоКодовУспеха = 200;
КонецКодовУспеха = 300; КонецКодовУспеха = 300;
Перенаправление = 308; Перенаправление = 308;
Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда
ЗаголовокПотока = "bytes */" + СтрОбщийРазмер; ЗаголовокПотока = "bytes */" + СтрОбщийРазмер;
ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока); ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина); ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина);
Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда
OPI_Инструменты.ОбработатьОтвет(ОтветПроверки); OPI_Инструменты.ОбработатьОтвет(ОтветПроверки);
Возврат ОтветПроверки; Возврат ОтветПроверки;
ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда
ЗагруженныеДанные = Ответ.Заголовки["Range"]; ЗагруженныеДанные = Ответ.Заголовки["Range"];
Иначе Иначе
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Иначе Иначе
ЗагруженныеДанные = Ответ.Заголовки["Range"]; ЗагруженныеДанные = Ответ.Заголовки["Range"];
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", ""); ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", "");
МассивИнформации = СтрРазделить(ЗагруженныеДанные, "-", Ложь); МассивИнформации = СтрРазделить(ЗагруженныеДанные, "-", Ложь);
НеобходимоЧастей = 2; НеобходимоЧастей = 2;
Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда
OPI_Инструменты.ОбработатьОтвет(Ответ); OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
ТекущаяПозиция = Число(МассивИнформации[1]) + 1; ТекущаяПозиция = Число(МассивИнформации[1]) + 1;
Возврат ""; Возврат "";
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os // OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os
// Lib: Google Sheets // Lib: Google Sheets
// CLI: gsheets // CLI: gsheets
@ -43,90 +43,90 @@
// Создать книгу // Создать книгу
// Создает новую книгу // Создает новую книгу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Наименование - Строка - Наименование - title // Наименование - Строка - Наименование - title
// МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets // МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets"; URL = "https://sheets.googleapis.com/v4/spreadsheets";
Свойства = Новый Структура("title" , Наименование); Свойства = Новый Структура("title" , Наименование);
Листы = Новый Массив; Листы = Новый Массив;
ЗаполнитьМассивЛистов(МассивИменЛистов, Листы); ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить книгу // Получить книгу
// Получает информацию о книге по ID // Получает информацию о книге по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор книги - spreadsheet // Идентификатор - Строка - Идентификатор книги - spreadsheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить наименование книги // Изменить наименование книги
// Изменяет наименование существующей книги // Изменяет наименование существующей книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Изменение = Новый Структура("title", Наименование); Изменение = Новый Структура("title", Наименование);
ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title"); ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения); Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
МассивЗапросов = Новый Массив; МассивЗапросов = Новый Массив;
МассивЗапросов.Добавить(Запрос); МассивЗапросов.Добавить(Запрос);
Параметры = Новый Структура("requests", МассивЗапросов); Параметры = Новый Структура("requests", МассивЗапросов);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -135,95 +135,95 @@
// Добавить лист // Добавить лист
// Добавляет новый лист в книгу // Добавляет новый лист в книгу
// //
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Наименование - Строка - Наименование нового листа - title // Наименование - Строка - Наименование нового листа - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Лист = СоздатьЛист(Наименование); Лист = СоздатьЛист(Наименование);
Запросы = Новый Массив; Запросы = Новый Массив;
Изменение = Новый Структура("addSheet", Лист); Изменение = Новый Структура("addSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить лист // Удалить лист
// Удаляет лист из книги // Удаляет лист из книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Лист - Строка - Идентификатор удаляемого листа - sheet // Лист - Строка - Идентификатор удаляемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Запросы = Новый Массив; Запросы = Новый Массив;
Лист = Новый Структура("sheetId" , Лист); Лист = Новый Структура("sheetId" , Лист);
Изменение = Новый Структура("deleteSheet", Лист); Изменение = Новый Структура("deleteSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Копировать лист // Копировать лист
// Копирует лист из одной книги в другую // Копирует лист из одной книги в другую
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Откуда - Строка - ID книги источника - from // Откуда - Строка - ID книги источника - from
// Куда - Строка - ID книги приемника - to // Куда - Строка - ID книги приемника - to
// Лист - Строка - ID копируемого листа - sheet // Лист - Строка - ID копируемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ Откуда + Откуда
+ "/sheets/" + "/sheets/"
+ Лист + Лист
+ ":copyTo"; + ":copyTo";
Параметры = Новый Структура("destinationSpreadsheetId", Куда); Параметры = Новый Структура("destinationSpreadsheetId", Куда);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -232,14 +232,14 @@
// Установить значения ячеек // Установить значения ячеек
// Устанавливает значения ячеек листа // Устанавливает значения ячеек листа
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data // СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim // ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УстановитьЗначенияЯчеек(Знач Токен Функция УстановитьЗначенияЯчеек(Знач Токен
@ -247,90 +247,90 @@
, Знач СоответствиеЗначений , Знач СоответствиеЗначений
, Знач Лист = "" , Знач Лист = ""
, Знач ОсновноеИзмерение = "COLUMNS") Экспорт , Знач ОсновноеИзмерение = "COLUMNS") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура") Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
Возврат "Не удалось привести структуру значений к коллекции"; Возврат "Не удалось привести структуру значений к коллекции";
КонецЕсли; КонецЕсли;
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист); МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED"); Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Очистить ячейки // Очистить ячейки
// Очищает значение в ячейках // Очищает значение в ячейках
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Параметры = Новый Структура("ranges", МассивЯчеек); Параметры = Новый Структура("ranges", МассивЯчеек);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить значения ячеек // Получить значения ячеек
// Получает значения ячеек таблицы // Получает значения ячеек таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
Если ЗначениеЗаполнено(МассивЯчеек) Тогда Если ЗначениеЗаполнено(МассивЯчеек) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Первый = Истина; Первый = Истина;
Для Каждого Ячейка Из МассивЯчеек Цикл Для Каждого Ячейка Из МассивЯчеек Цикл
Разделитель = ?(Первый, "?", "&"); Разделитель = ?(Первый, "?", "&");
URL = URL + Разделитель + "ranges=" + Ячейка; URL = URL + Разделитель + "ranges=" + Ячейка;
Первый = Ложь; Первый = Ложь;
КонецЦикла; КонецЦикла;
Иначе Иначе
URL = URL + "?ranges='" + Лист + "'"; URL = URL + "?ranges ='" + Лист + "'";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -340,75 +340,75 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов) Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
Для Каждого ИмяЛиста Из МассивИмен Цикл Для Каждого ИмяЛиста Из МассивИмен Цикл
Лист = СоздатьЛист(ИмяЛиста); Лист = СоздатьЛист(ИмяЛиста);
МассивЛистов.Добавить(Лист); МассивЛистов.Добавить(Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист) Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
Если ЗначениеЗаполнено(Лист) Тогда Если ЗначениеЗаполнено(Лист) Тогда
Ячейка = "'" + Лист + "'!" + Ячейка; Ячейка = "'" + Лист + "'!" + Ячейка;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Функция СоздатьЛист(Знач Наименование) Функция СоздатьЛист(Знач Наименование)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
СвойстваЛиста = Новый Структура("title" , Наименование); СвойстваЛиста = Новый Структура("title" , Наименование);
Лист = Новый Структура("properties", СвойстваЛиста); Лист = Новый Структура("properties", СвойстваЛиста);
Возврат Лист; Возврат Лист;
КонецФункции КонецФункции
Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист) Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
МассивДанных = Новый Массив; МассивДанных = Новый Массив;
Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
ТекущееЗначение = ДанныеЯчейки.Значение; ТекущееЗначение = ДанныеЯчейки.Значение;
ТекущийКлюч = ДанныеЯчейки.Ключ; ТекущийКлюч = ДанныеЯчейки.Ключ;
ДобавитьИмяЛиста(ТекущийКлюч, Лист); ДобавитьИмяЛиста(ТекущийКлюч, Лист);
OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение); OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
ТекущиеДанные = Новый Соответствие; ТекущиеДанные = Новый Соответствие;
ТекущийМассив = Новый Массив; ТекущийМассив = Новый Массив;
ТекущийМассив.Добавить(ТекущееЗначение); ТекущийМассив.Добавить(ТекущееЗначение);
OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
МассивДанных.Добавить(ТекущиеДанные); МассивДанных.Добавить(ТекущиеДанные);
КонецЦикла; КонецЦикла;
Возврат МассивДанных; Возврат МассивДанных;
КонецФункции КонецФункции
Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист) Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Для Н = 0 По МассивИмен.ВГраница() Цикл Для Н = 0 По МассивИмен.ВГраница() Цикл
ДобавитьИмяЛиста(МассивИмен[Н], Лист); ДобавитьИмяЛиста(МассивИмен[Н], Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os // OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os
// Lib: Google Workspace // Lib: Google Workspace
// CLI: google // CLI: google
@ -41,97 +41,97 @@
// Сформировать ссылку получения кода // Сформировать ссылку получения кода
// Возвращает URL для авторизации в браузере // Возвращает URL для авторизации в браузере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// Calendar - Булево - разрешение на методы Calendar - calendar // Calendar - Булево - разрешение на методы Calendar - calendar
// Drive - Булево - разрешение на методы Drive - drive // Drive - Булево - разрешение на методы Drive - drive
// Sheets - Булево - разрешение на методы Sheets - sheets // Sheets - Булево - разрешение на методы Sheets - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка - Ссылка получения кода // Строка - Ссылка получения кода
Функция СформироватьСсылкуПолученияКода(Знач ClientID Функция СформироватьСсылкуПолученияКода(Знач ClientID
, Знач Calendar = Истина , Знач Calendar = Истина
, Знач Drive = Истина , Знач Drive = Истина
, Знач Sheets = Истина) Экспорт , Знач Sheets = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar); OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets); OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
OPI_ПреобразованиеТипов.ПолучитьБулево(Drive); OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
URL = "https://accounts.google.com/o/oauth2/auth"; URL = "https://accounts.google.com/o/oauth2/auth";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("response_type", "code"); ПараметрыURL.Вставить("response_type", "code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("access_type" , "offline"); ПараметрыURL.Вставить("access_type" , "offline");
ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets)); ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Возврат URL; Возврат URL;
КонецФункции КонецФункции
// Получить токен по коду // Получить токен по коду
// Получает токен по коду из авторизации в бразуере // Получает токен по коду из авторизации в бразуере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// Code - Строка - Code из браузера - code // Code - Строка - Code из браузера - code
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Code); OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "authorization_code"); ПараметрыURL.Вставить("grant_type" , "authorization_code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("code" , Code); ПараметрыURL.Вставить("code" , Code);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "refresh_token"); ПараметрыURL.Вставить("grant_type" , "refresh_token");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("refresh_token", RefreshToken); ПараметрыURL.Вставить("refresh_token", RefreshToken);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -141,14 +141,14 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен); Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -156,23 +156,23 @@
#Область СлужебныеПроцедурыИфункции #Область СлужебныеПроцедурыИфункции
Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets) Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
МассивРазрешений = Новый Массив; МассивРазрешений = Новый Массив;
Если Calendar Тогда Если Calendar Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
КонецЕсли; КонецЕсли;
Если Drive Тогда Если Drive Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
КонецЕсли; КонецЕсли;
Если Sheets Тогда Если Sheets Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
КонецЕсли; КонецЕсли;
Возврат СтрСоединить(МассивРазрешений, " "); Возврат СтрСоединить(МассивРазрешений, " ");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Twitter.os // OneScript: ./OInt/core/Modules/OPI_Twitter.os
// Lib: Twitter // Lib: Twitter
// CLI: twitter // CLI: twitter
@ -48,18 +48,18 @@
// Получить ссылку для авторизации // Получить ссылку для авторизации
// Формирует ссылку для авторизации через браузер // Формирует ссылку для авторизации через браузер
// //
// Параметры: // Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка - URL для перехода в браузере // Строка - URL для перехода в браузере
Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("response_type" , "code"); ПараметрыURL.Вставить("response_type" , "code");
ПараметрыURL.Вставить("client_id" , Параметры_["client_id"]); ПараметрыURL.Вставить("client_id" , Параметры_["client_id"]);
ПараметрыURL.Вставить("redirect_uri" , Параметры_["redirect_uri"]); ПараметрыURL.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
@ -67,27 +67,27 @@
ПараметрыURL.Вставить("state" , "state"); ПараметрыURL.Вставить("state" , "state");
ПараметрыURL.Вставить("code_challenge" , "challenge"); ПараметрыURL.Вставить("code_challenge" , "challenge");
ПараметрыURL.Вставить("code_challenge_method", "plain"); ПараметрыURL.Вставить("code_challenge_method", "plain");
ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL; Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL;
Возврат Линк; Возврат Линк;
КонецФункции КонецФункции
// Получить токен // Получить токен
// Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации // Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации
// //
// Параметры: // Параметры:
// Код - Строка - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code // Код - Строка - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Код); OPI_ПреобразованиеТипов.ПолучитьСтроку(Код);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса = Новый Структура;
@ -96,35 +96,35 @@
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]); ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]); ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
ПараметрыЗапроса.Вставить("code_verifier", "challenge"); ПараметрыЗапроса.Вставить("code_verifier", "challenge");
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token" Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
, ПараметрыЗапроса, , Ложь); , ПараметрыЗапроса, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет v2 токен при помощи refresh_token // Обновляет v2 токен при помощи refresh_token
// //
// Параметры: // Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция ОбновитьТокен(Знач Параметры = "") Экспорт Функция ОбновитьТокен(Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Refresh = "refresh_token"; Refresh = "refresh_token";
ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]); ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]);
ПараметрыЗапроса.Вставить("grant_type" , Refresh); ПараметрыЗапроса.Вставить("grant_type" , Refresh);
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]); ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token" Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
, ПараметрыЗапроса, , Ложь); , ПараметрыЗапроса, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -133,23 +133,23 @@
// Метод для вставки в http-сервис, адрес которого указывается в redirect_uri // Метод для вставки в http-сервис, адрес которого указывается в redirect_uri
// Вызывает метод получения токена, так как для получения токена из кода, приходящего // Вызывает метод получения токена, так как для получения токена из кода, приходящего
// на redirect_uri после авторизации через браузер есть всего 30 секунд // на redirect_uri после авторизации через браузер есть всего 30 секунд
// //
// Параметры: // Параметры:
// Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис // Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис
// //
// Возвращаемое значение: // Возвращаемое значение:
// HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера // HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера
Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт
Код = Запрос.ПараметрыЗапроса["code"]; Код = Запрос.ПараметрыЗапроса["code"];
ОтветТокен = ПолучитьТокен(Код); ОтветТокен = ПолучитьТокен(Код);
// BSLLS:CommentedCode-off // BSLLS:CommentedCode-off
// Предпочтительное хранение токенов // Предпочтительное хранение токенов
// Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]); // Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]);
// Константы.TwitterToken.Установить(ОтветТокен["access_token"]); // Константы.TwitterToken.Установить(ОтветТокен["access_token"]);
// BSLLS:CommentedCode-on // BSLLS:CommentedCode-on
Возврат ОтветТокен; Возврат ОтветТокен;
КонецФункции КонецФункции
@ -160,189 +160,189 @@
// !NOCLI // !NOCLI
// Создать произвольный твит // Создать произвольный твит
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита // Текст - Строка - Текст твита
// МассивМедиа - Массив из Строка,ДвоичныеДанные - Массив двоичных данных или путей к файлам // МассивМедиа - Массив из Строка,ДвоичныеДанные - Массив двоичных данных или путей к файлам
// МассивВариантовОпроса - Массив из Строка - Массив вариантов опроса, если необходимо // МассивВариантовОпроса - Массив из Строка - Массив вариантов опроса, если необходимо
// ДлительностьОпроса - Строка,Число - Длительность опроса, если необходимо (опрос без длительности не создается) // ДлительностьОпроса - Строка,Число - Длительность опроса, если необходимо (опрос без длительности не создается)
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьПроизвольныйТвит(Знач Текст = "" Функция СоздатьПроизвольныйТвит(Знач Текст = ""
, Знач МассивМедиа = "" , Знач МассивМедиа = ""
, Знач МассивВариантовОпроса = "" , Знач МассивВариантовОпроса = ""
, Знач ДлительностьОпроса = "" , Знач ДлительностьОпроса = ""
, Знач Параметры = "") Экспорт , Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса); OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса);
Если ЗначениеЗаполнено(МассивМедиа) Тогда Если ЗначениеЗаполнено(МассивМедиа) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса);
КонецЕсли; КонецЕсли;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://api.twitter.com/2/tweets"; URL = "https://api.twitter.com/2/tweets";
Массив = "Массив"; Массив = "Массив";
Поля = Новый Соответствие; Поля = Новый Соответствие;
Если ЗначениеЗаполнено(Текст) Тогда Если ЗначениеЗаполнено(Текст) Тогда
Поля.Вставить("text", Текст); Поля.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
ДлительностьОпроса = Число(ДлительностьОпроса); ДлительностьОпроса = Число(ДлительностьОпроса);
Если МассивВариантовОпроса.Количество() > 0 Тогда Если МассивВариантовОпроса.Количество() > 0 Тогда
СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса); СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса);
Поля.Вставить("poll", СтруктураВарианта); Поля.Вставить("poll", СтруктураВарианта);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
Если МассивМедиа.Количество() > 0 Тогда Если МассивМедиа.Количество() > 0 Тогда
Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа)); Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_); Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать текстовый твит // Создать текстовый твит
// Создает твит без вложений // Создает твит без вложений
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт
Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры);
КонецФункции КонецФункции
// Создать твит картинки // Создать твит картинки
// Создает твит с картинкой вложением // Создает твит с картинкой вложением
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures // МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "photo", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "photo", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит гифки // Создать твит гифки
// Создает твит с вложением-гифкой // Создает твит с вложением-гифкой
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs // МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "animated_gif", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "animated_gif", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит видео // Создать твит видео
// Создает твит с видеовложением // Создает твит с видеовложением
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos // МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт
МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "video", Параметры); МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "video", Параметры);
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры); Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
КонецФункции КонецФункции
// Создать твит опрос // Создать твит опрос
// Создает твит с опросом // Создает твит с опросом
// //
// Параметры: // Параметры:
// Текст - Строка - Текст твита - text // Текст - Строка - Текст твита - text
// МассивВариантов - Массив из Строка - Массив вариантов опроса - options // МассивВариантов - Массив из Строка - Массив вариантов опроса - options
// Длительность - Строка,Число - Длительность опроса - duration // Длительность - Строка,Число - Длительность опроса - duration
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт
Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры); Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры);
КонецФункции КонецФункции
// Загрузить массив вложений !NOCLI // Загрузить массив вложений !NOCLI
// Загружает файлы на сервер и возвращает их ID // Загружает файлы на сервер и возвращает их ID
// //
// Параметры: // Параметры:
// МассивФайлов - Массив из Строка, ДвоичныеДанные - Массив файлов // МассивФайлов - Массив из Строка, ДвоичныеДанные - Массив файлов
// ТипВложений - Строка - Тип вложений // ТипВложений - Строка - Тип вложений
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// //
// Возвращаемое значение: // Возвращаемое значение:
// Массив Из Строка - Массив ID медиа // Массив Из Строка - Массив ID медиа
Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений); OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов);
МассивМедиа = Новый Массив; МассивМедиа = Новый Массив;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
MIS = "media_id_string"; MIS = "media_id_string";
Если ЗначениеЗаполнено(МассивФайлов) Тогда Если ЗначениеЗаполнено(МассивФайлов) Тогда
Для Каждого ФайлОтправки Из МассивФайлов Цикл Для Каждого ФайлОтправки Из МассивФайлов Цикл
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки);
Ответ = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_); Ответ = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_);
IDМедиа = Ответ[MIS]; IDМедиа = Ответ[MIS];
Если Не ЗначениеЗаполнено(IDМедиа) Тогда Если Не ЗначениеЗаполнено(IDМедиа) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
МассивМедиа.Добавить(IDМедиа); МассивМедиа.Добавить(IDМедиа);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Возврат МассивМедиа; Возврат МассивМедиа;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -351,70 +351,70 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры) Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
ВидЗапроса = "POST"; ВидЗапроса = "POST";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://upload.twitter.com/1.1/media/upload.json"; URL = "https://upload.twitter.com/1.1/media/upload.json";
Если Тип = "photo" Тогда Если Тип = "photo" Тогда
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("media_data" , Base64Строка(Файл)); Поля.Вставить("media_data" , Base64Строка(Файл));
Поля.Вставить("media_category", Тип); Поля.Вставить("media_category", Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Иначе Иначе
Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_); Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_);
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры) Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры)
Единица = 1024; Единица = 1024;
Количество = 4; Количество = 4;
MediaKey = "media_key"; MediaKey = "media_key";
MIS = "media_id_string"; MIS = "media_id_string";
Command = "command"; Command = "command";
Размер = Файл.Размер(); Размер = Файл.Размер();
СоответствиеMIME = Новый Соответствие; СоответствиеMIME = Новый Соответствие;
СоответствиеMIME.Вставить("photo" , "image/jpeg"); СоответствиеMIME.Вставить("photo" , "image/jpeg");
СоответствиеMIME.Вставить("video" , "video/mp4"); СоответствиеMIME.Вставить("video" , "video/mp4");
СоответствиеMIME.Вставить("animated_gif", "image/gif"); СоответствиеMIME.Вставить("animated_gif", "image/gif");
РазмерЧасти = Количество * Единица * Единица; РазмерЧасти = Количество * Единица * Единица;
МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти); МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "INIT"); Поля.Вставить(Command , "INIT");
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер)); Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип)); Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
Поля.Вставить("media_category" , Тип); Поля.Вставить("media_category" , Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации[MediaKey]; KeyИнициализации = ОтветИнициализации[MediaKey];
IDИнициализации = ОтветИнициализации[MIS]; IDИнициализации = ОтветИнициализации[MIS];
Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
Возврат ОтветИнициализации; Возврат ОтветИнициализации;
КонецЕсли; КонецЕсли;
Счетчик = 0; Счетчик = 0;
Для Каждого Часть Из МассивЧтения Цикл Для Каждого Часть Из МассивЧтения Цикл
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "APPEND"); Поля.Вставить(Command , "APPEND");
Поля.Вставить("media_key" , KeyИнициализации); Поля.Вставить("media_key" , KeyИнициализации);
@ -422,111 +422,111 @@
Поля.Вставить("media" , Часть); Поля.Вставить("media" , Часть);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация); OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
КонецЦикла; КонецЦикла;
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "FINALIZE"); Поля.Вставить(Command , "FINALIZE");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL); СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL);
Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
Возврат СтатусОбработки; Возврат СтатусОбработки;
КонецЕсли; КонецЕсли;
Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры); Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры) Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Command = "command"; Command = "command";
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить(Command , "STATUS"); Поля.Вставить(Command , "STATUS");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация); Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
Информация = Ответ[ProcessingInfo]; Информация = Ответ[ProcessingInfo];
Если Не ЗначениеЗаполнено(Информация) Тогда Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
СтатусОбработки = Информация["state"]; СтатусОбработки = Информация["state"];
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если СтатусОбработки = "failed" Тогда Если СтатусОбработки = "failed" Тогда
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео"; ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
КонецЕсли; КонецЕсли;
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ПолучитьСтандартныеПараметры(Знач Параметры = "") Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
// Здесь собрано определение данных, необходимых для работы. // Здесь собрано определение данных, необходимых для работы.
// Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API, // Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API,
// которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга. // которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга.
// Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то, // Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то,
// что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести // что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести
// механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать // механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать
// на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1, // на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1,
// но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные // но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные
// Мировая гигокорпорация Илона Маска, кстати, напоминаю ;) // Мировая гигокорпорация Илона Маска, кстати, напоминаю ;)
// P.S Далее часто упоминается "страница настроек Twitter Developer" - это // P.S Далее часто упоминается "страница настроек Twitter Developer" - это
// https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем) // https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем)
Параметры_ = Новый Соответствие; Параметры_ = Новый Соответствие;
Разрешения = "tweet.read tweet.write tweet.moderate.write users.read " Разрешения = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read " + "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read " + "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write"; + "block.write bookmark.read bookmark.write";
// Данные для API v2 // Данные для API v2
// redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации // redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации
// scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен // scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен
// client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer // client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
// client_secret - Из 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) // access_token - ПолучитьСсылкуАвторизации() -> Браузер -> code придет на redirect_uri -> ПолучитьТокен(code)
// refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч) // refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч)
// Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token. // Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token.
// При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить // При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить
// не получится (access_token тоже не получится) // не получится (access_token тоже не получится)
// |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов // |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов
// | |refresh_token --| // | |refresh_token --|
// |--------[через 2 ч.]-------------------| // |--------[через 2 ч.]-------------------|
// Данные для API v1.1 // Данные для API v1.1
// oauth_token - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer // oauth_token - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
// oauth_token_secret - Из 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_key - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
// oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer // oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
// Эти токены обновлять не надо // Эти токены обновлять не надо
Параметры_.Вставить("redirect_uri" , ""); Параметры_.Вставить("redirect_uri" , "");
Параметры_.Вставить("scope" , Разрешения); Параметры_.Вставить("scope" , Разрешения);
Параметры_.Вставить("client_id" , ""); Параметры_.Вставить("client_id" , "");
@ -537,9 +537,9 @@
Параметры_.Вставить("oauth_token_secret" , ""); Параметры_.Вставить("oauth_token_secret" , "");
Параметры_.Вставить("oauth_consumer_key" , ""); Параметры_.Вставить("oauth_consumer_key" , "");
Параметры_.Вставить("oauth_consumer_secret", ""); Параметры_.Вставить("oauth_consumer_secret", "");
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
Для Каждого ПереданныйПараметр Из Параметры Цикл Для Каждого ПереданныйПараметр Из Параметры Цикл
Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение)); Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
@ -551,7 +551,7 @@
КонецФункции КонецФункции
Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL) Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату(); ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
ЗаголовокАвторизации = ""; ЗаголовокАвторизации = "";
МетодХэширования = "HMAC-SHA1"; МетодХэширования = "HMAC-SHA1";
@ -565,123 +565,123 @@
ТаблицаПараметров = Новый ТаблицаЗначений; ТаблицаПараметров = Новый ТаблицаЗначений;
ТаблицаПараметров.Колонки.Добавить("Ключ"); ТаблицаПараметров.Колонки.Добавить("Ключ");
ТаблицаПараметров.Колонки.Добавить("Значение"); ТаблицаПараметров.Колонки.Добавить("Значение");
Для Каждого Поле Из Поля Цикл Для Каждого Поле Из Поля Цикл
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = Поле.Ключ; НоваяСтрока.Ключ = Поле.Ключ;
НоваяСтрока.Значение = Поле.Значение; НоваяСтрока.Значение = Поле.Значение;
КонецЦикла; КонецЦикла;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = OCK; НоваяСтрока.Ключ = OCK;
НоваяСтрока.Значение = Параметры[OCK]; НоваяСтрока.Значение = Параметры[OCK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = OTK; НоваяСтрока.Ключ = OTK;
НоваяСтрока.Значение = Параметры[OTK]; НоваяСтрока.Значение = Параметры[OTK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_version"; НоваяСтрока.Ключ = "oauth_version";
НоваяСтрока.Значение = ВерсияАпи; НоваяСтрока.Значение = ВерсияАпи;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_signature_method"; НоваяСтрока.Ключ = "oauth_signature_method";
НоваяСтрока.Значение = МетодХэширования; НоваяСтрока.Значение = МетодХэширования;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_timestamp"; НоваяСтрока.Ключ = "oauth_timestamp";
НоваяСтрока.Значение = ТекущаяДатаUNIX; НоваяСтрока.Значение = ТекущаяДатаUNIX;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_nonce"; НоваяСтрока.Ключ = "oauth_nonce";
НоваяСтрока.Значение = ТекущаяДатаUNIX; НоваяСтрока.Значение = ТекущаяДатаUNIX;
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL); СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL); СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
КонецЦикла; КонецЦикла;
ТаблицаПараметров.Сортировать("Ключ"); ТаблицаПараметров.Сортировать("Ключ");
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
СтрокаСигнатуры = СтрокаСигнатуры СтрокаСигнатуры = СтрокаСигнатуры
+ СтрокаТаблицы.Ключ + СтрокаТаблицы.Ключ
+ "=" + " ="
+ СтрокаТаблицы.Значение + СтрокаТаблицы.Значение
+ "&"; + "&";
КонецЦикла; КонецЦикла;
СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1); СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
СтрокаСигнатуры = вРег(ВидЗапроса) СтрокаСигнатуры = вРег(ВидЗапроса)
+ "&" + "&"
+ КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL) + КодироватьСтроку(URL , СпособКодированияСтроки.КодировкаURL)
+ "&" + "&"
+ КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL); + КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL) Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL)
+ "&" + "&"
+ КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL); + КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись) Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
, ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры) , ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
, ХешФункция.SHA1 , ХешФункция.SHA1
, 64); , 64);
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL); Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
Разделитель = ""","; Разделитель = """,";
ЗаголовокАвторизации = ЗаголовокАвторизации ЗаголовокАвторизации = ЗаголовокАвторизации
+ "OAuth " + "OAuth "
+ "oauth_consumer_key=""" + Параметры[OCK] + Разделитель + "oauth_consumer_key =""" + Параметры[OCK] + Разделитель
+ "oauth_token=""" + Параметры[OTK] + Разделитель + "oauth_token =""" + Параметры[OTK] + Разделитель
+ "oauth_signature_method=""" + МетодХэширования + Разделитель + "oauth_signature_method=""" + МетодХэширования + Разделитель
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель + "oauth_timestamp =""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель + "oauth_nonce =""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_version=""" + ВерсияАпи + Разделитель + "oauth_version =""" + ВерсияАпи + Разделитель
+ "oauth_signature=""" + Сигнатура; + "oauth_signature =""" + Сигнатура;
СоответствиеЗаголовка = Новый Соответствие; СоответствиеЗаголовка = Новый Соответствие;
СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации); СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации);
Возврат СоответствиеЗаголовка; Возврат СоответствиеЗаголовка;
КонецФункции КонецФункции
Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры) Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
СоответствиеВозврата = Новый Соответствие; СоответствиеВозврата = Новый Соответствие;
СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]); СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]);
Возврат СоответствиеВозврата; Возврат СоответствиеВозврата;
КонецФункции КонецФункции
Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL) Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL)
ProcessingInfo = "processing_info"; ProcessingInfo = "processing_info";
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Информация = Ответ[ProcessingInfo]; Информация = Ответ[ProcessingInfo];
Если Не ЗначениеЗаполнено(Информация) Тогда Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
СтатусОбработки = Информация["state"]; СтатусОбработки = Информация["state"];
Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ; Возврат Ответ;
Иначе Иначе
Возврат СтатусОбработки; Возврат СтатусОбработки;
КонецЕсли; КонецЕсли;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Viber.os // OneScript: ./OInt/core/Modules/OPI_Viber.os
// Lib: Viber // Lib: Viber
// CLI: viber // CLI: viber
@ -23,7 +23,7 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // 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 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
@ -46,55 +46,55 @@
// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована // который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях // на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать // Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// URL - Строка - URL для установки Webhook - url // URL - Строка - URL для установки Webhook - url
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры);
Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры); Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
КонецФункции КонецФункции
// Получить информацию о канале // Получить информацию о канале
// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook // Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные // ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
URL = "https://chatapi.viber.com/pa/get_account_info"; URL = "https://chatapi.viber.com/pa/get_account_info";
Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен)); Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
КонецФункции КонецФункции
// Получить данные пользователя // Получить данные пользователя
// Получает информацию о пользователе по ID // Получает информацию о пользователе по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// IDПользователя - Строка, Число - ID пользователя Viber - user // IDПользователя - Строка, Число - ID пользователя Viber - user
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
URL = "https://chatapi.viber.com/pa/get_user_details"; URL = "https://chatapi.viber.com/pa/get_user_details";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
@ -103,22 +103,22 @@
// Получить онлайн пользователей // Получить онлайн пользователей
// Получает статус пользователя или нескольких пользователей по ID // Получает статус пользователя или нескольких пользователей по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users // IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
URL = "https://chatapi.viber.com/pa/get_online"; URL = "https://chatapi.viber.com/pa/get_online";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -129,14 +129,14 @@
// Отправить текстовое сообщение // Отправить текстовое сообщение
// Отправляет текстовое сообщение в чат или канал // Отправляет текстовое сообщение в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Текст - Строка - Текст сообщения - text // Текст - Строка - Текст сообщения - text
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard // Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьТекстовоеСообщение(Знач Токен Функция ОтправитьТекстовоеСообщение(Знач Токен
@ -144,40 +144,40 @@
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Клавиатура = "") Экспорт , Знач Клавиатура = "") Экспорт
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура); Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
КонецФункции КонецФункции
// Отправить картинку // Отправить картинку
// Отправляет картинку в чат или канал // Отправляет картинку в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL картинки - picture // URL - Строка - URL картинки - picture
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel
// Описание - Строка - Аннотация к картинке - description // Описание - Строка - Аннотация к картинке - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание); Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
КонецФункции КонецФункции
// Отправить файл // Отправить файл
// Отправляет файл (документ) в чат или канал // Отправляет файл (документ) в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL файла - file // URL - Строка - URL файла - file
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Расширение - Строка - Расширение файла - ext // Расширение - Строка - Расширение файла - ext
// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size // Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьФайл(Знач Токен Функция ОтправитьФайл(Знач Токен
@ -186,36 +186,36 @@
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Расширение , Знач Расширение
, Знач Размер = "") Экспорт , Знач Размер = "") Экспорт
Если Не ЗначениеЗаполнено(Размер) Тогда Если Не ЗначениеЗаполнено(Размер) Тогда
Ответ = OPI_Инструменты.Get(URL); Ответ = OPI_Инструменты.Get(URL);
Размер = Ответ.Размер(); Размер = Ответ.Размер();
КонецЕсли; КонецЕсли;
Строка_ = "Строка"; Строка_ = "Строка";
Расширение = СтрЗаменить(Расширение, ".", ""); Расширение = СтрЗаменить(Расширение, ".", "");
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить контакт // Отправить контакт
// Отправляет контакт с номером телефона в чат или канал // Отправляет контакт с номером телефона в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяКонтакта - Строка - Имя контакта - name // ИмяКонтакта - Строка - Имя контакта - name
// НомерТелефона - Строка - Номер телефона - phone // НомерТелефона - Строка - Номер телефона - phone
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКонтакт(Знач Токен Функция ОтправитьКонтакт(Знач Токен
@ -223,91 +223,91 @@
, Знач НомерТелефона , Знач НомерТелефона
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал) Экспорт , Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить локацию // Отправить локацию
// Отправляет географические координаты в чат или канал // Отправляет географические координаты в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Широта - Строка,Число - Географическая широта - lat // Широта - Строка,Число - Географическая широта - lat
// Долгота - Строка,Число - Географическая долгота - long // Долгота - Строка,Число - Географическая долгота - long
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить ссылку // Отправить ссылку
// Отправляет URL с предпросмотром в чат или канал // Отправляет URL с предпросмотром в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Отправляемая ссылка - url // URL - Строка - Отправляемая ссылка - url
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL); Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
КонецФункции КонецФункции
// Сформировать клавиатуру из массива кнопок // Сформировать клавиатуру из массива кнопок
// Возвращает структура клавиатуры для сообщений // Возвращает структура клавиатуры для сообщений
// //
// Параметры: // Параметры:
// МассивКнопок - Массив из Строка - Массив кнопок - buttons // МассивКнопок - Массив из Строка - Массив кнопок - buttons
// ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color // ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Сформировать клавиатуру из массива кнопок: // Структура - Сформировать клавиатуру из массива кнопок:
// * Buttons - Массив из Структура - Массив сформированных кнопок // * Buttons - Массив из Структура - Массив сформированных кнопок
// * Type - Строка - Тип клавиатуры // * Type - Строка - Тип клавиатуры
Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок); OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
МассивСтруктурКнопок = Новый Массив; МассивСтруктурКнопок = Новый Массив;
СтруктураКлавиатуры = Новый Структура; СтруктураКлавиатуры = Новый Структура;
Для Каждого ТекстКнопки Из МассивКнопок Цикл Для Каждого ТекстКнопки Из МассивКнопок Цикл
СтруктураКнопки = Новый Структура; СтруктураКнопки = Новый Структура;
СтруктураКнопки.Вставить("ActionType", "reply"); СтруктураКнопки.Вставить("ActionType", "reply");
СтруктураКнопки.Вставить("ActionBody", ТекстКнопки); СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
СтруктураКнопки.Вставить("Text" , ТекстКнопки); СтруктураКнопки.Вставить("Text" , ТекстКнопки);
СтруктураКнопки.Вставить("BgColor" , ЦветКнопок); СтруктураКнопки.Вставить("BgColor" , ЦветКнопок);
СтруктураКнопки.Вставить("Coloumns" , 3); СтруктураКнопки.Вставить("Coloumns" , 3);
МассивСтруктурКнопок.Добавить(СтруктураКнопки); МассивСтруктурКнопок.Добавить(СтруктураКнопки);
КонецЦикла; КонецЦикла;
СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок); СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
СтруктураКлавиатуры.Вставить("Type" , "keyboard"); СтруктураКлавиатуры.Вставить("Type" , "keyboard");
Возврат СтруктураКлавиатуры; Возврат СтруктураКлавиатуры;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -317,7 +317,7 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Отправить сообщение. // Отправить сообщение.
// //
// Параметры: // Параметры:
// Токен - Строка - Токен // Токен - Строка - Токен
// Тип - Строка - Тип отправляемого сообщения // Тип - Строка - Тип отправляемого сообщения
@ -328,8 +328,8 @@
// * Размер - Число, Строка - Размер файла в случае отправке // * Размер - Число, Строка - Размер файла в случае отправке
// * Расширение - Строка - Расширение файла в случае отправки // * Расширение - Строка - Расширение файла в случае отправки
// Текст - Строка - Текст сообщения // Текст - Строка - Текст сообщения
// Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок // Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Отправить сообщение // Произвольный, HTTPОтвет - Отправить сообщение
Функция ОтправитьСообщение(Знач Токен Функция ОтправитьСообщение(Знач Токен
@ -339,28 +339,28 @@
, Знач Значение = "" , Знач Значение = ""
, Знач Текст = "" , Знач Текст = ""
, Знач Клавиатура = "") , Знач Клавиатура = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал); OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
СтруктураПараметров = ВернутьСтандартныеПараметры(); СтруктураПараметров = ВернутьСтандартныеПараметры();
СтруктураПараметров.Вставить("type", Тип); СтруктураПараметров.Вставить("type", Тип);
Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
СтруктураПараметров.Вставить("text", Текст); СтруктураПараметров.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
СтруктураПараметров.Вставить("keyboard", Клавиатура); СтруктураПараметров.Вставить("keyboard", Клавиатура);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда Если ЗначениеЗаполнено(Значение) Тогда
Если Тип = "file" Тогда Если Тип = "file" Тогда
СтруктураПараметров.Вставить("media" , Значение["URL"]); СтруктураПараметров.Вставить("media" , Значение["URL"]);
СтруктураПараметров.Вставить("size" , Значение["Размер"]); СтруктураПараметров.Вставить("size" , Значение["Размер"]);
СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]); СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
@ -371,49 +371,49 @@
Иначе Иначе
СтруктураПараметров.Вставить("media" , Значение); СтруктураПараметров.Вставить("media" , Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ЭтоКанал Тогда Если ЭтоКанал Тогда
СтруктураПараметров.Вставить("from", IDПользователя); СтруктураПараметров.Вставить("from" , IDПользователя);
URL = "https://chatapi.viber.com/pa/post"; URL = "https://chatapi.viber.com/pa/post";
Иначе Иначе
СтруктураПараметров.Вставить("receiver", IDПользователя); СтруктураПараметров.Вставить("receiver", IDПользователя);
URL = "https://chatapi.viber.com/pa/send_message"; URL = "https://chatapi.viber.com/pa/send_message";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
Попытка Попытка
Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()); Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
Исключение Исключение
Возврат Ответ; Возврат Ответ;
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция ВернутьСтандартныеПараметры() Функция ВернутьСтандартныеПараметры()
СтруктураОтправителя = Новый Структура; СтруктураОтправителя = Новый Структура;
СтруктураОтправителя.Вставить("name" , "Bot"); СтруктураОтправителя.Вставить("name" , "Bot");
СтруктураОтправителя.Вставить("avatar", ""); СтруктураОтправителя.Вставить("avatar", "");
СтруктураПараметров = Новый Структура; СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("sender", СтруктураОтправителя); СтруктураПараметров.Вставить("sender" , СтруктураОтправителя);
СтруктураПараметров.Вставить("min_api_version", 1); СтруктураПараметров.Вставить("min_api_version", 1);
Возврат СтруктураПараметров; Возврат СтруктураПараметров;
КонецФункции КонецФункции
Функция ТокенВЗаголовки(Знач Токен) Функция ТокенВЗаголовки(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
СтруктураЗаголовков = Новый Соответствие; СтруктураЗаголовков = Новый Соответствие;
СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен); СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
Возврат СтруктураЗаголовков; Возврат СтруктураЗаголовков;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexDisk.os // OneScript: ./OInt/core/Modules/OPI_YandexDisk.os
// Lib: Yandex Disk // Lib: Yandex Disk
// CLI: yadisk // CLI: yadisk
@ -37,7 +37,7 @@
//@skip-check wrong-string-literal-content //@skip-check wrong-string-literal-content
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
// #Использовать "../../tools" // #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
@ -45,217 +45,217 @@
// Получить информацию о диске // Получить информацию о диске
// Получает информацию о текущем диске // Получает информацию о текущем диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать папку // Создать папку
// Создает каталог на диске // Создает каталог на диске
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к созаваемой папке - path // Путь - Строка - Путь к созаваемой папке - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources"; URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить объект // Получить объект
// Получает информацию об объекте диска по заданному пути // Получает информацию об объекте диска по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к папке или файлу - path // Путь - Строка - Путь к папке или файлу - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить объект // Удалить объект
// Удаляет объект по заданному пути // Удаляет объект по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к удаляемой папке или файлу - path // Путь - Строка - Путь к удаляемой папке или файлу - path
// ВКорзину - Булево - В корзину - can // ВКорзину - Булево - В корзину - can
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину); OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("permanently", Не ВКорзину); Параметры.Вставить("permanently", Не ВКорзину);
Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Создать копию объекта // Создать копию объекта
// Создает копию объекта по заданному пути и пути к оригиналу // Создает копию объекта по заданному пути и пути к оригиналу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Оригинал - Строка - Путь к оригинальному файлу или каталогу - from // Оригинал - Строка - Путь к оригинальному файлу или каталогу - from
// Путь - Строка - Путь назначения для копии - to // Путь - Строка - Путь назначения для копии - to
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал); OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy"; URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал); Параметры.Вставить("from" , Оригинал);
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить ссылку для скачивания // Получить ссылку для скачивания
// Получает ссылку для скачивания файла // Получает ссылку для скачивания файла
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к файлу для скачивания - path // Путь - Строка - Путь к файлу для скачивания - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Скачать файл // Скачать файл
// Скачивает файл по указанному пути // Скачивает файл по указанному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к файлу для скачивания - path // Путь - Строка - Путь к файлу для скачивания - path
// ПутьСохранения - Строка - Путь сохранения файла - out // ПутьСохранения - Строка - Путь сохранения файла - out
// //
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения // ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения); OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения);
Ответ = ПолучитьСсылкуДляСкачивания(Токен, Путь); Ответ = ПолучитьСсылкуДляСкачивания(Токен, Путь);
URL = Ответ["href"]; URL = Ответ["href"];
Если Не ЗначениеЗаполнено(URL) Тогда Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения); Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список файлов // Получить список файлов
// Получает список файлов с или без отбора по типу // Получает список файлов с или без отбора по типу
// Список доступных типов: audio, backup, book, compressed, data, development, // Список доступных типов: audio, backup, book, compressed, data, development,
// diskimage, document, encoded, executable, flash, font, // diskimage, document, encoded, executable, flash, font,
// mage, settings, spreadsheet, text, unknown, video, web // mage, settings, spreadsheet, text, unknown, video, web
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Количество - Число,Строка - Количество возвращаемых объектов - amount // Количество - Число,Строка - Количество возвращаемых объектов - amount
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
// ОтборПоТипу - Строка - Отбор по типу файла - type // ОтборПоТипу - Строка - Отбор по типу файла - type
// СортироватьПоДате - Булево - Истина > сортировать по дате, Ложь > по алфавиту - datesort // СортироватьПоДате - Булево - Истина > сортировать по дате, Ложь > по алфавиту - datesort
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСписокФайлов(Знач Токен Функция ПолучитьСписокФайлов(Знач Токен
@ -263,50 +263,50 @@
, Знач СмещениеОтНачала = 0 , Знач СмещениеОтНачала = 0
, Знач ОтборПоТипу = "" , Знач ОтборПоТипу = ""
, Знач СортироватьПоДате = Ложь) Экспорт , Знач СортироватьПоДате = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу); OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу);
OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате); OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество)); Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала)); Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(ОтборПоТипу) Тогда Если ЗначениеЗаполнено(ОтборПоТипу) Тогда
Параметры.Вставить("media_type", ОтборПоТипу); Параметры.Вставить("media_type", ОтборПоТипу);
КонецЕсли; КонецЕсли;
Если СортироватьПоДате Тогда Если СортироватьПоДате Тогда
Назначение = "last-uploaded"; Назначение = "last-uploaded";
Иначе Иначе
Назначение = "files"; Назначение = "files";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Переместить объект // Переместить объект
// Перемещает объект по заданному пути и пути к оригиналу // Перемещает объект по заданному пути и пути к оригиналу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Оригинал - Строка - Путь к оригинальному файлу или папке - from // Оригинал - Строка - Путь к оригинальному файлу или папке - from
// Путь - Строка - Путь назначение для перемещения - to // Путь - Строка - Путь назначение для перемещения - to
// Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
@ -315,97 +315,97 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал); OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("from" , Оригинал); Параметры.Вставить("from" , Оригинал);
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Загрузить файл // Загрузить файл
// Загружает файл на диск по заданному пути // Загружает файл на диск по заданному пути
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь для сохранение файла на Диске - path // Путь - Строка - Путь для сохранение файла на Диске - path
// Файл - Строка,ДвоичныеДанные - Файл для загрузки - file // Файл - Строка,ДвоичныеДанные - Файл для загрузки - file
// Перезаписывать - Булево - Перезаписывать, если файл с таким именем уже существует - rewrite // Перезаписывать - Булево - Перезаписывать, если файл с таким именем уже существует - rewrite
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать); OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Href = "href"; Href = "href";
Файл = Новый Структура("file", Файл); Файл = Новый Структура("file", Файл);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path" , Путь); Параметры.Вставить("path" , Путь);
Параметры.Вставить("overwrite" , Перезаписывать); Параметры.Вставить("overwrite" , Перезаписывать);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки);
URL = Ответ[Href]; URL = Ответ[Href];
Если Не ЗначениеЗаполнено(URL) Тогда Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки); Ответ = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Загрузить файл по URL // Загрузить файл по URL
// Загружает файл на диск, забирая его по заданному URL // Загружает файл на диск, забирая его по заданному URL
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь помещения загруженного файла - path // Путь - Строка - Путь помещения загруженного файла - path
// Адрес - Строка - URL файла - url // Адрес - Строка - URL файла - url
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес); OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload"; URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL)); Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL));
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -414,186 +414,186 @@
// Опубликовать объект // Опубликовать объект
// Публикует объект диска в публичный доступ // Публикует объект диска в публичный доступ
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к публикуемому объекту - path // Путь - Строка - Путь к публикуемому объекту - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина); Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина);
КонецФункции КонецФункции
// Отменить публикацию объекта // Отменить публикацию объекта
// Отменяет публикацию ранее опубликованного объекта // Отменяет публикацию ранее опубликованного объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Путь - Строка - Путь к опубликованному ранее объекту - path // Путь - Строка - Путь к опубликованному ранее объекту - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт
Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь); Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь);
КонецФункции КонецФункции
// Получить список опубликованных объектов. // Получить список опубликованных объектов.
// Получает список опубликованных объектов // Получает список опубликованных объектов
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Количество - Число - Количество возвращаемых объектов - amount // Количество - Число - Количество возвращаемых объектов - amount
// СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение объектов не из начала списка - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", Количество); Параметры.Вставить("limit", Количество);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", СмещениеОтНачала); Параметры.Вставить("offset", СмещениеОтНачала);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить публичный объект // Получить публичный объект
// Получает информацию об опубликованном объекте по его URL // Получает информацию об опубликованном объекте по его URL
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Количество - Число - Количество возвращаемых вложенных объектов (для каталога) - amount // Количество - Число - Количество возвращаемых вложенных объектов (для каталога) - amount
// СмещениеОтНачала - Число - Смещение для получение вложенных объектов не из начала списка - offset // СмещениеОтНачала - Число - Смещение для получение вложенных объектов не из начала списка - offset
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество); OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала); OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Количество) Тогда Если ЗначениеЗаполнено(Количество) Тогда
Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество)); Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала)); Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
КонецЕсли; КонецЕсли;
Параметры.Вставить("public_key", URL); Параметры.Вставить("public_key", URL);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить ссылку скачивания публичного объекта // Получить ссылку скачивания публичного объекта
// Получает прямую ссылку для скачивания публичного объекта // Получает прямую ссылку для скачивания публичного объекта
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Путь - Строка - Путь внутри объекта - path // Путь - Строка - Путь внутри объекта - path
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Параметры = Новый Структура; Параметры = Новый Структура;
Если ЗначениеЗаполнено(Путь) Тогда Если ЗначениеЗаполнено(Путь) Тогда
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
КонецЕсли; КонецЕсли;
Параметры.Вставить("public_key", URL); Параметры.Вставить("public_key", URL);
Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки); Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Сохранить публичный объект на диск // Сохранить публичный объект на диск
// Сохраняет публичный объект на ваш диск // Сохраняет публичный объект на ваш диск
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Адрес объекта - url // URL - Строка - Адрес объекта - url
// Откуда - Строка - Путь внутри публичного каталога (только для папок) - from // Откуда - Строка - Путь внутри публичного каталога (только для папок) - from
// Куда - Строка - Путь сохранения файла - to // Куда - Строка - Путь сохранения файла - to
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL); OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk"; Адрес = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href"; Href = "href";
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("public_key", КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL)); Параметры.Вставить("public_key", КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL));
Если ЗначениеЗаполнено(Откуда) Тогда Если ЗначениеЗаполнено(Откуда) Тогда
Параметры.Вставить("path", Откуда); Параметры.Вставить("path", Откуда);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Куда) Тогда Если ЗначениеЗаполнено(Куда) Тогда
Параметры.Вставить("save_path", Куда); Параметры.Вставить("save_path", Куда);
КонецЕсли; КонецЕсли;
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
@ -601,42 +601,42 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЗаголовокАвторизации(Знач Токен) Функция ЗаголовокАвторизации(Знач Токен)
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "OAuth " + Токен); Заголовки.Вставить("Authorization", "OAuth " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ) Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь); OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ); OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ);
Заголовки = ЗаголовокАвторизации(Токен); Заголовки = ЗаголовокАвторизации(Токен);
Назначение = ?(ОбщийДоступ, "publish", "unpublish"); Назначение = ?(ОбщийДоступ, "publish", "unpublish");
Href = "href"; Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение; URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("path", Путь); Параметры.Вставить("path", Путь);
Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
URLОтвета = Ответ[Href]; URLОтвета = Ответ[Href];
Если Не ЗначениеЗаполнено(URLОтвета) Тогда Если Не ЗначениеЗаполнено(URLОтвета) Тогда
Возврат Ответ; Возврат Ответ;
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexID.os // OneScript: ./OInt/core/Modules/OPI_YandexID.os
// Lib: Yandex ID // Lib: Yandex ID
// CLI: yandex // CLI: yandex
@ -41,77 +41,77 @@
// Получить код подтверждения // Получить код подтверждения
// Получает код подтверждения и адрес страницы, на которой его необходимо ввести // Получает код подтверждения и адрес страницы, на которой его необходимо ввести
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
Параметры = Новый Структура("client_id", ClientId); Параметры = Новый Структура("client_id", ClientId);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Преобразовать код в токен // Преобразовать код в токен
// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения // Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device // КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства); OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "device_code"); Параметры.Вставить("grant_type" , "device_code");
Параметры.Вставить("code" , КодУстройства); Параметры.Вставить("code" , КодУстройства);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "refresh_token"); Параметры.Вставить("grant_type" , "refresh_token");
Параметры.Вставить("refresh_token" , RefreshToken); Параметры.Вставить("refresh_token" , RefreshToken);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os // OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
// MIT License // MIT License
@ -39,75 +39,75 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт // Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются // Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке: // Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode // https://creativecommons.org/licenses/by/4.0/legalcode
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64); Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
КонецФункции КонецФункции
Функция Хеш(ДвоичныеДанные, Тип) Экспорт Функция Хеш(ДвоичныеДанные, Тип) Экспорт
Хеширование = Новый ХешированиеДанных(Тип); Хеширование = Новый ХешированиеДанных(Тип);
Хеширование.Добавить(ДвоичныеДанные); Хеширование.Добавить(ДвоичныеДанные);
Возврат Хеширование.ХешСумма; Возврат Хеширование.ХешСумма;
КонецФункции КонецФункции
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
Дважды = 2; Дважды = 2;
Если Ключ.Размер() > РазмерБлока Тогда Если Ключ.Размер() > РазмерБлока Тогда
Ключ = Хеш(Ключ, Тип); Ключ = Хеш(Ключ, Тип);
КонецЕсли; КонецЕсли;
Если Ключ.Размер() <= РазмерБлока Тогда Если Ключ.Размер() <= РазмерБлока Тогда
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ); Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды); Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
КонецЕсли; КонецЕсли;
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ)); Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока)); Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока)); Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad); Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad); Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип); Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
КонецФункции КонецФункции
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
МассивДвоичныхДанных = Новый Массив; МассивДвоичныхДанных = Новый Массив;
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1); МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2); МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных); Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
КонецФункции КонецФункции
Функция ПовторитьСтроку(Строка, Количество) Экспорт Функция ПовторитьСтроку(Строка, Количество) Экспорт
Части = Новый Массив(Количество); Части = Новый Массив(Количество);
Для К = 1 По Количество Цикл Для К = 1 По Количество Цикл
Части.Добавить(Строка); Части.Добавить(Строка);
КонецЦикла; КонецЦикла;
Возврат СтрСоединить(Части, ""); Возврат СтрСоединить(Части, "");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os // OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License // MIT License
@ -46,10 +46,10 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьСоответствиеРазделовТестирования() Экспорт Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
СтандартныеЗависимости = "[Decode, Build]"; СтандартныеЗависимости = "[Decode, Build]";
ЗависимостиГугл = "Testing-GoogleWorkspace"; ЗависимостиГугл = "Testing-GoogleWorkspace";
Разделы = Новый Структура; Разделы = Новый Структура;
Разделы.Вставить("Telegram" , СтандартныеЗависимости); Разделы.Вставить("Telegram" , СтандартныеЗависимости);
Разделы.Вставить("VK" , СтандартныеЗависимости); Разделы.Вставить("VK" , СтандартныеЗависимости);
@ -57,7 +57,7 @@
Разделы.Вставить("Twitter" , СтандартныеЗависимости); Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости); Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл); Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл); Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
Разделы.Вставить("Notion" , СтандартныеЗависимости); Разделы.Вставить("Notion" , СтандартныеЗависимости);
@ -65,13 +65,13 @@
Разделы.Вставить("Airtable" , СтандартныеЗависимости); Разделы.Вставить("Airtable" , СтандартныеЗависимости);
Разделы.Вставить("Dropbox" , СтандартныеЗависимости); Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
Разделы.Вставить("Bitrix24" , СтандартныеЗависимости); Разделы.Вставить("Bitrix24" , СтандартныеЗависимости);
Возврат Разделы; Возврат Разделы;
КонецФункции КонецФункции
Функция ПолучитьТаблицуТестов() Экспорт Функция ПолучитьТаблицуТестов() Экспорт
Телеграм = "Telegram"; Телеграм = "Telegram";
ВКонтакте = "VK"; ВКонтакте = "VK";
ЯДиск = "YandexDisk"; ЯДиск = "YandexDisk";
@ -86,13 +86,13 @@
АирТ = "Airtable"; АирТ = "Airtable";
ДропБокс = "Dropbox"; ДропБокс = "Dropbox";
Битрикс = "Bitrix24"; Битрикс = "Bitrix24";
ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Метод");
ТаблицаТестов.Колонки.Добавить("Синоним"); ТаблицаТестов.Колонки.Добавить("Синоним");
ТаблицаТестов.Колонки.Добавить("Раздел"); ТаблицаТестов.Колонки.Добавить("Раздел");
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
@ -114,7 +114,7 @@
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте);
@ -135,7 +135,7 @@
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
@ -146,25 +146,25 @@
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв);
НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы);
НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер);
@ -172,7 +172,7 @@
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер);
@ -182,7 +182,7 @@
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн);
@ -192,7 +192,7 @@
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак);
@ -206,12 +206,12 @@
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс);
@ -220,7 +220,7 @@
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьСписокФайловПапки" , "Получить список файлов папки" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьСписокФайловПапки" , "Получить список файлов папки" , ДропБокс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСТокеном" , "Работа с токеном" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСТокеном" , "Работа с токеном" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_СерверноеВремя" , "Серверное время" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_СерверноеВремя" , "Серверное время" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСНовостями" , "Работа с новостями" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСНовостями" , "Работа с новостями" , Битрикс);
@ -231,215 +231,215 @@
НовыйТест(ТаблицаТестов, "Б24_УчетРабочегоВремени" , "Учет рабочего времени" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_УчетРабочегоВремени" , "Учет рабочего времени" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСЧатами" , "Работа с чатами" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСЧатами" , "Работа с чатами" , Битрикс);
НовыйТест(ТаблицаТестов, "Б24_РаботаСУведомлениями" , "Работа с уведомлениями" , Битрикс); НовыйТест(ТаблицаТестов, "Б24_РаботаСУведомлениями" , "Работа с уведомлениями" , Битрикс);
Возврат ТаблицаТестов; Возврат ТаблицаТестов;
КонецФункции КонецФункции
Функция ОжидаетЧто(Значение) Экспорт Функция ОжидаетЧто(Значение) Экспорт
Попытка Попытка
Модуль = ПолучитьОбщийМодуль("ЮТест"); Модуль = ПолучитьОбщийМодуль("ЮТест");
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль"); Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
Возврат Модуль.ОжидаетЧто(Значение); Возврат Модуль.ОжидаетЧто(Значение);
Исключение Исключение
Возврат Ожидаем.Что(Значение); Возврат Ожидаем.Что(Значение);
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция СформироватьТестыЯкс() Экспорт Функция СформироватьТестыЯкс() Экспорт
Модуль = ПолучитьОбщийМодуль("ЮТТесты"); Модуль = ПолучитьОбщийМодуль("ЮТТесты");
Разделы = ПолучитьСоответствиеРазделовТестирования(); Разделы = ПолучитьСоответствиеРазделовТестирования();
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
Для Каждого Раздел Из Разделы Цикл Для Каждого Раздел Из Разделы Цикл
ТекущийРаздел = Раздел.Ключ; ТекущийРаздел = Раздел.Ключ;
Отбор = Новый Структура("Раздел", ТекущийРаздел); Отбор = Новый Структура("Раздел", ТекущийРаздел);
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор); ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел); Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
Для Каждого Тест Из ТестыРаздела Цикл Для Каждого Тест Из ТестыРаздела Цикл
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним); Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
Возврат ""; Возврат "";
КонецФункции КонецФункции
Функция СформироватьТестыАссертс() Экспорт Функция СформироватьТестыАссертс() Экспорт
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
МассивТестов = Новый Массив; МассивТестов = Новый Массив;
Для Каждого Тест Из ТаблицаТестов Цикл Для Каждого Тест Из ТаблицаТестов Цикл
МассивТестов.Добавить(Тест.Метод); МассивТестов.Добавить(Тест.Метод);
КонецЦикла; КонецЦикла;
Возврат МассивТестов; Возврат МассивТестов;
КонецФункции КонецФункции
Функция ПолучитьПараметр(Параметр) Экспорт Функция ПолучитьПараметр(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь); Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
КонецФункции КонецФункции
Функция ПолучитьДвоичные(Параметр) Экспорт Функция ПолучитьДвоичные(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ПараметрЛокальный = Параметр + "Local"; ПараметрЛокальный = Параметр + "Local";
ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь); ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь);
ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь); ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
ФайлЛокальный = Новый Файл(ЗначениеЛокальный); ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
Если ФайлЛокальный.Существует() Тогда Если ФайлЛокальный.Существует() Тогда
Значение = Новый ДвоичныеДанные(ЗначениеЛокальный); Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
Иначе Иначе
Значение = ЗначениеОсновной; Значение = ЗначениеОсновной;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Тогда Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный); Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);
КонецЕсли; КонецЕсли;
Возврат Значение; Возврат Значение;
КонецФункции КонецФункции
Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
Если СтрНайти(Путь, "http") > 0 Если СтрНайти(Путь, "http") > 0
Или СтрНайти(Путь, "www") > 0 Тогда Или СтрНайти(Путь, "www") > 0 Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Путь, ИВФ); КопироватьФайл(Путь, ИВФ);
Путь = ИВФ; Путь = ИВФ;
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
Если СохранятьЛокально Тогда Если СохранятьЛокально Тогда
ЗаписатьПараметр(ПараметрЛокальный, ИВФ); ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
Иначе Иначе
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
КонецЕсли; КонецЕсли;
Иначе Иначе
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
КонецЕсли; КонецЕсли;
Возврат Двоичные; Возврат Двоичные;
КонецФункции КонецФункции
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьПараметр(Параметр); Значение = ПолучитьПараметр(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьДвоичные(Параметр); Значение = ПолучитьДвоичные(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ЗаписатьПараметрВФайл(Параметр, Значение, Путь); ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод; Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
Попытка Попытка
Данные = OPI_Инструменты.JSONСтрокой(Результат); Данные = OPI_Инструменты.JSONСтрокой(Результат);
Исключение Исключение
Данные = "Не JSON: " + Строка(Результат); Данные = "Не JSON: " + Строка(Результат);
КонецПопытки; КонецПопытки;
Данные = " " + Данные; Данные = " " + Данные;
Сообщить(Шапка); Сообщить(Шапка);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить(Данные); Сообщить(Данные);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить("---------------------------------"); Сообщить("---------------------------------");
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Если ЗначениеЗаполнено(Библиотека) Тогда Если ЗначениеЗаполнено(Библиотека) Тогда
ЗаписатьФайлЛога(Данные, Метод, Библиотека); ЗаписатьФайлЛога(Данные, Метод, Библиотека);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗначениеИзФайла(Параметр, Путь) Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], ""); Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
КонецФункции КонецФункции
Функция ПутьКФайлуДанных() Функция ПутьКФайлуДанных()
Путь = ""; Путь = "";
ВозможныеПути = Новый Массив; ВозможныеПути = Новый Массив;
ВозможныеПути.Добавить("./data.json"); ВозможныеПути.Добавить("./data.json");
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json"); ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
ВозможныеПути.Добавить("D:\GD\Мой диск\data.json"); ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
Для Каждого ВозможныйПуть Из ВозможныеПути Цикл Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
ФайлРепозитория = Новый Файл(ВозможныйПуть); ФайлРепозитория = Новый Файл(ВозможныйПуть);
Если ФайлРепозитория.Существует() Тогда Если ФайлРепозитория.Существует() Тогда
Путь = ВозможныйПуть; Путь = ВозможныйПуть;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Возврат Путь; Возврат Путь;
КонецФункции КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя) Функция ПолучитьОбщийМодуль(Знач Имя)
УстановитьБезопасныйРежим(Истина); УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя); Модуль = Вычислить(Имя);
УстановитьБезопасныйРежим(Ложь); УстановитьБезопасныйРежим(Ложь);
Возврат Модуль; Возврат Модуль;
КонецФункции КонецФункции
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел) Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
НовыйТест = ТаблицаЗначений.Добавить(); НовыйТест = ТаблицаЗначений.Добавить();
НовыйТест.Метод = Метод; НовыйТест.Метод = Метод;
НовыйТест.Синоним = Синоним; НовыйТест.Синоним = Синоним;
НовыйТест.Раздел = Раздел; НовыйТест.Раздел = Раздел;
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь) Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Значения.Вставить(Параметр, Значение); Значения.Вставить(Параметр, Значение);
@ -452,37 +452,37 @@
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека) Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
Попытка Попытка
ПутьЛогов = "./docs/ru/results"; ПутьЛогов = "./docs/ru/results";
ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека; ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
КаталогЛогов = Новый Файл(ПутьЛогов); КаталогЛогов = Новый Файл(ПутьЛогов);
Если Не КаталогЛогов.Существует() Тогда Если Не КаталогЛогов.Существует() Тогда
СоздатьКаталог(ПутьЛогов); СоздатьКаталог(ПутьЛогов);
КонецЕсли; КонецЕсли;
КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки); КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
Если Не КаталогЛоговБиблиотеки.Существует() Тогда Если Не КаталогЛоговБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьЛоговБиблиотеки); СоздатьКаталог(ПутьЛоговБиблиотеки);
КонецЕсли; КонецЕсли;
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log"; ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
ФайлЛога = Новый Файл(ПутьКФайлу); ФайлЛога = Новый Файл(ПутьКФайлу);
Если Не ФайлЛога.Существует() Тогда Если Не ФайлЛога.Существует() Тогда
ДокументЛога = Новый ТекстовыйДокумент; ДокументЛога = Новый ТекстовыйДокумент;
ДокументЛога.УстановитьТекст(Данные); ДокументЛога.УстановитьТекст(Данные);
ДокументЛога.Записать(ПутьКФайлу); ДокументЛога.Записать(ПутьКФайлу);
КонецЕсли; КонецЕсли;
Исключение Исключение
Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки()); Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os // OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License // MIT License
@ -39,268 +39,268 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Возврат; Возврат;
Иначе Иначе
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение); Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНайти(Значение, "//") Тогда ИначеЕсли СтрНайти(Значение, "//") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
Иначе Иначе
Значение = Base64Значение(Значение); Значение = Base64Значение(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки(); ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) <> Тип("Строка") Тогда Если ТипЗнч(Значение) <> Тип("Строка") Тогда
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть); Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);
Иначе Иначе
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьКоллекцию(Значение) Экспорт Процедура ПолучитьКоллекцию(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
ИсходноеЗначение = Значение; ИсходноеЗначение = Значение;
Если ЭтоКоллекция(Значение) Тогда Если ЭтоКоллекция(Значение) Тогда
Возврат; Возврат;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе Иначе
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеJSON.ОткрытьФайл(Значение); ЧтениеJSON.ОткрытьФайл(Значение);
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеJSON.ОткрытьФайл(ИВФ); ЧтениеJSON.ОткрытьФайл(ИВФ);
ЧтениеJSON.Прочитать(); ЧтениеJSON.Прочитать();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение)); ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
КонецЕсли; КонецЕсли;
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
ЧтениеJSON.Закрыть(); ЧтениеJSON.Закрыть();
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьМассив(Значение) Экспорт Процедура ПолучитьМассив(Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Массив") Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Если ТипЗнч(Значение) = Тип("Строка")
И СтрНачинаетсяС(Значение, "[") И СтрНачинаетсяС(Значение, "[")
И СтрЗаканчиваетсяНа(Значение, "]") Тогда И СтрЗаканчиваетсяНа(Значение, "]") Тогда
ЗапятаяВКавычках = "','"; ЗапятаяВКавычках = "','";
Значение = СтрЗаменить(Значение, "['" , ""); Значение = СтрЗаменить(Значение, "['" , "");
Значение = СтрЗаменить(Значение, "']" , ""); Значение = СтрЗаменить(Значение, "']" , "");
Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь); Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
Для Н = 0 По Значение.ВГраница() Цикл Для Н = 0 По Значение.ВГраница() Цикл
Значение[Н] = СокрЛП(Значение[Н]); Значение[Н] = СокрЛП(Значение[Н]);
КонецЦикла; КонецЦикла;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("Число") Тогда Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
OPI_Инструменты.ЗначениеВМассив(Значение); OPI_Инструменты.ЗначениеВМассив(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьБулево(Значение) Экспорт Процедура ПолучитьБулево(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("Булево") Тогда Если ТипЗнч(Значение) = Тип("Булево") Тогда
Возврат; Возврат;
Иначе Иначе
Значение = Булево(Значение); Значение = Булево(Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения данных булево из параметра"; ВызватьИсключение "Ошибка получения данных булево из параметра";
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ЭтоСимвольное(Значение) Тогда Если ЭтоСимвольное(Значение) Тогда
Если Не ИзИсточника Тогда Если Не ИзИсточника Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеТекста = Новый ЧтениеТекста(Значение); ЧтениеТекста = Новый ЧтениеТекста(Значение);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеТекста = Новый ЧтениеТекста(ИВФ); ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
ИначеЕсли ЭтоКоллекция(Значение) Тогда ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение); Значение = OPI_Инструменты.JSONСтрокой(Значение);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = Строка(Значение); Значение = Строка(Значение);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДату(Значение) Экспорт Процедура ПолучитьДату(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Дата = "Дата"; Дата = "Дата";
Попытка Попытка
Если ТипЗнч(Значение) = Тип(Дата) Тогда Если ТипЗнч(Значение) = Тип(Дата) Тогда
Возврат; Возврат;
Иначе Иначе
Значение = XMLЗначение(Тип(Дата), Значение); Значение = XMLЗначение(Тип(Дата), Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ООД = Новый ОписаниеТипов(Дата); ООД = Новый ОписаниеТипов(Дата);
Значение = ООД.ПривестиЗначение(Значение); Значение = ООД.ПривестиЗначение(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьЧисло(Значение) Экспорт Процедура ПолучитьЧисло(Значение) Экспорт
ОписаниеТипа = Новый ОписаниеТипов("Число"); ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение(Значение); Значение = ОписаниеТипа.ПривестиЗначение(Значение);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@ -308,19 +308,19 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЭтоКоллекция(Знач Значение) Функция ЭтоКоллекция(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Массив") Возврат ТипЗнч(Значение) = Тип("Массив")
Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Структура")
Или ТипЗнч(Значение) = Тип("Соответствие"); Или ТипЗнч(Значение) = Тип("Соответствие");
КонецФункции КонецФункции
Функция ЭтоСимвольное(Знач Значение) Функция ЭтоСимвольное(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Строка")
Или ТипЗнч(Значение) = Тип("Число")
Или ТипЗнч(Значение) = Тип("Дата");
КонецФункции
#КонецОбласти Возврат ТипЗнч(Значение) = Тип("Строка")
Или ТипЗнч(Значение) = Тип("Число")
Или ТипЗнч(Значение) = Тип("Дата");
КонецФункции
#КонецОбласти

File diff suppressed because it is too large Load Diff