Этот небольшой пример того, как начать работу с 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.