
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_id 는 blocks.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 는 형식 토시 하나만 틀려도 오류가 발생되기 떄문에, 참고용도로 작성된 page의 block 정보를 읽어와서 변수에 넣은뒤, 그 변수를 입맛에 맞게 수정해서 사용해주시면 됩니다.
우선 샘플로 따올 block_id를 target_block_id로 가져왔을 경우, retrieve에 target_block_id 를 parameter로 넣어서 정보를 가져옵니다.
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)