mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-21 01:50:24 +02:00
Notion API: Блоки и пользователи
This commit is contained in:
parent
3239e5c747
commit
3c0223cf56
@ -254,7 +254,145 @@
|
|||||||
ДобавитьСвойстваБазы(Свойства, Параметры);
|
ДобавитьСвойстваБазы(Свойства, Параметры);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/databases"+ База, Параметры, Заголовки);
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/databases/"+ База, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область РаботаСБлоками
|
||||||
|
|
||||||
|
// Создать блок.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// Родитель - Строка - ID родительского блока или страницы
|
||||||
|
// ИДБлока - Строка - ID блока, копию которого необходимо добавить
|
||||||
|
// ВставитьПосле - Строка - ID блока, после которого необходимо встаивть новый, если родитель уже имеет дочерние блоки
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, Произвольный, Неопределено, ДвоичныеДанные, HTTPОтвет - Ответ сервера Notion
|
||||||
|
Функция СоздатьБлок(Знач Токен, Знач Родитель, Знач ИДБлока, Знач ВставитьПосле = "") Экспорт
|
||||||
|
|
||||||
|
ПреобразоватьИД(Родитель);
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Блок = ВернутьБлок(Токен, ИДБлока);
|
||||||
|
УдалитьЛишниеПоляБлока(Блок);
|
||||||
|
|
||||||
|
МассивБлоков = Новый Массив;
|
||||||
|
МассивБлоков.Добавить(Блок);
|
||||||
|
|
||||||
|
Параметры = Новый Соответствие;
|
||||||
|
Параметры.Вставить("children", МассивБлоков);
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ВставитьПосле) Тогда
|
||||||
|
Параметры.Вставить("after", ВставитьПосле);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/blocks/" + Родитель + "/children"
|
||||||
|
, Параметры
|
||||||
|
, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Вернуть блок.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// ИДБлока - Строка - ID блока
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
||||||
|
Функция ВернутьБлок(Знач Токен, Знач ИДБлока) Экспорт
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Вернуть дочерние блоки.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// ИДБлока - Строка - ID блока-родителя
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
||||||
|
Функция ВернутьДочерниеБлоки(Знач Токен, Знач ИДБлока) Экспорт
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока + "/children", , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить блок.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// ИДБлока - Строка - ID блока
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
||||||
|
Функция УдалитьБлок(Знач Токен, Знач ИДБлока) Экспорт
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДБлока);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Delete("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область Пользователи
|
||||||
|
|
||||||
|
// Список пользователей.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
||||||
|
Функция СписокПользователей(Знач Токен) Экспорт
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users", , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить данные пользователя.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// ИДПользователя - Строка - ID целевого пользователя
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Получить данные пользователя
|
||||||
|
Функция ПолучитьДанныеПользователя(Знач Токен, Знач ИДПользователя) Экспорт
|
||||||
|
|
||||||
|
ПреобразоватьИД(ИДПользователя);
|
||||||
|
|
||||||
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||||
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users/" + ИДПользователя, , Заголовки);
|
||||||
|
|
||||||
Возврат Ответ;
|
Возврат Ответ;
|
||||||
|
|
||||||
@ -278,18 +416,7 @@
|
|||||||
|
|
||||||
Процедура ПреобразоватьИД(Идентификатор)
|
Процедура ПреобразоватьИД(Идентификатор)
|
||||||
|
|
||||||
Если СтрНайти(Идентификатор, "-" = 0) Тогда
|
Идентификатор = СтрЗаменить(Идентификатор, "-", "");
|
||||||
|
|
||||||
МассивЧастей = Новый Массив;
|
|
||||||
МассивЧастей.Добавить(Лев(Идентификатор , 8));
|
|
||||||
МассивЧастей.Добавить(Сред(Идентификатор , 9 , 4));
|
|
||||||
МассивЧастей.Добавить(Сред(Идентификатор , 12, 4));
|
|
||||||
МассивЧастей.Добавить(Сред(Идентификатор , 15, 4));
|
|
||||||
МассивЧастей.Добавить(Прав(Идентификатор , 12));
|
|
||||||
|
|
||||||
Идентификатор = СтрСоединить(МассивЧастей, "-");
|
|
||||||
|
|
||||||
КонецЕсли
|
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@ -375,6 +502,10 @@
|
|||||||
ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
|
ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
|
||||||
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения))
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения))
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Свойство.Значение);
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
@ -441,6 +572,28 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура УдалитьЛишниеПоляБлока(Знач Блок)
|
||||||
|
|
||||||
|
МассивЛишних = Новый Массив;
|
||||||
|
МассивЛишних.Добавить("request_id");
|
||||||
|
МассивЛишних.Добавить("archived");
|
||||||
|
МассивЛишних.Добавить("created_by");
|
||||||
|
МассивЛишних.Добавить("last_edited_time");
|
||||||
|
МассивЛишних.Добавить("created_time");
|
||||||
|
МассивЛишних.Добавить("has_children");
|
||||||
|
МассивЛишних.Добавить("parrent");
|
||||||
|
МассивЛишних.Добавить("last_edited_by");
|
||||||
|
МассивЛишних.Добавить("id");
|
||||||
|
|
||||||
|
Для Каждого Поле Из МассивЛишних Цикл
|
||||||
|
|
||||||
|
Если Не Блок.Получить(Поле) = Неопределено Тогда
|
||||||
|
Блок.Удалить(Поле);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#Область ПреобразованиеТипов
|
#Область ПреобразованиеТипов
|
||||||
|
|
||||||
Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
|
Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
|
||||||
|
@ -26,34 +26,11 @@
|
|||||||
#Область HTTPМетоды
|
#Область HTTPМетоды
|
||||||
|
|
||||||
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
||||||
|
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
Функция Delete(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
||||||
Параметры = Новый Структура;
|
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки);
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Заголовки = Новый Соответствие;
|
|
||||||
|
|
||||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
|
||||||
|
|
||||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
|
||||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
СтруктураURL = РазбитьURL(URL);
|
|
||||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
|
||||||
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
|
|
||||||
Ответ = Соединение.Получить(Запрос);
|
|
||||||
|
|
||||||
Попытка
|
|
||||||
ТелоОтвета = JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
|
||||||
Исключение
|
|
||||||
ТелоОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
|
|
||||||
КонецПопытки;
|
|
||||||
|
|
||||||
Возврат ТелоОтвета;
|
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// BSLLS:CognitiveComplexity-off
|
// BSLLS:CognitiveComplexity-off
|
||||||
@ -215,67 +192,6 @@
|
|||||||
|
|
||||||
#Область Служебные
|
#Область Служебные
|
||||||
|
|
||||||
Функция ВыполнитьЗапросСТелом(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина)
|
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
|
||||||
Параметры = Новый Структура;
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
GZip = "gzip";
|
|
||||||
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
|
||||||
СтруктураURL = РазбитьURL(URL);
|
|
||||||
|
|
||||||
Заголовки = Новый Соответствие;
|
|
||||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
|
||||||
Заголовки.Вставить("Accept-Encoding", GZip);
|
|
||||||
Заголовки.Вставить("Accept", "*/*");
|
|
||||||
Заголовки.Вставить("Connection", "keep-alive");
|
|
||||||
|
|
||||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
|
||||||
|
|
||||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
|
||||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
|
||||||
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
|
||||||
|
|
||||||
Если JSON Тогда
|
|
||||||
Данные = JSONСтрокой(Параметры);
|
|
||||||
Иначе
|
|
||||||
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
|
||||||
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
|
|
||||||
|
|
||||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
|
||||||
|
|
||||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
|
||||||
"content-encoding") = GZip;
|
|
||||||
|
|
||||||
Если НужнаРаспаковка Тогда
|
|
||||||
Ответ = РаспаковатьОтвет(Ответ);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
|
||||||
|
|
||||||
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
|
||||||
|
|
||||||
Попытка
|
|
||||||
Ответ = JsonВСтруктуру(Ответ);
|
|
||||||
Исключение
|
|
||||||
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
|
||||||
КонецПопытки;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Возврат Ответ;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
Функция ПараметрыЗапросаВСтроку(Знач Параметры) Экспорт
|
Функция ПараметрыЗапросаВСтроку(Знач Параметры) Экспорт
|
||||||
|
|
||||||
Если Параметры.Количество() = 0 Тогда
|
Если Параметры.Количество() = 0 Тогда
|
||||||
@ -365,6 +281,97 @@
|
|||||||
|
|
||||||
#Область СлужебныеПроцедурыИФункции
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
Функция ВыполнитьЗапросСТелом(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина)
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
GZip = "gzip";
|
||||||
|
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
||||||
|
СтруктураURL = РазбитьURL(URL);
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||||
|
Заголовки.Вставить("Accept-Encoding", GZip);
|
||||||
|
Заголовки.Вставить("Accept", "*/*");
|
||||||
|
Заголовки.Вставить("Connection", "keep-alive");
|
||||||
|
|
||||||
|
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||||
|
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||||
|
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
||||||
|
|
||||||
|
Если JSON Тогда
|
||||||
|
Данные = JSONСтрокой(Параметры);
|
||||||
|
Иначе
|
||||||
|
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
|
||||||
|
|
||||||
|
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
||||||
|
|
||||||
|
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
||||||
|
"content-encoding") = GZip;
|
||||||
|
|
||||||
|
Если НужнаРаспаковка Тогда
|
||||||
|
Ответ = РаспаковатьОтвет(Ответ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
||||||
|
|
||||||
|
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Ответ = JsonВСтруктуру(Ответ);
|
||||||
|
Исключение
|
||||||
|
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ВыполнитьЗапросБезТела(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "")
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Заголовки = Новый Соответствие;
|
||||||
|
|
||||||
|
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||||
|
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтруктураURL = РазбитьURL(URL);
|
||||||
|
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||||
|
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
|
||||||
|
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
ТелоОтвета = JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
||||||
|
Исключение
|
||||||
|
ТелоОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
Возврат ТелоОтвета;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
#Область GZip
|
#Область GZip
|
||||||
|
|
||||||
// Описание структур см. здесь https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
|
// Описание структур см. здесь https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
|
||||||
|
Loading…
Reference in New Issue
Block a user