본문 바로가기
Data

Notion API 연동 및 사용 설명서 - 1.기초~연동하고 데이터 뽑아보기까지 (python으로)

by Hagrid 2024. 11. 7.
반응형

유형이란 ?

  • Private Integrations: ✅
    • These are intended for personal use or for use within a single workspace. They are not shared with other users or workspaces and require manual setup for each workspace you want to connect.
    • Private Integrations: 개인용 또는 단일 워크스페이스 내에서 사용하기 위한 것입니다. 다른 사용자나 워크스페이스와 공유되지 않으며 연결하려는 각 워크스페이스에 대해 수동으로 설정해야 합니다.
  • Public Integrations:
    • These are designed to be used by multiple users across different workspaces. They need to be submitted for approval by Notion and, once approved, can be shared and used by others.
    • Public Integrations: 여러 워크스페이스에서 여러 사용자가 사용할 수 있도록 설계되었습니다. Notion의 승인을 받기 위해 제출해야 하며, 승인을 받으면 다른 사람들이 공유하고 사용할 수 있습니다.

Private Integrations

개인 사용 또는 단일 워크스페이스용 : Private Integration은 주로 개인 프로젝트나 특정 워크스페이스 내에서만 사용하기 위해 만들어집니다. 예를 들어, 개인 노트 관리 자동화나 특정 팀의 워크플로우 개선을 위한 도구로 활용할 수 있습니다.

설정 및 사용

  • Private Integration을 설정하려면 Notion의 API 키를 생성하고, 이를 사용하여 API 호출을 통해 데이터를 읽고 쓸 수 있습니다.
  • 이 통합은 다른 사용자나 워크스페이스와 공유되지 않으며, 설정한 워크스페이스 내에서만 작동합니다.
  • 각 워크스페이스마다 별도로 설정해야 하므로, 여러 워크스페이스에서 사용하려면 각각의 워크스페이스에 대해 수동으로 설정해야 합니다.

Public Integrations

다수의 사용자 및 여러 워크스페이스용 : Public Integration은 여러 사용자와 다양한 워크스페이스에서 사용하기 위해 설계된 통합입니다. 예를 들어, 타사 애플리케이션이 Notion과 연동되어 다양한 사용자에게 기능을 제공할 때 사용됩니다.

승인 및 배포

  • Public Integration을 만들려면 Notion의 승인을 받아야 합니다. 이는 통합이 안전하고 Notion의 정책에 부합하는지 확인하기 위한 절차입니다.
  • 승인이 완료되면, 이 통합은 Notion 사용자들이 쉽게 설치하고 사용할 수 있도록 공개됩니다. 앱 마켓플레이스에 등록되어 여러 사용자가 접근할 수 있게 됩니다.

So,

Private Integration은 개인적이거나 특정 워크스페이스에서만 사용되며, 설정이 간단하지만 공유 기능은 제한적입니다.

Public Integration은 여러 사용자와 워크스페이스에 걸쳐 사용되며, 공개적으로 배포되기 위해 Notion의 승인이 필요합니다. 이는 더 많은 사용자에게 기능을 제공할 수 있는 장점이 있습니다.

  • 추후 둘 다 변경가능 합니다.

Public Integrations 입력칸 부분별 설명

  1. 유형 : 퍼블릭 통합으로 전환할 경우, 추가 정보 입력이 필요할 수 있습니다.
  2. 회사 이름 : 통합을 제공하는 회사의 이름을 입력해야 합니다.
  3. 웹사이트 : 회사 또는 통합과 관련된 웹사이트 URL을 입력합니다.
  4. 태그라인 : 통합의 간단한 설명이나 슬로건을 입력하여 통합의 목적이나 기능을 간단히 소개합니다.
  5. 개인정보 보호정책 URL : 통합 페이지와 인증 화면에 연결될 개인정보 보호정책 URL을 입력해야 합니다.
  6. 이용약관 URL : 통합 페이지와 인증 화면에 연결될 이용약관 URL을 입력합니다.
  7. 이메일 : API 통합 개발자의 이메일 주소를 입력합니다.
  8. 로고 : 통합의 시각적 식별을 위해 로고 이미지를 업로드해야 합니다.
  9. OAuth 도메인과 URI: OAuth 인증을 위한 도메인과 URI를 설정합니다. 사용자가 Notion 인증 후 리다이렉트될 경로를 지정하며, 해당 경로에는 인증 코드가 포함됩니다. 이 경로는 프로토콜이 필요하고, URL 프래그먼트, 상대 경로, 와일드카드를 포함할 수 없으며, 공개 IP 주소를 사용할 수 없습니다.
  10. 리다이렉션 URI: Notion OAuth 플로우에서 사용자가 인증 후 리다이렉트될 경로를 설정합니다. 이 경로는 인증 코드가 포함되어 있으며, 토큰 요청 시 반드시 포함되어야 합니다.
  11. Notion 템플릿 URL (선택사항):통합과 함께 제공할 Notion 템플릿의 URL을 입력할 수 있습니다. 이는 사용자가 통합을 시작할 때 유용한 템플릿을 제공하기 위한 선택사항입니다.

OAuth(오스) 인증

 ✅ OAuth는 특히 소셜 미디어 계정으로 로그인하거나, 타사 애플리케이션이 사용자의 데이터를 사용하고자 할 때 많이 사용됩니다.

예를 들어, "구글로 로그인" 버튼을 눌러서 다른 웹사이트나 애플리케이션에 로그인할 때 OAuth가 사용됩니다.

 

제3자 애플리케이션이 사용자 데이터를 안전하게 접근할 수 있도록 허용하는 표준 프로토콜입니다. OAuth는 사용자가 자신의 자격 증명(아이디와 비밀번호)을 직접 제공하지 않고, 대신 토큰을 사용하여 애플리케이션이 특정 자원(예: Google Drive 파일, Facebook 프로필 정보 등)에 접근할 수 있게 합니다.

  1. 권한 위임: 사용자가 자신의 비밀번호를 노출하지 않고도 다른 애플리케이션에 특정 자원에 대한 접근 권한을 부여할 수 있습니다.
  2. 보안: 애플리케이션이 사용자의 자격 증명을 직접 처리하지 않으므로, 사용자 정보가 더욱 안전하게 보호됩니다.

OAuth의 기본 작동 방식

  1. 사용자 승인: 사용자는 애플리케이션이 자신의 자원에 접근할 수 있는 권한을 부여하기 위해 OAuth를 통해 로그인합니다.
  2. 인증 코드 발급: 사용자가 로그인하고 권한을 부여하면, 애플리케이션은 인증 코드를 받습니다.
  3. 액세스 토큰 교환: 애플리케이션은 이 인증 코드를 사용해 액세스 토큰을 발급받습니다. 이 액세스 토큰은 이후 자원 서버에서 사용자 데이터를 요청할 때 사용됩니다.
  4. 데이터 접근: 애플리케이션은 이 액세스 토큰을 사용해 사용자의 자원에 접근할 수 있습니다. 이때 애플리케이션은 사용자의 자격 증명 없이도 자원에 접근할 수 있습니다.
  • OAuth를 사용하면 Notion 사용자는 자신의 Notion 계정 자격 증명(아이디와 비밀번호)을 외부 애플리케이션에 직접 제공할 필요가 없습니다. 대신, Notion API를 사용하는 애플리케이션은 OAuth 프로세스를 통해 안전하게 인증을 받고, 사용자가 허용한 범위 내에서만 Notion 데이터에 접근할 수 있습니다.
  • OAuth를 사용하면 애플리케이션은 민감한 사용자 자격 증명 대신, 상대적으로 덜 민감한 토큰을 사용해 API에 접근합니다. 이 토큰은 만료되거나 철회될 수 있으며, 특정 범위(scope) 내에서만 유효하므로, 사용자의 데이터를 더 안전하게 보호할 수 있습니다.

Notion API를 사용하는 애플리케이션이 있다고 가정할때, 이 애플리케이션은 여러분의 Notion 페이지에 접근해서 데이터를 가져오거나 업데이트할 수 있어야 합니다.

그러나 여러분이 이 애플리케이션에 직접 Notion 로그인 자격 증명을 주면, 애플리케이션은 여러분의 모든 Notion 데이터에 접근할 수 있습니다. 이 상황은 매우 위험할 수 있습니다.

대신, OAuth 인증을 사용하면 애플리케이션은 여러분이 허용한 특정 페이지나 데이터베이스에만 접근할 수 있습니다. 여러분은 어떤 데이터에 접근할 수 있는지 제어할 수 있으며, 언제든지 접근을 철회할 수도 있습니다.

토큰발급

  • 파이썬에서 노션 데이터베이스에 접근하려면 프라이빗 API 통합 토큰과 데이터베이스 ID가 필요합니다

프라이빗 API 통합 토큰

순서

  • 왼쪽 이미지와 같은 노션 좌측에 위치한 메뉴바에서 설정과 멤버를 누른다.
  • 설정과 멤버를 누르면 나오는 창의 좌측에서 API 통합을 누른다.
  • 하단에 내 API 통합 개발하기를 눌러 새 API 통합 만들기를 통해 프라이빗 API 통합 토큰을 생성한다.

 

3.1 프라이빗 API 통합 토큰 권한 부여

  • 데이터베이스가 존재하는 노션 페이지의 상단에 존재하는 공유를 누른 뒤, 초대를 누르면 사용자 외에 API 통합 선택하기에 방금 생성한 API 통합 토큰이 있을 것이다. 해당 통합 토큰을 누르고 초대를 다시 눌러주면 해당 토큰을 사용하여 페이지에 접근할 수 있다.
  • 3.2 페이지 내 데이터베이스에 마우스를 올려두면 좌측에 여섯개의 점으로 이루어진 메뉴바가 생긴다. 해당 바를 눌러 링크 복사를 누른 뒤, 링크를 확인하면 아래와 같은 형태를 가질 것이다
  • 참고로, 1bbba5e090a5445eaf80ae0dee5aa 는 page_id를 의미한다
  • 또한  링크에서 /와 ? 사이에 위치한 639645e464c64cb0b7dfc6e1651cd이 해당 데이터베이스 ID를 나타낸다.

DATABASE 긁어오기

  • 예시코드
import requests
import json
NOTION_API = config["NOTION_API"]

# 노션 API 토큰과 데이터베이스 ID 설정

DATABASE_ID = '12dd26579f5f4566b122f34e81171444'
# API 요청 헤더 설정
notion_api_key = NOTION_API

headers = {
    "Authorization": f"Bearer {notion_api_key}",
    "Content-Type": "application/json",
    "Notion-Version": "2022-02-22"
}

# 데이터베이스 쿼리 URL
url = f"https://api.notion.com/v1/databases/{DATABASE_ID}/query"

# POST 요청 보내기
response = requests.post(url, headers=headers)

# 응답 확인
if response.status_code == 200:
    data = response.json()
    pages = data["results"]
    
    # 각 페이지 정보 출력
    for page in pages:
        page_id = page["id"]
        page_url = page["url"]
        
        # 페이지 속성 가져오기 (예: 제목)
        properties = page["properties"]
        title = properties.get("Name", {}).get("title", [{}])[0].get("plain_text", "No Title")
        
        print(f"Page ID: {page_id}")
        print(f"Title: {title}")
        print(f"URL: {page_url}")
        print("---")
else:
    print(f"Error: {response.status_code}")
    print(response.text)

 

  • json dictionary 예시
{'object': 'page',
'id': '50d28eee-7e3a-4109-8b90-d23a12064ea2',
'created_time': '2024-06-24T12:49:00.000Z',
'last_edited_time': '2024-06-24T12:58:00.000Z',
'created_by': {'object': 'user',
'id': 'ff9bbad3-8fe8-46b0-8f49-00000'},
'last_edited_by': {'object': 'user',
'id': 'ff9bbad3-8fe8-46b0-8f49-00000'},
'cover': None,
'icon': {'type': 'emoji', 'emoji': '🧩'},
'parent': {'type': 'database_id',
'database_id': '12dd2657-9f5f-4566-b122-00000000'},
'archived': False,
'in_trash': False,
'properties': {'태그': {'id': 'p%7Ben',
'type': 'multi_select',
'multi_select': []},
'이름': {'id': 'title',
'type': 'title',
'title': [{'type': 'text',
'text': {'content': '00000츠 수익화 프로그램 ', 'link': None},
'annotations': {'bold': False,
'italic': False,
'strikethrough': False,
'underline': False,
'code': False,
'color': 'default'},
'plain_text': '000 큐레이터 = 수익화 프로그램 ',
'href': None}]}},
'url': 'https://www.notion.so/50d28eee7e3a410',
'public_url': None}

반응형

댓글