찬찬의 Notion API 정복기 24 - API 집중분석 - Sync Block

소찬 (Chan)·2023년 1월 3일
0
post-thumbnail

저번에 왔던 찬찬이 죽지도 않고 또 왔네
이번에 새로 생긴 기능 Sync Block 에 관해서 연재하려고 왔습니다.

마우스 오버를 하면 연하게 적색 상자가 포커스 되어 보이는데, 이 블럭이 sync block 입니다. 그럼 이 블럭이 어떤 형태로 되어 있는지 조회해볼까요?

  1. search에서 filter={"property": "object", "value": "page"} 로 걸어서 sync block 을 가지고 있는 page를 찾은 후 해당 page_id 를 변수에 넣기 (search는 API 집중분석 08, 09 참조)
  2. 해당 page_idblocks.children.list를 호출하여 sync block 이 있는 block 정보를 들여다 보기 (blocks.children.list는 API 집중분석 15 참조)

한번 예시를 보겠습니다.

{'archived': False,
 'created_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
                'object': 'user'},
 'created_time': '2022-08-03T02:48:00.000Z',
 'has_children': True,
 'id': '741f841e-1fa3-412b-929c-00000000000',
 'last_edited_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
                    'object': 'user'},
 'last_edited_time': '2022-08-03T02:48:00.000Z',
 'object': 'block',
 'parent': {'page_id': '65f095e3-1027-4589-a504-3d3359b6c20f',
            'type': 'page_id'},
 'synced_block': {'synced_from': None},
 'type': 'synced_block'}

'type''synced_block'으로 되어 있네요. 이런 경우는 어떻게 조회해야 될까요?
눈치 빠르신 분은 아셨겠지만, 'has_children'True로 되어 있다는 걸 보셨을 겁니다.
block_idpage_id로 삼아서 blocks.children.list로 호출하시면 보실 수 있습니다.
잠깐.. 그런데 어떤 블록에서는 다음과 같이 보입니다.

{'archived': False,
 'created_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
                'object': 'user'},
 'created_time': '2022-08-03T02:49:00.000Z',
 'has_children': True,
 'id': '2beb9496-1372-4e4d-a7c3-b7c497ab7b9b',
 'last_edited_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
                   'object': 'user'},
 'last_edited_time': '2022-08-03T02:49:00.000Z',
 'object': 'block',
 'parent': {'page_id': 'ef086465-015e-4be9-8911-83000865637e',
            'type': 'page_id'},
 'synced_block': {'synced_from': {'block_id': '741f841e-1fa3-412b-929c-00000000000',
                                 'type': 'block_id'}},
 'type': 'synced_block'}

위 블록같은 경우, 'synced_block''block_id' 정보가 있네요. 도대체 무슨 차이이죠?
'synced_block''synced_from'None 일 경우, 내가 원본이다 라는 뜻이고, block_id 가 있다는 건 나는 사본이고 원본은 따로 있는데, 원본 아이디는 요거(block_id)다 라는 뜻입니다

자세히 보시면 'synced_from''block_id'와 이전 블록의 'id'가 동일하다는 것을 발견하실 수 있습니다.

'id': '741f841e-1fa3-412b-929c-00000000000'
'block_id': '741f841e-1fa3-412b-929c-00000000000'

그럼 이제 id를 sync_block_id 변수에 넣어보겠습니다.

sync_block_id = '741f841e-1fa3-412b-929c-00000000000'

이제 blocks.children.list를 호출해볼까요?
(객체 이름이 notion일 경우)

sync_blocks = notion.blocks.children.list(block_id=sync_block_id)
pprint(sync_blocks)

sync block 내에 block 묶음들이 쭉 보여집니다.

{'block': {},
 'has_more': False,
 'next_cursor': None,
 'object': 'list',
 'results': [{'archived': False,
              'created_by': {'id': 'edfacc72-eb15-467b-9fdb-d5b656e1c77b',
                             'object': 'user'},
                             ....

마찬가지로 'has_more'True 일 경우, 'start_cursor''next_cursor'값을 parameter에 입력하여 호출하시면 됩니다. 역시 묶음개수 또한 page_size로 지정하여 한 번에 호출 할 수 있는 값을 지정할 수 있습니다.

next_cursor = sync_blocks['next_cursor']
notion.blocks.children.list(block_id=sync_block_id, start_cursor=next_cursor, page_size=20)

24화를 끝으로 API 정복기를 마무리 지으려고 합니다.
그동안 연재 시리즈를 마감하려고 하니 홀가분 하네요. 즐거운 노션 생활 되시길 바라며 이상 찬찬의 Notion API 정복기의 찬찬이었습니다.

profile
QA Specialist

1개의 댓글

comment-user-thumbnail
2023년 1월 4일

감사합니다.

답글 달기