mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-29 21:57:16 +02:00
Notion API: Определение типов, создание страницы в базу, данные базы
This commit is contained in:
parent
be9502c2c6
commit
cba8742efa
@ -1,3 +1,27 @@
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2024 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Область РаботаСоСтраницами
|
||||
@ -33,20 +57,18 @@
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// Родитель - Строка - ID родительской базы
|
||||
// Свойства - Структура Из Строка - Структура/Соответствие свойств. Должен соответствовать шаблону свойств базы
|
||||
// Свойства - Соответствие - Соответствие свойств. Должен соответствовать шаблону свойств базы
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - Создать страницу в базу
|
||||
Функция СоздатьСтраницуВБазу(Знач Токен, Знач Родитель, Знач Свойства) Экспорт
|
||||
|
||||
ДанныеБазы = ПолучитьБазуДанных(Токен, Родитель);
|
||||
|
||||
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||
Свойства = Новый Структура;
|
||||
Параметры = Новый Структура;
|
||||
|
||||
ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры);
|
||||
|
||||
Функция СоздатьСтраницуВБазу(Знач Токен, Знач Родитель, Знач Данные) Экспорт
|
||||
|
||||
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||
Параметры = Новый Структура;
|
||||
|
||||
ДобавитьРодителяСтраницы(Родитель, Истина, Параметры);
|
||||
|
||||
Свойства = ЗаполнитьДанныеПоСхеме(Родитель, Данные, Токен);
|
||||
Параметры.Вставить("properties", Свойства);
|
||||
|
||||
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
|
||||
@ -74,6 +96,50 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИзменитьСвойстваСтраницы(Знач Токен, Знач Страница, Знач Данные = "", Знач Иконка = "", Знач Обложка = "", Знач Архивирована = Ложь) Экспорт
|
||||
|
||||
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
||||
Параметры = Новый Структура;
|
||||
|
||||
Если ЗначениеЗаполнено(Данные) И ТипЗнч(Данные) = Тип("Соответствие") Тогда
|
||||
Свойства = ЗаполнитьДанныеПоСхеме(Страница, Данные, Токен, Ложь);
|
||||
Иначе
|
||||
Свойства = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Иконка) Тогда
|
||||
СоответствиеИконки = Новый Соответствие;
|
||||
СоответствиеИконки.Вставить("Icon", Иконка);
|
||||
|
||||
ОбъектИконка = ПреобразоватьЗначениеПоТипу("files", СоответствиеИконки);
|
||||
ОбъектИконка = ОбъектИконка["files"][0];
|
||||
ОбъектИконка.Удалить("name");
|
||||
|
||||
Параметры.Вставить("icon", ОбъектИконка);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Обложка) Тогда
|
||||
СоответствиеОбложки = Новый Соответствие;
|
||||
СоответствиеОбложки.Вставить("Cover", Обложка);
|
||||
|
||||
ОбъектОбложка = ПреобразоватьЗначениеПоТипу("files", СоответствиеОбложки);
|
||||
ОбъектОбложка = ОбъектОбложка["files"][0];
|
||||
ОбъектОбложка.Удалить("name");
|
||||
|
||||
Параметры.Вставить("cover", ОбъектОбложка);
|
||||
КонецЕсли;
|
||||
|
||||
Параметры.Вставить("properties", Свойства);
|
||||
Параметры.Вставить("archived", Архивирована);
|
||||
|
||||
ПреобразоватьИД(Страница);
|
||||
|
||||
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/pages/" + Страница, Параметры, Заголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область РаботаСБазамиДанных
|
||||
@ -222,19 +288,8 @@
|
||||
|
||||
Процедура ДобавитьЗаголовокБазы(Знач Заголовок, ОсновнаяСтруктура)
|
||||
|
||||
СтруктураДанных = Новый Структура;
|
||||
СтруктураТекста = Новый Структура;
|
||||
МассивДанных = Новый Массив;
|
||||
|
||||
СтруктураТекста.Вставить("content", Заголовок);
|
||||
СтруктураТекста.Вставить("link" , Неопределено);
|
||||
|
||||
СтруктураДанных.Вставить("type", "text");
|
||||
СтруктураДанных.Вставить("text", СтруктураТекста);
|
||||
|
||||
МассивДанных.Добавить(СтруктураДанных);
|
||||
|
||||
ОсновнаяСтруктура.Вставить("title", МассивДанных);
|
||||
Заголовок = ПреобразоватьЗаголовок(Заголовок);
|
||||
ОсновнаяСтруктура.Вставить("title", Заголовок["title"]);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -285,4 +340,232 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗаполнитьДанныеПоСхеме(Знач Схема, Знач Данные, Знач Токен, Знач ЭтоБаза = Истина)
|
||||
|
||||
Если ЭтоБаза Тогда
|
||||
ДанныеСхемы = ПолучитьБазуДанных(Токен, Схема);
|
||||
Иначе
|
||||
ДанныеСхемы = ПолучитьСтраницу(Токен, Схема);
|
||||
КонецЕсли;
|
||||
|
||||
ПоляБазы = ДанныеСхемы["properties"];
|
||||
Свойства = Новый Соответствие;
|
||||
|
||||
Для Каждого Поле Из ПоляБазы Цикл
|
||||
|
||||
ДанныеПоля = Поле.Значение;
|
||||
ТипПоля = ДанныеПоля["type"];
|
||||
|
||||
ЗаполняемыеДанные = Данные.Получить(Поле.Ключ);
|
||||
|
||||
Если Не ЗначениеЗаполнено(ЗаполняемыеДанные) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ПреобразованныеДанные = ПреобразоватьЗначениеПоТипу(ТипПоля, ЗаполняемыеДанные);
|
||||
|
||||
Если ПреобразованныеДанные = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Свойства.Вставить(ДанныеПоля["id"], ПреобразованныеДанные);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Свойства;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область ПреобразованиеТипов
|
||||
|
||||
Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
|
||||
|
||||
Если Тип = "title" Тогда
|
||||
Возврат ПреобразоватьЗаголовок(Значение);
|
||||
ИначеЕсли Тип = "rich_text" Тогда
|
||||
Возврат ПреобразоватьТекст(Значение);
|
||||
ИначеЕсли Тип = "number" Тогда
|
||||
Возврат ПреобразоватьЧисло(Значение);
|
||||
ИначеЕсли Тип = "select" Тогда
|
||||
Возврат ПреобразоватьВариантВыбора(Значение);
|
||||
ИначеЕсли Тип = "multi_select" Тогда
|
||||
Возврат ПреобразоватьМножественныйВыбор(Значение);
|
||||
ИначеЕсли Тип = "status" Тогда
|
||||
Возврат ПреобразоватьСтатус(Значение);
|
||||
ИначеЕсли Тип = "date" Тогда
|
||||
Возврат ПреобразоватьеДату(Значение);
|
||||
ИначеЕсли Тип = "relation" Тогда
|
||||
Возврат ПреобразоватьСвязь(Значение);
|
||||
ИначеЕсли Тип = "people" Тогда
|
||||
Возврат ПреобразоватьПользователей(Значение);
|
||||
ИначеЕсли Тип = "files" Тогда
|
||||
Возврат ПреобразоватьФайлы(Значение);
|
||||
ИначеЕсли Тип = "checkbox" Тогда
|
||||
Возврат ПреобразоватьБулево(Значение);
|
||||
ИначеЕсли Тип = "url" Тогда
|
||||
Возврат ПреобразоватьСсылку(Значение);
|
||||
ИначеЕсли Тип = "email" Тогда
|
||||
Возврат ПреобразоватьПочту(Значение);
|
||||
ИначеЕсли Тип = "phone_number" Тогда
|
||||
Возврат ПреобразоватьТелефон(Значение);
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьЗаголовок(Знач Заголовок)
|
||||
|
||||
СтруктураДанных = Новый Структура;
|
||||
СтруктураТекста = Новый Структура;
|
||||
МассивДанных = Новый Массив;
|
||||
|
||||
СтруктураТекста.Вставить("content", Заголовок);
|
||||
СтруктураТекста.Вставить("link" , Неопределено);
|
||||
|
||||
СтруктураДанных.Вставить("type", "text");
|
||||
СтруктураДанных.Вставить("text", СтруктураТекста);
|
||||
|
||||
МассивДанных.Добавить(СтруктураДанных);
|
||||
|
||||
Возврат Новый Структура("title", МассивДанных);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьТекст(Знач Текст)
|
||||
|
||||
МассивТекста = Новый Массив;
|
||||
СтруктураТекста = Новый Структура;
|
||||
|
||||
СтруктураТекста.Вставить("type", "text");
|
||||
СтруктураТекста.Вставить("text", Новый Структура("content", Текст));
|
||||
|
||||
МассивТекста.Добавить(СтруктураТекста);
|
||||
|
||||
Возврат Новый Структура("rich_text", МассивТекста);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьЧисло(Знач Число)
|
||||
|
||||
//Число = OPI_Инструменты.ЧислоВСтроку(Число);
|
||||
Возврат Новый Структура("number", Число);
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьВариантВыбора(Знач Вариант)
|
||||
|
||||
СтруктураВыбора = Новый Структура;
|
||||
СтруктураВыбора.Вставить("select", Новый Структура("name", Вариант));
|
||||
|
||||
Возврат СтруктураВыбора;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьСтатус(Знач Статус)
|
||||
|
||||
СтруктураСтатуса = Новый Структура;
|
||||
СтруктураСтатуса.Вставить("status", Новый Структура("name", Статус));
|
||||
|
||||
Возврат СтруктураСтатуса;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьМножественныйВыбор(Знач МассивВариантов)
|
||||
|
||||
МассивВариантовВыбора = Новый Массив;
|
||||
|
||||
Для Каждого Вариант Из МассивВариантов Цикл
|
||||
МассивВариантовВыбора.Добавить(Новый Структура("name", Вариант));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("multi_select", МассивВариантовВыбора);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьеДату(Знач Дата)
|
||||
|
||||
СтруктураДаты = Новый Структура;
|
||||
|
||||
Если Дата = НачалоДня(Дата) Тогда
|
||||
ФорматДаты = "ДФ=yyyy-MM-dd";
|
||||
Иначе
|
||||
ФорматДаты = "ДФ=yyyy-MM-ddThh:mm:ssZ";
|
||||
КонецЕсли;
|
||||
|
||||
Дата = Формат(Дата, ФорматДаты);
|
||||
СтруктураДаты.Вставить("start", Дата);
|
||||
|
||||
Возврат Новый Структура("date", СтруктураДаты);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьСвязь(Знач Идентификатор)
|
||||
|
||||
МассивСвязи = Новый Массив;
|
||||
МассивСвязи.Добавить(Новый Структура("id", Идентификатор));
|
||||
|
||||
Возврат Новый Структура("relation", МассивСвязи);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьПользователей(Знач МассивИД)
|
||||
|
||||
Если Не ТипЗнч(МассивИД) = Тип("Массив") Тогда
|
||||
МассивИД_ = Новый Массив;
|
||||
МассивИД_.Добавить(МассивИД);
|
||||
МассивИД = МассивИД_;
|
||||
КонецЕсли;
|
||||
|
||||
МассивПользователей = Новый Массив;
|
||||
|
||||
Для Каждого Идентификатор Из МассивИД Цикл
|
||||
|
||||
СтруктураПользователя = Новый Структура;
|
||||
СтруктураПользователя.Вставить("object", "user");
|
||||
СтруктураПользователя.Вставить("id" , Идентификатор);
|
||||
МассивПользователей.Добавить(СтруктураПользователя);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("people", МассивПользователей);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьФайлы(Знач СоответствиеФайлов)
|
||||
|
||||
МассивФайлов = Новый Массив;
|
||||
|
||||
Для Каждого Файл Из СоответствиеФайлов Цикл
|
||||
|
||||
СтруктураФайла = Новый Структура;
|
||||
СтруктураФайла.Вставить("type", "external");
|
||||
СтруктураФайла.Вставить("name", Файл.Ключ);
|
||||
СтруктураФайла.Вставить("external", Новый Структура("url", Файл.Значение));
|
||||
|
||||
МассивФайлов.Добавить(СтруктураФайла);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("files", МассивФайлов);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьБулево(Знач Булево)
|
||||
Возврат Новый Структура("checkbox", Булево);
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьСсылку(Знач URL)
|
||||
Возврат Новый Структура("url", URL);
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьПочту(Знач Почта)
|
||||
Возврат Новый Структура("email", Почта);
|
||||
КонецФункции
|
||||
|
||||
Функция ПреобразоватьТелефон(Знач Телефон)
|
||||
Возврат Новый Структура("phone_number", Телефон);
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
@ -164,7 +164,59 @@
|
||||
// BSLLS:CognitiveComplexity-on
|
||||
|
||||
Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON);
|
||||
КонецФункции
|
||||
|
||||
Функция Patch(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON);
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
|
||||
|
||||
СоответствиеВозврата = Новый Соответствие;
|
||||
КоличествоЧастей = 2;
|
||||
МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь);
|
||||
|
||||
Для Каждого Параметр Из МассивПараметров Цикл
|
||||
|
||||
МассивКлючЗначение = СтрРазделить(Параметр, "=");
|
||||
|
||||
Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда
|
||||
СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СоответствиеВозврата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция UNIXTime(Знач Дата) Экспорт
|
||||
Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаменитьСпецСимволы(Текст) Экспорт
|
||||
|
||||
МассивСимволов = Новый Соответствие;
|
||||
МассивСимволов.Вставить("<", "<");
|
||||
МассивСимволов.Вставить(">", ">");
|
||||
МассивСимволов.Вставить("&", "&");
|
||||
МассивСимволов.Вставить("_", " ");
|
||||
МассивСимволов.Вставить("[", "(");
|
||||
МассивСимволов.Вставить("]", ")");
|
||||
|
||||
Для Каждого СимволМассива Из МассивСимволов Цикл
|
||||
Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Служебные
|
||||
|
||||
Функция ВыполнитьЗапросСТелом(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина)
|
||||
|
||||
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
||||
Параметры = Новый Структура;
|
||||
КонецЕсли;
|
||||
@ -199,7 +251,7 @@
|
||||
|
||||
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос);
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
||||
|
||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
||||
"content-encoding") = GZip;
|
||||
@ -224,50 +276,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
|
||||
|
||||
СоответствиеВозврата = Новый Соответствие;
|
||||
КоличествоЧастей = 2;
|
||||
МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь);
|
||||
|
||||
Для Каждого Параметр Из МассивПараметров Цикл
|
||||
|
||||
МассивКлючЗначение = СтрРазделить(Параметр, "=");
|
||||
|
||||
Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда
|
||||
СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СоответствиеВозврата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаменитьСпецСимволы(Текст) Экспорт
|
||||
|
||||
МассивСимволов = Новый Соответствие;
|
||||
МассивСимволов.Вставить("<", "<");
|
||||
МассивСимволов.Вставить(">", ">");
|
||||
МассивСимволов.Вставить("&", "&");
|
||||
МассивСимволов.Вставить("_", " ");
|
||||
МассивСимволов.Вставить("[", "(");
|
||||
МассивСимволов.Вставить("]", ")");
|
||||
|
||||
Для Каждого СимволМассива Из МассивСимволов Цикл
|
||||
Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция UNIXTime(Знач Дата) Экспорт
|
||||
Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Служебные
|
||||
|
||||
Функция ПараметрыЗапросаВСтроку(Знач Параметры) Экспорт
|
||||
|
||||
Если Параметры.Количество() = 0 Тогда
|
||||
|
Loading…
x
Reference in New Issue
Block a user