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

Комментарии (0)