앞서 페이지가 잘 연결되었는지 확인해보았습니다. 본페이지에서 조금 더 구체적으로 알아보고 요청하는 코드를 완성시켜 보겠습니다. 파이썬이 처음이신 분들도 그냥 따라와주세요! 관련된 모든 기초문법들과 필요한 지식들은 연결시켜드릴겁니다. 연습은 Google Colab에서 간편하게 진행 할 수 있습니다.
노션의 블럭이란?
노션의 블럭은 페이지를 구성하는 가장 기본적인 단위입니다. 텍스트, 이미지, 표, 체크리스트 등 모든 콘텐츠는 각각 하나의 블럭으로 취급되며, 이러한 블럭들을 조합하여 원하는 형태의 페이지를 만들 수 있습니다. 블럭은 서로 독립적으로 작동하면서도 연결될 수 있어 자유로운 페이지 구성이 가능합니다.
노션블럭 구조 확인
위에서 두 개의 블럭을 다시 작성했습니다. 그리고 노션블럭을 확인하는 파이썬 코드로 API에 데이터를 요청하고 결과를 받았습니다. 그결과는 아래와 같습니다.
[
# 블럭정보시작
##########################################################################
{'object': 'block',
'id': '1748844c-10b7-8000-9c09-d13629b2751e',
'parent': {'type': 'page_id',
'page_id': '1658844c-10b7-807b-8391-d5a11e7a4dff'},
'created_time': '2025-01-07T07:28:00.000Z',
'last_edited_time': '2025-01-07T07:28:00.000Z',
'created_by': {'object': 'user',
'id': '153d872b-594c-81b6-8067-0002f2a57567'},
'last_edited_by': {'object': 'user',
'id': '153d872b-594c-81b6-8067-0002f2a57567'},
'has_children': False,
'archived': False,
'in_trash': False,
'type': 'paragraph',
'paragraph': {'rich_text': [{'type': 'text',
'text': {'content': '안녕하세요 테스트중입니다.', 'link': None},
'annotations': {'bold': False,
'italic': False,
'strikethrough': False,
'underline': False,
'code': False,
'color': 'default'},
'plain_text': '안녕하세요 테스트중입니다.',
'href': None}],
'color': 'default'}},
##########################################################################
{'object': 'block',
'id': '1748844c-10b7-801b-80c2-c85cf0c95f94',
'parent': {'type': 'page_id',
'page_id': '1658844c-10b7-807b-8391-d5a11e7a4dff'},
'created_time': '2025-01-07T07:54:00.000Z',
'last_edited_time': '2025-01-07T07:54:00.000Z',
'created_by': {'object': 'user',
'id': '153d872b-594c-81b6-8067-0002f2a57567'},
'last_edited_by': {'object': 'user',
'id': '153d872b-594c-81b6-8067-0002f2a57567'},
'has_children': False,
'archived': False,
'in_trash': False,
'type': 'paragraph',
'paragraph': {'rich_text': [{'type': 'text',
'text': {'content': '두번째 블럭', 'link': None},
'annotations': {'bold': False,
'italic': False,
'strikethrough': False,
'underline': False,
'code': False,
'color': 'default'},
'plain_text': '두번째 블럭',
'href': None}],
'color': 'default'}}
##########################################################################
]
Plain Text
복사
블럭의 구조를 좀 더 자세히 살펴보면 다음과 같은 주요 요소들로 구성되어 있습니다
•
object: 블럭의 유형을 나타내며, 여기서는 'block'으로 표시됩니다.
•
id: 각 블럭의 고유 식별자로, 블럭을 수정하거나 참조할 때 사용됩니다.
•
parent: 해당 블럭이 속한 상위 페이지나 블럭의 정보를 담고 있습니다.
•
created_time과 last_edited_time: 블럭의 생성 시간과 마지막 수정 시간을 UTC 형식으로 표시합니다.(UTC는 세계 협정시로 한국시간보다 9시간 느립니다.)
•
created_by와 last_edited_by: 블럭을 생성하고 수정한 사용자의 정보를 포함합니다.
•
has_children: 해당 블럭이 하위 블럭을 가지고 있는지 여부를 나타냅니다.
•
type: 블럭의 구체적인 유형(예: paragraph, heading, list 등)을 지정합니다.
•
rich_text: 실제 텍스트 내용과 함께 텍스트의 스타일링(볼드, 이탤릭, 색상 등) 정보를 포함합니다.
이러한 구조를 이해하고 활용하면, API를 통해 노션 페이지의 내용을 프로그래밍 방식으로 생성, 수정, 삭제할 수 있습니다.
노션블럭 현황 요청
1. 라이브러리
Requests는 파이썬에서 HTTP 요청을 보내는 라이브러리입니다. 노션 페이지의 API에 HTTP로 데이터를 요청할 때 사용됩니다.
import requests # requests페이지참고
Python
복사
HTTP 요청은 인터넷에서 웹 브라우저나 프로그램이 웹 서버와 통신하는 기본적인 방법입니다. 예를 들어, 우리가 웹 브라우저에서 웹사이트에 접속할 때마다 HTTP 요청이 발생합니다. 이는 마치 가게에서 물건을 주문하는 것과 비슷한데, 손님(클라이언트)이 점원(서버)에게 특정 상품(데이터)을 요청하는 것과 같습니다.
HTTP 요청이 발생하면, 클라이언트는 서버에게 "이런 정보가 필요해요" 또는 "이 작업을 해주세요"라는 메시지를 보내게 됩니다. 서버는 이 요청을 받아서 처리한 후, 적절한 응답을 다시 클라이언트에게 보냅니다. 이러한 요청-응답 과정을 통해 웹페이지 열기, 데이터 저장하기, 정보 검색하기 등 다양한 웹 서비스가 가능해집니다.
노션 API를 사용할 때도 이러한 HTTP 요청을 통해 노션 서버와 통신하게 되며, 이때 Requests 라이브러리를 사용하면 파이썬에서 이러한 통신을 쉽게 구현할 수 있습니다.
2. API토큰 정의
API 생성 했을때의 토큰을 복사해서 notionApiKey에 텍스트형태로 입력합니다.
import requests # requests페이지참고
notionApiKey = ' '
# 파이썬 기본문법 변수페이지를 참고해주세요!!! notionApiKey = ' ' 이부분 이해가 필요합니다.
Python
복사
3. headers작성
Headers는 HTTP 요청에서 추가 정보를 전달하는 메타데이터입니다. API 요청 시 인증, 컨텐츠 타입, 버전 정보 등을 서버에 전달하는 역할을 합니다. 노션 API에서는 특히 Authorization(인증 토큰), Content-Type(데이터 형식), Notion-Version(API 버전)이 필수적인 헤더 정보입니다.
import requests # requests페이지참고
notionApiKey = ''
headers = {
"Authorization": f"Bearer {notionApiKey}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
Python
복사
4.notionPageId 세팅
notionPageId는 API를 통해 자동으로 제어할 페이지의 고유 ID입니다. API를 등록했던 페이지의 ID를 여기에 입력하면 됩니다.
import requests # requests페이지참고
notionApiKey = ''
headers = {
"Authorization": f"Bearer {notionApiKey}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
notionPageId = '' # 연결할 페이지 ID
url = f"https://api.notion.com/v1/blocks/{notionPageId}/children"
Python
복사
5. API에 요청
API 요청을 보내고 응답을 받는 코드입니다. requests.get() 메서드를 사용하여 지정된 URL로 GET 요청을 보내고, 이때 앞서 정의한 headers 정보를 함께 전달합니다. 이렇게 받은 응답은 response 변수에 저장됩니다.
API 요청 후 출력되는 응답 코드(Response Code)는 요청의 성공 여부와 상태를 나타냅니다. 가장 일반적인 응답 코드는 다음과 같습니다:
•
200: 성공 - 요청이 정상적으로 처리되었음을 의미합니다.
•
400: 잘못된 요청 - 요청 형식이 잘못되었거나 필수 파라미터가 누락된 경우입니다.
•
401: 인증 실패 - API 토큰이 잘못되었거나 만료된 경우입니다.
•
404: 찾을 수 없음 - 요청한 리소스(페이지 또는 블럭)가 존재하지 않는 경우입니다.
•
500: 서버 오류 - 노션 서버에서 내부적인 오류가 발생한 경우입니다.
따라서 response를 출력했을 때 <Response [200]>와 같이 표시되면, 이는 API 요청이 성공적으로 처리되었다는 의미입니다. 다른 코드가 출력된다면 위의 설명을 참고하여 문제를 해결할 수 있습니다.
import requests # requests페이지참고
notionApiKey = ''
headers = {
"Authorization": f"Bearer {notionApiKey}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
notionPageId = '' # 연결할 페이지 ID
url = f"https://api.notion.com/v1/blocks/{notionPageId}/children"
##################################################################
response = requests.get(url, headers=headers)
response # response.status_code는 코드만 출력가능함
Python
복사
6. API에 요청결과 출력
API 요청 후 받은 응답 데이터는 response.text를 통해 텍스트 형태로 확인할 수 있습니다. 이는 노션 API가 반환하는 모든 데이터를 문자열(string) 형태로 보여주며, JSON 형식으로 구조화된 응답 내용을 포함합니다.
이 텍스트 출력에는 페이지의 블럭 정보, 콘텐츠, 메타데이터 등이 포함되어 있어 API 응답의 전체 내용을 자세히 살펴볼 수 있습니다. 특히 디버깅이나 응답 데이터의 구조를 이해하는 데 유용합니다.
7. 함수로 만들기
이제 앞서 배운 내용들을 하나의 함수로 통합해보겠습니다. getNotionBlock 함수는 노션 페이지 ID를 입력받아 해당 페이지의 모든 블럭 정보를 반환합니다.
함수의 주요 구성요소를 살펴보면
1.
URL 생성: 입력받은 페이지 ID를 사용하여 API 요청 URL을 생성합니다. 이는 앞서 설명한 노션 API의 기본 URL 구조를 따릅니다.
2.
API 요청 및 응답 확인: requests.get()을 사용하여 API 요청을 보내고, status_code를 확인합니다. 응답 코드가 200이 아닐 경우(즉, 요청이 실패한 경우) 오류 메시지를 출력하고 빈 리스트를 반환합니다.
3.
데이터 추출: response.json()을 통해 JSON 형태의 응답을 파이썬 딕셔너리로 변환하고, get() 메서드를 사용하여 'results' 키의 값을 안전하게 추출합니다. 만약 'results' 키가 없다면 빈 리스트가 반환됩니다.
이렇게 만든 함수는 재사용이 가능하며, 에러 처리도 포함되어 있어 안정적으로 노션 블럭 데이터를 가져올 수 있습니다.
import requests # requests페이지참고
notionApiKey = notionApiKey
# 함수 페이지 참고
# 함수요약 페이지 참고
def getBlock(notionPageId):
url = f"https://api.notion.com/v1/blocks/{notionPageId}/children"
headers = {
"Authorization": f"Bearer {notionApiKey}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"[오류] 노션 블럭 조회 실패: {response.status_code}, {response.text}")
return []
blocks = response.json().get("results", [])
return blocks
notionPageId = '1658844c10b7807b8391d5a11e7a4dff' # 연동할 페이지 ID입력
getBlock(notionPageId)
Python
복사
다음 학습에서는 더욱 흥미로운 내용이 기다리고 있습니다! 노션 블럭을 직접 업데이트하고 수정하는 방법을 배워볼 예정입니다. 이를 통해 여러분의 노션 페이지를 더욱 동적이고 자동화된 방식으로 관리할 수 있게 될 것입니다. 함께 노션의 새로운 가능성을만들어봅시다!