우리는 노션의 데이터베이스를 통해서, 사진의 예시처럼 위키를 만들수도 있고, 가계부를 만들수도있고, 혹은 회사에서 아카이빙, 프로젝트등을 위한 데이터베이스를 만들기도 한다.
이번에는 노션API를 사용해서 파이썬으로 직접 불러오는 것을 해보려고 한다.
먼저 링크에 접속해서 API 토큰을 발급을 받아보자
아래 사진에서 "새 API통합 만들기"를 클릭해서 API 토큰 번호를 저장하자.

우리가 사용하는 노션DB가 있는 페이지에 접속후 오른쪽 상단을 보면 점세개가 있다. 거기를 클릭하면 아래와같이 창이 나오고, 여기서 1번(Add connections)을 눌러서 발급받은 토큰의 명칭을 선택하면 2번처럼 연결을 시킬수 있게된다.
데이터베이스마다 고유의 값을 가지고 있는데 이 값이 api를 호출할떄 필요하므로 아래 과정을 통해서 값을 얻자.
Copy link to view를 클릭하면 자동으로 데이터베이스 고유아이디가 저장이된다.
세부적인 RESPONSE는 링크에서 참고하면 좋다.
import request, json
import pandas as pd
def readDatabase(databaseId, headers):
# DataBase 조회 함수
# endPoint
readUrl = f"https://api.notion.com/v1/databases/{databaseId}/query"
# api request
res = requests.post(readUrl, headers=headers)
data = res.json()
return data,res
먼저 위의 함수가 조회를 위해서 사용할 함수의 형태이다.
함수에는 databaseId값과 header값들을 인자로 넣어줄 것이다.
# 데이터베이스 고유값
databaseId = "{Your databaseId}"
# 토큰값
token = "{Your Notion Token}"
# 헤더
headers = {
"Authorization":"Bearer "+ token,
"Notion-Version":"2022-06-28"
}
# DB조회 요청
data,res = readDatabase(databaseId, headers)
이렇게 하면 data는 우리에게 익숙한 형태의 api조회결과가 나올것이고 res에서는 <Response [200]>가 나올것이다.
하지만, 노션 api의 경우 한번에 최대 100개의 행을 불러오는데 만약에 100개 이상의 행을 가진경우는 pagination을 통해서 불러올 수 있는데 간단한게 아래에 전체 코드만 공개를 하고 다음 편에 이어서 설명과함께 작성하려고한다.
def query_notion_with_pagination():
has_more = True
next_cursor = None
full_data = []
databaseId = "{Your database id}"
token = "{Your notion token}"
headers = {
"Authorization": "Bearer " + token,
"Notion-Version": "2022-06-28"
}
readUrl = f"https://api.notion.com/v1/databases/{databaseId_}/query"
While has_more:
if next_cursor:
response = requests.post(readUrl,
headers = headers,
json = {'start_cursor':next_cursor})
else:
response = requests.post(readUrl,
headers = headers)
data = response.json()
full_data.extend(data['results']
has_more = data['has_more']
next_cursor = data.get('next_cursor')
return full_data