Notion API 발표 자료

Jay Kim·2022년 9월 15일

Notion API <발표자: 김정연>

<목차>

1.기존의 방식의 단점 → 이걸 왜 쓰는지 큰그림(아키텍처 느낌)

2.Notion API가 뭔지?

3.Notion API 로 가능한 일

4.간단한 데모

5.한계점


유비쿼터스 = 사용자가 컴퓨터나 네트워크를 의식하지 않고 장소에 상관없이 자유롭게 네트워크에 접할 수 있는 환경

사용자노션.JPG


1. Why Notion API?

Untitled

  • Notion-모바일에서 사용하기 무거움
  • Notion-공휴일을 표시하지 않는 단점
  • Notion-구글캘린더에서 어려운 회의록 작성 가능
  • Google Calender- 노션에 없는 줌 미팅, 회의실 이용 등 다양한 기능 제공

→ 노션의 한계를 넘고 구글 캘린더의 장점을 합치기 위한 연동 필요


But, 기존의 연동 방법 = 노션에 구글캘린더를 임베드 하는 방식

<기존 연동 방식의 단점>

  1. 구글캘린더에서 업데이트한 일정이 노션에 동기화 되지만, 수동 새로고침 필요
  2. 노션에서 구글캘린더에 새로운 일정 추가 불가

⇒ 단순히 노션에서 구글캘린더를 보는 정도의 연동 수준

⇒ Notion API를 사용하여 자동화 시킬 경우 쌍방향 동기화가 가능!!


20220811141355589.jpeg


따라서, Notion API 기능을 사용하여

  • 다른 소프트웨어나 서비스를 노션에 블록/데이터베이스/페이지 등에 연결
  • 자동으로 노션 데이터베이스를 통해 작업 항목의 상태 변화를 파악, 알림 등
  • 다른 서비스와 상호 연결하여 다양한 기능을 수행

Notion API 장점 : 사용하는 모든 도구에 대해 Notion을 중추 신경계로 만들어

다른 앱과 자동으로 업데이트하고, 작업을 수행, 정보의 일관성을 유지

→ 효율적으로 작업 진행!


2.Notion API가 무엇인지?

Notion API 사용 → 노션을 코드로 접근해서 CMS 혹은 데이터베이스로 활용 가능


Notion API의 중요 기능 2가지

1) OAuth로 타사 플랫폼에서 직접 통합( 다른 앱과 정보 교환)

  • 노션에서 파트너십을 체결한 Zapier, Typeform 등의 플랫폼 활용
  • OAuth를 통해 Notion 파트너 플랫폼에서 오픈 API를 워크스페이스에 바로 통합 가능
  • example
    • Zapier의 통합 - Google Sheets, Slack등과의 연결 지원
    • Typeform의 양식 응답 통합 - 설문, 정보 수집 입력 화면과 연동, 설문 결과를 노션 DB로 연동

2) Automate actions (작업을 자동화)

  • 본인 워크스페이스 내에서 작업을 자동화할 수 있다.
  • Notion API를 사용하여 반복 작업을 작업이 완료되면 다시 생성 및 다시 예약하는 등
  • ex) 매년 다음 생일을 자동 업데이트

What you can do with Notion API?

  • 노션 하나로 관리가 쉽지 않았던 뉴스, 글 수집, 구글 태스크 등을 스마트하게 자동 수집 및 관리 가능
    • ex) 매일 아침 9시, 뉴스 크롤링한 정보를 노션 DB 형식으로 자동 업로드
    • 콘텐츠를 소셜 미디어, 블로그 등 웹사이트에 자동적으로 게시

3.Notion API Reference

API에서 사용되는 각 엔드포인트 및 객체 유형에 대한 정보는 Notion 개발자 Reference 문서를 통해 찾을 수 있습니다. https://developers.notion.com/reference/intro

  • 모든 API 요청을 보내는 기본 URL = https://api.notion.com
  • 페이지 및 데이터베이스에 대해 RESTful 규칙을 따르며 Get, Post, Patch, Delete 요청을 통해 작업 수행
  • 요청은 JavaScript SDK 및 cURL을 사용하여 표시
  • Notion SDK) 다른 언어나 라이브러리를 선택 하여 HTTP 요청 생성 가능

[Grocery Test Database]

Untitled

  • 데이터베이스 조회 : GET https://api.notion.com /v1/databases/ {database_id} 요청으로 지정된 ID의 DB 객체를 검색
{
  "object": "database",
  "properties": {
    "Grocery item": {
      "id": "fy:{",
      "type": "title",
      "title": {}  ->  Title(제목) : DB에서 title 타입을 가진 단 하나의 속성
    },
    "Price": {
      "id": "dia[",
      "type": "number",
      "number": {
        "format": "dollar" -> number 특정 속성에 추가 구성 가능 
      }
    },
    "Last ordered": {
      "id": "]\\R[",
      "type": "date",
      "date": {}
    },
  }
  // remaining details omitted
}
  • 데이터베이스에 페이지 생성 : 지정된 데이터베이스의 자식으로 새 페이지(항목)을 생성 → cURL방식으로 페이지 생성 예제 POST https://api.notion.com/v1/pages
curl -X POST https://api.notion.com/v1/pages \
  -H 'Authorization: secret_Jueo9fvwkT7EuuMpa5qwubYzI0vsBJM2taTIW7PpVoU' \
  -H "Content-Type: application/json" \
  -H "Notion-Version: 2022-06-28" \
  --data '{
      "parent": { "type": "database_id", "database_id": "da3e736306e4495b99dcc51971274d3a"},
      "properties": {
      "Grocery item": {
        "type": "title",
        "title": [{ "type": "text", "text": { "content": "방울토마토" } }]
      },
      "Price": {
        "type": "number",
        "number": 1.49
      },
      "Last ordered": {
        "type": "date",
        "date": { "start": "2022-08-09" }
      }
    }
  }'

Untitled

새로운 방울토마토 페이지 생성 확인

Untitled


4.간단한 데모

1)Notion API 사용 준비

Notion DB와 상호 작용하려면 Notion 통합을 생성하고 API 시크릿 토큰 정보 필요

  1. API용 유저 토큰 생성하기
  • 시크릿의 ‘프라이빗 API 통합 토큰’ 정보를 복사 후 저장하기 → 노션 API를 사용할 수 있는 중요한 KEY값
  1. 새로운 페이지 추가(database 표)
  • database_id = 페이지의 URL 중 notion.so/?v= 구문 앞에 있는 내용이 데이터베이스의 고유 ID 값
  • 통합과 DB 공유 ) API를 통해 해당 페이지에 접근하려면 사용자가 생성한 통합 API을 초대하여 페이지에 접근 허용을 설정

  1. Postman을 통해 노션 API가 정상적으로 동작하는지 조회

Untitled


2)데모 시나리오

from notion.client import NotionClient
from notion.block import TodoBlock, PageBlock, TextBlock, CodeBlock, VideoBlock

import warnings
warnings.filterwarnings(action='ignore')

# Obtain the `token_v2` value by inspecting your browser cookies on a logged-in (non-guest) session on Notion.so
client = NotionClient(token_v2="9e1277377147e8156ee3cd5320ff15382ed7f06acf52603306bc82179a0dd869cdf9c48d33c37fba73f18c0de2912bf1341ce2299bf7898c80fff02892dbae64a38d8b9d8f6b00237b7677e9603f") #시크릿 토큰 값 

# Replace this URL with the URL of the page you want to edit
page = client.get_block("https://www.notion.so/Hello-Notion-Task-39928068200848a4bfb4b8f827098bbe")  #notion page url

print("페이지 제목 확인: ", page.title)

answer = "예"
text = page.children.add_new(TextBlock)
text.title = "파이썬 API VideoBlock 활용 참고 영상 자동 추가 반복하기"

while answer =="예":
    video = page.children.add_new(VideoBlock) #VideoBlock 추가
    video.width = 200
    video.height = 300
    input_url = input("추가 할 비디오의 URL 주소를 입력하세요.")
    video.set_source_url(input_url)
    answer = input("추가로 비디오 블록을 생성할건가요?")
    
print("자동 완성 완료")

Untitled


5.한계점

  • 속도 제한

    노션 API는 초당 3개의 요청만을 처리할 수 있다.

    따라서 프로젝트 규모가 커질 경우 API 앞에 캐싱 레이어를 추가하는 것을 고려해야 할 경우 발생 가능 (+보류 중인 요청에 대해 여러 개의 큐 사용하는 방법)

  • 크기 제한

    특정 매개변수의 크기와 요청의 하위 깊이 제한

각 속성에 대한 Size Limit는 공식 문서 참고 https://developers.notion.com/reference/request-limits

⇒ 앞으로 수요와 안정성의 균형을 위해 조정할 계획

0개의 댓글