notion-database
라는 라이브러리에 대한 사용기 및 활용법에 대해 정리해볼까 합니다.새 API 통합
을 클릭한 후 필요 내용들을 채우고 저장
을 눌러줍니다.프라이빗 API 통합 시크릿
API 키를 발급 받을 수 있습니다....
→ 연결
→ 위에서 생성한 API 이름 선택
차례대로 설정하면 해당 페이지와 노션 API 연동이 활성화됩니다.설치
pip install notion-database pendulum
from notion_database.search import Search
from notion_database.const.query import Direction, Timestamp
NOTION_API_KEY = ""
def list_databases(notion_api_key):
S = Search(integrations_token=notion_api_key)
S.search_database(query="",
sort={"direction": Direction.descending,
"timestamp": Timestamp.last_edited_time},
root_only=False)
return S.result
db = list_databases(NOTION_API_KEY)
for i in db:
print(i['id'], print(i['title'][0]['plain_text']))
여러가지 속성들을 가진 새로운 데이터베이스를 생성하기 위해서는 아래 세 가지 정보가 필요합니다.
1) NOTION API KEY
2) 데이터베이스가 생성될 페이지의 ID
3) 데이터베이스가 가질 속성(열)들
페이지 ID는 해당 페이지의 URL에서 확인할 수 있습니다.
아래 예시 코드에서는 이름, 선택지, 다중 옵션, 번호, 실행 여부, 실행 날짜
이렇게 다섯가지 속성을 가진 데이터베이스를 생성합니다.
'속성의 종류' : '속성의 이름'
이런식의 쌍으로 딕셔너리(dictionary)를 작성하게 되면 함수 내부에서 속성의 종류를 매칭시켜 그에 맞는 속성을 생성하도록 메소드를 호출합니다.
from notion_database.database import Database
from notion_database.properties import Properties
import pendulum
NOTION_API_KEY = ""
PAGE_ID = "1990f478367a80e4a14fc0cba53dfb05"
# "속성의 종류 : 속성의 이름" 이런식으로 작성
PROPERTY_DICT = dict(
title = "이름",
select = "선택지",
multi_select = '다중 옵션',
number = '번호',
checkbox = '실행 여부',
date = '실행 날짜'
)
DATABASE_NAME = 'VELOG NOTION DATABASE'
def create_database(notion_api_key, parent_page_id, title, properties, is_inline=False):
D = Database(integrations_token=notion_api_key)
PROPERTY = Properties()
for prop_type, prop_name in properties.items():
if prop_type == 'title':
PROPERTY.set_title(prop_name)
elif prop_type == 'rich_text':
PROPERTY.set_rich_text(prop_name)
elif prop_type == 'number':
PROPERTY.set_number(prop_name)
elif prop_type == 'select':
PROPERTY.set_select(prop_name)
elif prop_type == 'multi_select':
PROPERTY.set_multi_select(prop_name)
elif prop_type == 'checkbox':
PROPERTY.set_checkbox(prop_name)
elif prop_type == 'url':
PROPERTY.set_url(prop_name)
elif prop_type == 'email':
PROPERTY.set_email(prop_name)
elif prop_type == 'phone_number':
PROPERTY.set_phone_number(prop_name)
elif prop_type == 'date':
PROPERTY.set_date(prop_name)
elif prop_type == 'files':
PROPERTY.set_files(prop_name)
D.create_database(page_id=parent_page_id, title=title, properties=PROPERTY, is_inline=is_inline)
return D.result
new_db = create_database(NOTION_API_KEY, PAGE_ID, DATABASE_NAME, PROPERTY_DICT, is_inline=True)
print(new_db)
...
→ Default view 보기 링크 복사
하여 얻은 링크에서 확인할 수 있습니다.from notion_database.database import Database
from pprint import pprint
def get_database_properties(notion_api_key, database_id):
D = Database(integrations_token=notion_api_key)
D.retrieve_database(database_id=database_id)
return D.result
DATABASE_ID = '1b20f478367a8108b606dd3e1cc3b2c7'
res = get_database_properties(NOTION_API_KEY, DATABASE_ID)
pprint(res)
'속성의 이름' : '데이터'
형식으로 작성되어야 하며, 해당 속성에 넣을 데이터가 없다면 빈 값으로 작성해주면 됩니다.from notion_database.page import Page
from datetime import datetime
properties = {
'이름' : "VELOG",
'선택지' : "호주",
'다중 옵션' : ['멜버른', '시드니', '캠버라'],
'번호' : 100,
'실행 여부' : True,
'실행 날짜' : datetime.now().strftime("%Y-%m-%d %H:%M:%S") + '+0900'
}
DATABASE_ID = '1b20f478367a8108b606dd3e1cc3b2c7'
def create_database_page(notion_api_key, database_id, properties, child_properties=False):
PROPERTY = Properties()
res = get_database_properties(notion_api_key, database_id)
for k, v in res['properties'].items():
property_type = v['type']
if k in properties:
getattr(PROPERTY, f'set_{property_type}')(k, properties[k])
P = Page(integrations_token=notion_api_key)
P.create_page(database_id=database_id, properties=PROPERTY)
return P.result
create_database_page(NOTION_API_KEY, DATABASE_ID, properties)
properties
의 내용과 동일하게 Notion 데이터베이스에 행이 생성된 것을 확인할 수 있습니다.# 수정할 데이터베이스 페이지의 ID
PAGE_ID = ''
def update_database_properties(notion_api_key, page_id):
P = Page(integrations_token=notion_api_key)
"""
속성별 업데이트 값 명시
PROPERTY.[속성 메소드]('속성 이름', '업데이트 데이터') 포맷으로 작성합니다.
아래 예시는 아래와 같이 업데이트 합니다
- 이름 -> Hyunsoo로 변경
- 번호 -> 200으로 변경
"""
PROPERTY.set_title("이름", "Hyunsoo")
PROPERTY.set_number('번호;', 200)
P.update_page(page_id=page_id, properties=PROPERTY)
return P.result
update_database_properties(NOTION_API_KEY, PAGE_ID)
def archive_database_properties(notion_api_key, page_id):
P = Page(integrations_token=notion_api_key)
P.archive_page(page_id=page_id, archived=True)
return P.result
archive_database_properties(NOTION_API_KEY, PAGE_ID)
def list_pages_in_database(notion_api_key, database_id):
D = Database(integrations_token=notion_api_key)
D.find_all_page(database_id=database_id)
return D.result
list_pages_in_database(NOTION_API_KEY, DATABASE_ID)
Children()
객체에 정의해주는 형식으로 정보를 만들어 전달해줄 수 있습니다.# 1) children properties 설정
def set_children_properties():
C = Children()
"""
Docs 기준 코드 참조
"""
# 단순 문단
C.set_paragraph("set_paragraph")
C.set_paragraph("set_paragraph", color=clr.BLUE)
# 헤더
C.set_heading_1("set_heading_1")
C.set_heading_2("set_heading_2")
C.set_heading_3("set_heading_3")
C.set_heading_1("set_heading_1", color=clr.BLUE)
C.set_heading_2("set_heading_2", color=clr.BLUE_BACKGROUND)
C.set_heading_3("set_heading_3", color=clr.GREEN)
# 콜아웃
C.set_callout("set_callout")
C.set_callout("set_callout",color=clr.RED_BACKGROUND)
# 인용문
C.set_quote("set_quote")
C.set_quote("set_quote",color=clr.RED)
# 글머리 기호 구문
C.set_bulleted_list_item("set_bulleted_list_item")
C.set_bulleted_list_item("set_bulleted_list_item", color=clr.BROWN)
# 숫자 구문
C.set_numbered_list_item("first set_numbered_list_item")
C.set_numbered_list_item("second set_numbered_list_item", color=clr.BROWN)
# to do list
C.set_to_do("set_to_do", checked=True)
C.set_to_do("set_to_do", checked=False, color=clr.RED)
# 토글
C.set_toggle("set_toggle", children_text="WOW!", color=clr.BLUE)
# 코드 블럭
C.set_code("set_code")
C.set_code("const a = 1", lang="javascript")
C.set_code("print(\"hello world!\")", lang='python')
C.set_embed("https://linktr.ee/hyunsoo.it")
C.set_external_image("https://github.githubassets.com/images/modules/logos_page/Octocat.png")
C.set_external_video("http://download.blender.org/peach/trailer/trailer_480p.mov")
C.set_external_file("https://github.com/microsoft/ML-For-Beginners/raw/main/pdf/readme.pdf")
C.set_external_pdf("https://github.com/microsoft/ML-For-Beginners/blob/main/pdf/readme.pdf")
C.set_bookmark("https://linktr.ee/hyunsoo.it")
C.set_equation("e=mc^2")
C.set_divider()
C.set_table_of_contents()
C.set_breadcrumb()
return C
properties = {
'이름' : "VELOG",
'선택지' : "호주",
'다중 옵션' : ['멜버른', '시드니', '캠버라'],
'번호' : 100,
'실행 여부' : True,
'실행 날짜' : datetime.now().strftime("%Y-%m-%d %H:%M:%S") + '+0900'
}
DATABASE_ID = '1b20f478367a8108b606dd3e1cc3b2c7'
C = set_children_properties()
# 4) 에서 생성한 함수 활용
create_database_page(
notion_api_key = NOTION_API_KEY,
database_id = DATABASE_ID,
properties = properties,
child_properties = C)
notion-database
라이브러리가 사용되었습니다.👍