찬찬의 Notion API 정복기 16 - API 집중분석 - Update a block

소찬 (Chan)·2022년 10월 24일
0
post-thumbnail

Reference API URL : Update a block

링크를 열고 좌측 메뉴의 순서를 보니 아니... Add a block 이나 Create a block 같은건 없고, Update a block이 먼저 나왔네요. Create a block 은 없지만, Append block children 을 쓰시면 block 을 생성할 수 있습니다.
블록 생성은 Append block children 편에서 확인하는 걸로 하고요. 지금은 Update a block 하는 법을 알아보도록 하겠습니다.

block_idblocks.children.list 로 호출하면 block_id 정보를 확인하실 수 있습니다. 가령 첫번째 블록 id 를 가져오고 싶다면 하기와 같이 코드를 작성할 수 있겠죠? 밑의 코드에 관한 자세한 설명은 15 - API 집중분석 - Retrieve a block & Retrieve block children 참조해주시길 바래요.

page_id = '1f217cc1-225f-4580-8e22-cd7eb8db3c5e'
blocks = notion.blocks.children.list(block_id=page_id)
target_block_id = blocks['results'][0]['id'] # 첫번째 block_id

두번째 block_id를 입력하고 싶다면 blocks['results'][1]['id']을 입력하시면 됩니다. 이제 block_id 는 알아냈으니 BODY PARAM에 있는 {type}을 알아보겠습니다.

Block object keys 페이지를 참조하시면 여기에 type이 설명되어 있습니다.
"paragraph", "heading_1", ... 참 여러개가 있네요.
여기서 맞는 형태를 골라 쓰시면 됩니다. 물론 API 는 형식 토시 하나만 틀려도 오류가 발생되기 떄문에, 참고용도로 작성된 pageblock 정보를 읽어와서 변수에 넣은뒤, 그 변수를 입맛에 맞게 수정해서 사용해주시면 됩니다.
우선 샘플로 따올 block_idtarget_block_id로 가져왔을 경우, retrievetarget_block_idparameter로 넣어서 정보를 가져옵니다.

value = notion.blocks.retrieve(block_id=target_block_id)

위 값을 pprint 로 찍어본 샘플입니다.

{'archived': False,
 ... ,
 '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'}]},
... ,
}

'paragraph' 부분을 따와보겠습니다.

paragraph_new = value['paragraph']

paragraph_new를 찍으면 다음과 같이 나올겁니다.

{'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'}]}

텍스트를 수정할거라면 'plain_text''text''content'를 수정해주면 되겠죠?

text_new = '크러스트가 취향저격'
paragraph_new['rich_text'][0]['plain_text'] = text_new
paragraph_new['rich_text'][0]['text']['content'] = text_new

마지막으로 update 를 해봅니다. {type}paragraph로 바꾸어서 parameter 입력 후 API 를 호출하시면 됩니다.

notion.blocks.update(block_id=target_block_id, paragraph=paragraph_new)
profile
QA Specialist

0개의 댓글