
Этот небольшой пример того, как начать работу с Notion API. Вся документация находится здесь
Для начала работы с Notion API нужно выполнить несколько шагов:
Получить токен авторизации Notion API
Для работы с Notion API необходимо получить токен авторизации. Для этого нужно зарегистрироваться на сайте Notion, создать новую интеграцию и получить токен.
Установить библиотеку httr2
Библиотека httr2 — это R-пакет для работы с HTTP-запросами. Чтобы установить ее, нужно выполнить следующую команду в R:
install.packages("httr2")
Начало
Чтобы начать работу с Notion API нужно получить токен, который мы будем использовать для аутентификации.
-
Нам нужно войти в свой аккаунт Notion
-
Перейти по этой ссылке
-
Попадаем на страницу создания интеграции
-
Жмем
“New integration”

-
Даем имя токену

-
Выбираем те настройки доступа, которые мы хотим. В целом, все можно оставить по дефолту.
-
Далее жмем
“Submit”

-
Попадаем на страницу
Secrets, где нужно скопировать полученныйToken

Полученный token нужно сохранить. Он нам еще понадобится.
Подключаем базу данных в Notion
Далее ваша задача перейти на страницу Notion и добавить доступ к ней. Делается это, достаточно, просто:
-
Заходим на страницу базы данных. Важно: это должна быть именно
Database — full page -
В правом верхнем углу будут
…на них нужно нажать и перейти к разделуAdd connections.

-
После чего добавляем наш
token.
Важно отметить, что token привязывается не только к самой datebase, но и ко всем дочерним страницам этой datebase.
-
После этого, нам нужно скопировать код страницы нашей базы данных.
Мы переходим к url страницы и копируем все после https://www.notion.so/ и до ?v. Это и есть код нашей Database.

Переходим к R
Нам понадобятся следующие библиотеки
# Step 1: Загружаем библиотеки ---- library(httr2) library(jsonlite)
Далее необходимо провести аутентификацию
# Step 2: Подготовка ---- NOTION_TOKEN <- "Bearer <your token>" # Наш скопированный токен. DATABASE <- "<your database>" # ваш код базы данных base_url <- "https://api.notion.com/v1" # сслыка notion api
Стоит отметить, что token копируется без Bearer. Этот параметр нужно прописать отдельно.
После того как мы сохранили наши данные в переменные, нужно создать путь с авторизацией.
## Step 2.1: Создаем путь ---- base_request <- request(base_url) %>% req_headers("Notion-Version" = "2022-06-28", "Authorization" = NOTION_TOKEN)
Обратите внимание, что заголовки Notion-Version и Authorization для подключения обязательны.
Проверяем подключение
# Step 3: Проверяем работу ----- base_request %>% req_url_path_append("databases") %>% req_url_path_append(DATABASE) %>% req_perform()
Если все хорошо, мы должны увидеть такой ответ:
<httr2_response> GET https://api.notion.com/v1/databases/<your database> Status: 200 OK Content-Type: application/json Body: In memory (9549 bytes)
Если вы не получили Status: 200 OK вам нужно обратиться к документации Notion.
Что дальше?
Получив доступ к API мы можем работать в две стороны: либо “выгружать” содержимое database, либо вносить изменения.
Чтобы, например, вносить изменения в базу данных Notion, нам нужно ознакомиться с архитектурой нашей страницы в Notion.
Смотрим на структуру database
Как мы видели выше, ответ от Notion API приходит в формате json (Content-Type: application/json). Для того, что мы могли работать с данным ответом в R, нам нужно его извлечь. В этом нам поможет функция httr2:resp_body_json().
Функция resp_body_json() в R из пакета httr2 используется для извлечения JSON-данных из HTTP-ответа. Конкретнее, функция принимает на вход объект HTTP-ответа и возвращает декодированные данные в формате списка R.
## Step 4: Извлекаем ответ и сохраняем в переемнную ----- notion.one <- base_request %>% req_url_path_append("databases") %>% req_url_path_append(DATABASE) %>% req_perform() %>% resp_body_json() notion.one %>% View()
Мы получаем вложенные списки, в которых хранится информация о нашей database. Основной параметр, который будет нас интересовать, имеет название properties. В нем, сейчас, содержится только информация о столбцах.

Если мы хотим увидеть всё содержимое каждого столбца, нам нужно выполнить следующие действия:
## Step 5: Смотрим содержимое database ----- notion.two <- base_request %>% req_url_path_append("databases") %>% req_url_path_append(DATABASE) %>% req_url_path_append('query') %>% req_method("POST") %>% # меняем метод запроса req_perform() %>% resp_body_json() notion.two %>% View()
Стоит обратить внимание, что мы меняем метод запрос GET на POST при помощи функции req_method(), так как этого требует документация.
После чего мы получаем более сложную структуру данных. Здесь я не буду рассматривать, как разворачивать спсики в R. Рекомендую обратиться к статье Алексея Селезнева.

Меняем название колонки
Чтобы внести изменения в базу данных, нужно провести подготовительную работу. Нам необходимо понять, какую именно колонку мы хотим переименовать.
Каждый элемент имеет свое имя (name) и свой id. По одному из этих параметров мы и будем обращаться к Notion.
В нашем случае мы будем переименовывать столбец “Название книги”.
Когда мы обращаемся к API Notion, то получаем ответ в формате json. Соответственно запрос на изменение database мы должны отправить тоже в виде json.
В пакете httr2 предусмотрены функция для такого случая — req_body_json().
Следуя документации, для изменения колонки по Id нам нужно отправить следующий json запрос:
"properties": { "J@cT": { "name": "New Property Name" } }
Осталось дело за малым.
Нам нужно достать id колонки

# Step 6: Смотрим id колонки ---- notion.one$properties$`Название книги`$id [1] "title"
Теперь нужно написать json запрос
# Step 7: Пишем json ---- tag.json <- list(properties = list(title = list(name = "Новое название"))) toJSON(tag.json) #смотрим как выглядит запрос {"properties":{"title":{"name":["Новое название"]}}}
Отправляем запрос
# Step 8: Отправляем запрос на изменение колонки ---- base_request %>% req_url_path_append("databases") %>% req_url_path_append(DATABASE) %>% req_body_json(tag.json) %>% req_method("PATCH") %>% # меням тип запроса req_perform()
Получаем ответ
<httr2_response> PATCH https://api.notion.com/v1/databases/<your database> Status: 200 OK Content-Type: application/json Body: In memory (9549 bytes)
В итоге, мы успешно научились подключаться к Notion API с помощью библиотеки httr2 в R и извлекать списки из базы данных. Мы также научились переименовывать колонки, чтобы лучше понимать логику работы Notion API.
ссылка на оригинал статьи https://habr.com/ru/post/722654/
Добавить комментарий