Recent search 페이지네이션
소개
검색 쿼리는 일반적으로 하나의 API 응답에서 반환할 수 있는 것보다 더 많은 게시물에 매칭됩니다. 이런 경우 데이터는 여러 ‘페이지’로 나뉘어 반환됩니다. 페이지네이션은 전체 데이터 집합을 조회하기 위해 모든 페이지를 요청하는 방법을 의미합니다. Recent search 페이지네이션의 기본 사항은 다음과 같습니다:- recent search 엔드포인트는 쿼리에 대해 최소 한 페이지로 응답하며, 추가 페이지가 있는 경우 JSON 응답에 next_token을 제공합니다. 매칭되는 게시물을 수신하려면 응답에 토큰이 포함되지 않을 때까지 이 프로세스를 반복할 수 있습니다.
- next_token은 만료되지 않습니다. 동일한 next_token 값을 사용한 여러 요청은 요청 시점에 관계없이 동일한 결과를 반환합니다.
-
게시물은 UTC 시간대 기준 역시간순으로 전달됩니다. 이는 개별 페이지 내에서도, 여러 페이지 사이에서도 동일합니다:
- 첫 응답의 첫 게시물이 쿼리에 매칭되는 가장 최근 게시물입니다.
- 마지막 응답의 마지막 게시물이 쿼리에 매칭되는 가장 오래된 게시물입니다.
- max_results 요청 파라미터로 응답당 반환되는 게시물 수를 구성할 수 있습니다. 기본값은 10개이고 최대 100개입니다.
- 모든 페이지네이션 구현은 응답 페이로드에서 next_token을 파싱하고 이를 ‘다음 페이지’ 검색 요청에 포함시키는 과정을 수반합니다. 이러한 ‘다음 페이지’ 요청을 구성하는 방법에 대한 자세한 내용은 아래를 참조하세요.
- 과거 데이터 가져오기 - 관심 기간의 매칭 게시물을 요청합니다. 이는 일반적으로 과거 리서치를 지원하는 일회성 요청입니다. 검색 요청은 start_time 및 end_time 요청 파라미터를 기반으로 할 수 있습니다. recent search 엔드포인트는 가장 최근 매칭 게시물부터 시작하여 게시물을 역시간순으로 전달합니다.
- 폴링 - 마지막으로 수신한 게시물 이후 게시된 매칭 게시물을 요청합니다. 이러한 사용 사례는 거의 실시간에 초점을 맞추는 경우가 많으며, 관심 있는 새 게시물을 “청취”하며 잦은 요청이 특징입니다. Recent search 엔드포인트는 ‘폴링’ 패턴 지원을 위해 since_id 요청 파라미터를 제공합니다. Post ID로 탐색을 돕기 위해 until_id 요청 파라미터도 제공됩니다.
과거 데이터 조회
이 섹션에서는 start_time과 end_time 요청 파라미터를 사용하여 관심 기간(현재 최근 7일로 제한됨)의 게시물을 조회하는 방법을 설명합니다. 과거 데이터 요청은 일반적으로 리서치와 분석을 지원하는 일회성 요청입니다. 기간에 대한 데이터를 요청하는 것이 recent search 엔드포인트의 기본 모드입니다. 검색 요청이 start_time, end_time 또는 since_id 요청 파라미터를 지정하지 않으면 end_time은 기본적으로 “지금”(실제로는 쿼리 시점의 30초 전)이 되고 start_time은 기본적으로 7일 전이 됩니다. 엔드포인트는 가장 최근 게시물부터 시작하여 게시물의 첫 ‘페이지’를 역시간순으로 응답합니다. 응답 JSON 페이로드에는 추가 데이터 페이지가 있는 경우 next_token도 포함됩니다. 페이지 수와 관계없이 매칭되는 게시물 전체 집합을 수집하려면 next_token이 제공되지 않을 때까지 요청을 만듭니다. 예를 들어, 다음은 지난주에 keyword snow가 포함된 게시물에 대한 초기 요청입니다: https://api.x.com/2/tweets/search/recent?query=snow 응답에는 가장 최근 10개의 게시물이 포함되며 JSON 응답에는 다음 “meta” 속성도 포함됩니다:폴링 및 리스닝 사용 사례
이 섹션에서는 since_id 요청 파라미터로 recent search 엔드포인트를 폴링하여 최근 게시물을 조회하는 방법을 설명합니다. 폴링 사용 사례에서는 “새로운 관심 게시물이 있나요?” 쿼리를 지속적으로 자주 만듭니다. 시간에 기반해 요청하는 과거 데이터 사용 사례와 달리, 폴링 사용 사례는 일반적으로 Post ID에 기반해 요청합니다. 폴링 사용 패턴의 핵심은 모든 새 게시물이 X 플랫폼에서 대체로 오름차순으로 ‘방출되는’ 고유 ID를 가진다는 점입니다. 한 게시물의 ID가 다른 것보다 작다면 더 먼저 게시되었다는 뜻입니다. Recent search 엔드포인트는 Post ID로 게시물 아카이브를 탐색하도록 지원합니다. 엔드포인트의 응답에는 oldest_id 및 newest_id Post ID가 포함됩니다. 폴링 모드에서는 지금까지 수신한 가장 크고/가장 새로운 ID로 since_id를 설정하여 요청을 만듭니다. 예를 들어 눈에 대한 새 게시물 쿼리를 5분마다 만들고 마지막으로 수신한 게시물의 Post ID가 10000이라고 가정해봅니다. 폴링할 시간이 되면 요청은 다음과 같습니다: https://api.x.com/2/tweets/search/recent?query=snow&since_id=10000 다음으로 마지막 요청 이후 7개의 게시물이 게시되었다고 가정해 봅시다. 이것들이 모두 단일 데이터 ‘페이지’에 들어맞으므로 next_token은 없습니다. 응답은 가장 최근(가장 새로운) 게시물의 Post ID를 제공합니다:https://api.x.com/2/tweets/search/recent?query=snow&since_id=12000
사용 가능한 데이터가 더 많고 next 토큰이 제공되는 경우, 첫 페이지 결과의 newest_id 값만 필요합니다. 각 데이터 페이지에는 newest_id와 oldest_id 값이 포함되지만, 첫 페이지에 제공된 값만이 다음 정기 폴링 요청에 필요합니다. 따라서 폴링 설계를 구현하거나 ID 범위로 게시물을 검색하는 경우 페이지네이션 로직이 약간 더 복잡합니다.
이제 매칭 게시물이 추가로 18개 있다고 가정해 봅시다. 엔드포인트는 전체 데이터 페이지와 이 5분 기간의 다음 데이터 페이지를 요청하기 위한 next_token을 포함하는 이 초기 응답으로 응답합니다. 또한 5분 후 다음 폴링 간격에 필요한 가장 새로운 Post ID도 포함합니다.