Reference API URL : Create a page
block
배열들을 children
을 통해 추가할 수 있습니다.block
이 뭘까요?children
에 block
정보를 집어넣으면, page
가 생성될때 블록도 같이 생성되게 됩니다. block
배열은 어떻게 보아야 하나요?block
정보를 읽어오기 위해 Retrieve block children 명령을 사용해보겠습니다.# 위 페이지 id를 page_id에 입력
# page_id 따오는 법은 찬찬의 API 집중분석 - search를 참조하세요.
page_id = '1f217cc1-225f-4580-8e22-cd7eb8db3c5e'
blocks = notion.blocks.children.list(block_id=page_id)
pprint(blocks)
block
정보는 다음과 같습니다.
{'block': {},
'has_more': False,
'next_cursor': None,
'object': 'list',
'results': [{'archived': False,
'created_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
'object': 'user'},
'created_time': '2022-04-02T11:59:00.000Z',
'has_children': False,
'id': '27b0ad2f-5698-4f7c-ab07-00f174042264',
'last_edited_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
'object': 'user'},
'last_edited_time': '2022-07-07T00:43:00.000Z',
'object': 'block', ...
'results'
에 block
정보들이 있는 배열이 있습니다. 이러한 형태의 배열정보를 children
에 넣으면, create
할때 블럭도 같이 생성되겠죠?
pprint(blocks['results'][0])
를 실행하여 첫번째인, [0]
번째 block
의 페페로니가 취향저격이라는 정보가 있는 블록을 자세히 살펴보겠습니다.
...
'object': 'block',
'paragraph': {'color': 'default',
'rich_text': [{'annotations': {'bold': False,
'code': False,
'color': 'default',
'italic': False,
'strikethrough': False,
'underline': False},
'href': None,
'plain_text': '페퍼로니가',
'text': {'content': '페퍼로니가', 'link': None},
'type': 'text'},
{'annotations': {'bold': False,
'code': False,
'color': 'default',
'italic': False,
'strikethrough': False,
'underline': False},
'href': None,
'plain_text': ' 취향저격',
'text': {'content': ' 취향저격', 'link': None},
'type': 'text'}]}, ...
paragraph
키 값의 정보를 참조하면 children
형식에 맞는 형태로 가공할 수 있을걸로 보입니다.
paragraph_value = blocks['results'][0]['paragraph']
children_block = {}
children_block['paragraph'] = paragraph_value
{}
로 씌우는거 계속 코드로 하니 번거롭네요. def 함수로 만들어볼까요?
def dict_wrap(type, object):
wrapped = {}
wrapped[type] = object
return wrapped
children_block = dict_wrap(type='paragraph', object=blocks['results'][0]['paragraph'])
이 정보로 생성하면 되겠지... 하는데 아직 끝난게 아닙니다.
children
타입 ㄱ나시나요? array of mixed types 이말은 즉슨, array, list
형태입니다.
그럼 저걸 list
로 묶어야 API에서 인식하겠죠.
애먹었는게, dictionary 로 넣으니까 body.parent.database_id should be defined, instead was 'undefined'.
오류가 계속 발생하는 겁니다. 애초에 너 dictionary
로 줬으니 list
로 묶어달라고 오류 메시지 주면 좋았을텐데 말이죠. 여러 블럭을 생성해야 된다면 children_block
를 여러개 append
해주시면 되겠죠?
children_blocks = []
children_blocks.append(children_block)
이제 추가가 가능한 형태로 children
이 완성되었습니다. 이걸 필수 값인 parent
와 properties
와 함께 parameter
값에 추가하시면 문제없이 생성이 될겁니다.
parent_object = {'type': 'database_id', 'database_id': '021eb424-7a41-47ae-9252-f67d4f6e6b05'}
notion.pages.create(parent=parent_object,
properties=properties_new,
children=children_blocks)
icon_value = {'emoji': '🍕', 'type': 'emoji'}
notion.pages.create(parent=parent_object, properties=properties_new, icon=icon_value)
url = 'https://images.unsplash.com/photo-1566843972142-a7fcb70de55a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjYzOTIxfQ'
cover_value = {'external': {'url': url},'type': 'external'}
notion.pages.create(parent=parent_object, properties=properties_new, cover=cover_value)