참고: 포스트 검색과 포스트 개수의 새로운 버전을 X API v2로 출시했습니다. X API v2에서 새로워진 점을 검토해 보시기를 권장합니다. 이 엔드포인트들은 포스트 수정 메타데이터를 포함하도록 업데이트되었습니다. 이러한 메타데이터에 대한 자세한 내용은 “포스트 수정” 기본 사항 페이지에서 확인할 수 있습니다.
Overview
Enterprise
Enterprise API는 관리형 액세스 레벨에서만 사용할 수 있습니다. 이 API를 사용하려면 먼저 엔터프라이즈 영업팀과 함께 계정을 개설해야 합니다. 자세한 내용은 여기를 참조하세요.
모든 X API 검색 게시물 제품은 여기에서 확인할 수 있습니다.
엔터프라이즈 검색 API에는 두 가지 유형이 있습니다:
- 30-Day Search API는 이전 30일 동안의 데이터를 제공합니다.
- Full-Archive Search API는 2006년 3월 첫 번째 게시물까지 거슬러 올라가는 X 데이터 전체 코퍼스에 대한 완전하고 즉각적인 액세스를 제공합니다.
maxResults 값 또는 31일 중 더 작은 값으로 제한되며, 다음 결과 세트를 페이지네이션하기 위한 next 토큰을 포함합니다. 시간 매개변수가 지정되지 않은 경우, API는 가장 최근 30일 동안의 일치하는 데이터를 반환합니다.
엔터프라이즈 검색 API는 분 단위 정밀도로 게시물 아카이브에 대한 저지연, 원본 보존(full-fidelity)의 쿼리 기반 액세스를 제공합니다. 게시물 데이터는 쿼리와 일치하는 가장 최신 게시물부터 시작하여 역시간순으로 제공됩니다. 게시물은 게시된 후 약 30초가 지나면 Search API를 통해 조회할 수 있습니다.
이 검색 엔드포인트는 수정된 게시물 메타데이터를 제공합니다. 2022년 9월 29일 이후에 생성된 포스트에 대한 모든 객체에는, 해당 게시물이 한 번도 수정되지 않았더라도, 게시물 수정 메타데이터가 포함됩니다. 게시물이 수정될 때마다 새로운 게시물 ID가 생성됩니다. 게시물의 수정 이력은 원래 ID부터 시작하는 게시물 ID 배열에 기록됩니다.
이 엔드포인트는 항상 가장 최근 수정본과 모든 수정 이력을 함께 반환합니다. 30분 편집 가능 시간이 지난 후에 수집된 게시물은 최종 버전을 나타냅니다. Edit Post 메타데이터에 대해 자세히 알아보려면 Edit Posts 기본 사항 페이지를 확인하세요.
요청에는 각 API 응답에서 반환할 포스트의 최대 개수를 지정하는 maxResults 매개변수가 포함됩니다. 쿼리와 연관된 포스트가 응답당 이 최대 결과 수보다 많을 경우, 응답에 next 토큰이 포함됩니다. 이러한 next 토큰은 이후 요청에서 사용되어 쿼리와 연관된 전체 포스트 집합을 페이지네이션하는 데 사용됩니다.
이 엔터프라이즈 검색 API는 사용자가 자신의 쿼리와 관련된 데이터 볼륨을 요청할 수 있는 counts 엔드포인트를 제공합니다.
요청 type
Search requests (data)
maxResults 매개변수를 사용하면, (사용자가 필요에 따라 더 많은 결과를 요청할 수 있도록) 화면 표시용 사용 사례에 맞게 더 작은 페이지 크기를 지정하거나, 대량 데이터 수집을 위해 더 큰 페이지 크기(최대 500)를 지정할 수 있습니다. 데이터는 최신 순(내림차순)으로 제공되며, 전송 시점 기준으로 컴플라이언스가 보장됩니다.
Counts requests (Post count)
사용 가능한 연산자
참고: 연산자를 중첩해서(내포하여) 사용하지 마십시오.
"#cats"는 검색 API에서 cats로 해석됩니다. lang: 연산자와 모든 is: 및 has: 연산자는 단독 연산자로 사용할 수 없으며, 반드시 다른 절과 함께 결합해서 사용해야 합니다(예: @XDevelopers has:links).
검색 API는 토크나이징/매칭 동작 특성으로 인해 제한된 연산자 세트를 사용합니다. Enterprise 실시간 및 배치형 과거 데이터 API는 추가 연산자를 제공합니다. 자세한 내용은 여기를 참조하세요.
자세한 내용은 연산자 시작하기 가이드를 참조하세요.
데이터 가용성 / 중요 날짜
- 첫 게시물: 3/21/2006
- 첫 네이티브 Retweet: 11/6/2009
- 첫 위치 태그 게시물: 11/19/2009
- 필터링을 위해 URL이 처음 인덱싱된 날짜: 8/27/2011
- 향상된 URL 확장 메타데이터(웹사이트 제목 및 설명): 12/1/2014
- 프로필 Geo 보강 메타데이터 및 필터링: 2/17/2015
데이터 업데이트와 가변성
- 사용자 객체 메타데이터:
- 사용자의 @handle (숫자 ID는 절대 변경되지 않음)
- 자기소개(Bio) 설명
- 수치: 게시물 수(statuses), 팔로워 수, 팔로잉 수(friends), 즐겨찾기 수, 리스트 수
- 프로필 위치
- 시간대, 언어 등 기타 세부정보
- 게시물 통계 - 즉, 사용자 행동으로 인해 플랫폼에서 변경될 수 있는 모든 항목(아래 예시 참조):
- 즐겨찾기 수
- 리트윗 수
단일 스레드 vs. 멀티 스레드 요청
maxResults가 500이라고 가정). 응답당 2초가 걸린다고 가정하면, 단일 스레드를 통해 직렬/순차적으로 모든 데이터를 가져오는 데 4,000초(또는 1시간을 약간 넘는 시간)가 소요됩니다(이전 응답의 “next” 토큰을 사용해 초당 1개의 요청을 보내는 방식). 나쁘지 않습니다!
이제 데이터를 수신하기 위해 12개의 병렬 스레드를 사용하는 상황을 고려해 보겠습니다. 백만 개의 포스트가 1년 기간 전체에 균등하게 분포되어 있다고 가정하면, 요청을 12개의 병렬 스레드(멀티 스레드)로 나누어 단일 “작업”에 대해 초당 rate limit을 더 많이 활용할 수 있습니다. 다시 말해, 관심 있는 각 월(month)마다 하나의 스레드를 실행함으로써 데이터를 12배 더 빠르게(또는 약 6분 내에) 가져올 수 있습니다.
이 멀티 스레드 예시는 counts 엔드포인트에도 동일하게 적용됩니다. 예를 들어, 2년 기간에 대한 게시물 카운트를 얻고자 한다면, 단일 스레드 요청을 사용하여 한 번에 31일 단위로 카운트를 페이지네이션할 수 있습니다. 응답당 2초가 걸린다고 가정하면, 전체 카운트 세트를 조회하기 위해 24개의 API 요청을 수행하는 데 약 48초가 소요됩니다. 그러나 동시에 여러 개의 1개월 단위 요청을 보내는 옵션도 있습니다. 초당 12개의 요청을 보내는 경우, 전체 카운트 세트를 약 2초 만에 가져올 수 있습니다.
재시도 로직
- 요청이 포함하는 시간 범위를 줄인 후 다시 시도합니다. 실패할 경우 최소 6시간 단위의 시간 창이 될 때까지 반복합니다.
- 많은 수의 용어를 OR 조건으로 결합하고 있다면, 이를 개별 규칙으로 나눈 뒤 각 규칙을 개별적으로 다시 시도합니다.
- 규칙에서 많은 수의 제외 조건을 사용하고 있다면, 규칙에서 부정된 용어의 수를 줄이고 다시 시도합니다.
빠른 시작
엔터프라이즈 Search Posts: 30-Day API 시작하기
- [엔터프라이즈 계정]https://developer.x.com/en/products/x-api/enterprise
- 사용자 이름, 비밀번호, 계정 이름
- console.gnip.com에 표시되는 검색 엔드포인트와 연결된 레이블
데이터 엔드포인트에 액세스하기
from: 및 lang: 연산자를 사용하여 @XDevelopers 계정에서 작성된 영어 포스트를 찾겠습니다. 더 많은 연산자를 보려면 여기를 클릭하세요.
- cURL
- cURL 예시
cURL은 URL 문법을 사용해 파일을 가져오거나 전송하는 명령줄 도구입니다.아래 항목을 수정한 뒤, 이어지는 cURL 요청을 복사해 명령줄에 붙여넣으세요:
-
Username
<USERNAME>예:email@domain.com -
Account name
<ACCOUNT-NAME>예:john-doe -
Label
<LABEL>예:prod -
fromDate and toDate 예:
"fromDate":"201811010000", "toDate":"201811122359"
데이터 엔드포인트 응답 페이로드
API 요청에 대한 응답으로 반환되는 페이로드는 아래와 같이 JSON 형식으로 제공됩니다.counts 엔드포인트에 액세스하기
day 단위로 그룹화해 조회하겠습니다.
- cURL
- cURL 예시
cURL은 URL 문법을 사용하여 파일을 가져오거나 전송하는 명령줄 도구입니다.다음을 변경한 후 아래 cURL 요청을 명령줄에 복사해 넣으세요:
-
Username
<USERNAME>예:email@domain.com -
Account name
<ACCOUNT-NAME>예:john-doe -
Label
<LABEL>예:prod -
fromDate 및 toDate 예:
"fromDate":"201811010000", "toDate":"201811122359"
Counts endpoint response payload
참고 문서
enterprise Search Posts: Full-Archive API 시작하기
data 형식이거나, 매칭된 포스트의 개수를 수치로 제공하는 counts 형식일 수 있습니다. 이 튜토리얼에서는 cURL을 사용해 data 및 counts 엔드포인트에 요청을 보냅니다.
다음 항목이 필요합니다:
- [엔터프라이즈 계정]https://developer.x.com/en/products/x-api/enterprise
- 사용자 이름, 비밀번호, 계정 이름
- console.gnip.com에 표시되는 검색 엔드포인트에 연결된 레이블
데이터 엔드포인트에 액세스하기
from: 및 lang: 연산자를 사용하여 @XDevelopers 계정에서 작성된 영어 포스트를 찾겠습니다. 추가 연산자에 대해서는 여기를 클릭하세요.
- cURL
- cURL 예시
cURL은 URL 구문을 사용하여 파일을 가져오거나 전송하는 명령줄 도구입니다.다음 cURL 요청을 명령줄에 복사한 뒤, 아래 항목을 변경하여 사용하세요:
-
Username
<USERNAME>예:email@domain.com -
Account name
<ACCOUNT-NAME>예:john-doe -
Label
<LABEL>예:prod -
fromDate 및 toDate 예:
"fromDate":"201802010000", "toDate":"201802282359"
데이터 엔드포인트 응답 페이로드
counts 엔드포인트 사용하기
counts 엔드포인트를 사용하면day 단위로 그룹화된, @XDevelopers 계정에서 영어로 작성된 포스트 개수를 조회할 수 있습니다.
- cURL
- cURL 예제
cURL은 URL 구문을 사용하여 파일을 가져오거나 전송하는 명령줄 도구입니다.다음 항목을 수정한 뒤 아래 cURL 요청을 명령줄에서 복사해 실행합니다:
-
Username
<USERNAME>예:email@domain.com -
Account name
<ACCOUNT-NAME>예:john-doe -
Label
<LABEL>예:prod -
fromDate 및 toDate 예:
"fromDate":"201802010000", "toDate":"201802282359"
Counts 엔드포인트 응답 페이로드
API 요청에 대한 응답 페이로드는 아래와 같이 JSON 형식으로 반환됩니다.참고 문서
가이드
검색 쿼리 작성하기
엔터프라이즈 연산자
- Enterprise 30일 검색 API
- Enterprise 전체 아카이브 검색 API
참고: 모든
is: 및 has: 연산자는 Search API에서 단독으로 사용할 수 없으며, 반드시 다른 절과 함께 사용해야 합니다.예: @XDeevelopers has:links제품 개요
메타데이터 타임라인
to: 및 in_reply_to_status_id: PowerTrack 연산자에 의존하기보다는 게시물 본문을 검사해야 합니다.
여기에 제공된 세부 정보는 Full-Archive Search(수백 번의 검색을 기반으로 한 결과)를 사용해 생성되었습니다. 이 타임라인은 100% 완전하거나 정확하지 않을 수 있습니다. 사용 사례에 근본적인 영향을 미치는 다른 필터링/메타데이터의 “시작일”을 확인하신 경우, 저희에게 알려주시기 바랍니다.
기반이 되는 검색 인덱스는 다시 빌드될 수 있다는 점에 유의하세요. 따라서 이 타임라인의 세부 사항은 변경될 수 있습니다.
2006
- 3월 26일 -
lang:. 검색 인덱스를 생성하는 동안 게시물 메타데이터를 나중에 소급 채워 넣는(backfill) 예시입니다. - 7월 13일 -
has:mentions가 매칭되기 시작합니다. - 10월 6일 -
has:symbols. 주식 종목 기호를 논의할 때 사용하는 slang). - 10월 26일 -
has:links가 매칭되기 시작합니다. - 11월 23일 -
has:hashtags가 매칭되기 시작합니다.
2007
- January 30 - 최초의 정식 @reply (in_reply_to_user_id) 도입,
reply_to_status_id:매칭이 시작됨. - August 23 - 해시태그가 주제와 대화를 조직하는 일반적인 관행으로 등장. 일주일 뒤 첫 실질적 사용이 나타남.
2009
- 5월 15일 -
is:retweet. 이 Operator는 공식 리트윗의 ‘베타’ 출시와 해당 “Via @” 패턴부터 매칭하기 시작합니다. 이 베타 기간 동안에는 Post 동사(verb)가 ‘post’이고, 원본 게시물은 페이로드에 포함되지 않습니다. - 8월 13일 - 공식 리트윗의 최종 버전이 “RT @” 패턴, 동사(verb)를 ‘share’로 설정하고, 원본 게시물을 포함하는 ‘retweet_status’ 속성과 함께 출시됩니다(이로 인해 JSON 페이로드 크기가 대략 두 배가 됩니다).
2010
- 3월 6일 -
has:geo,bounding_box:및point_radius:geo 연산자(Operator)가 매칭을 시작합니다. - 8월 28일 -
has:videos(2015년 2월까지 이 연산자는 youtube.com, vimeo.com, vivo.com 등 일부 동영상 호스팅 사이트 링크가 포함된 포스트와 매칭됩니다).
2011
- July 20 -
has:media및has:images가 매칭되기 시작했습니다. 네이티브 사진 기능은 2010년 8월 9일 공식적으로 발표되었습니다.
2014
- 12월 3일경 - HTML 제목과 설명이 포함된 일부 향상된 URL 메타데이터가 페이로드에 포함되기 시작했습니다. 향상된 메타데이터는 2016년 5월에 보다 완전한 형태로 정착했습니다.
2015
- 2월 10일 -
has:videos가 ‘네이티브’ X 동영상을 대상으로 동작합니다. - 2월 17일 -
has:profile_geo,profile_country:,profile_region:,profile_locality:Profile Geo 연산자를 사용할 수 있게 됩니다. - 2월 17일 -
place_country:및place:게시물 위치(geo) 연산자를 사용할 수 있게 됩니다.
2016
- 5월 1일 - 강화된 URL 메타데이터가 더 폭넓게 제공되었으며, 공식적으로는 2016년 8월 Gnip 2.0 출시의 일부로 발표되었습니다. Search API에서는 이 메타데이터와 관련된 Operator가 제공되지 않습니다.
2017
- 2월 22일 - 투표 메타데이터가 보강된 네이티브(enriched native) 형식으로 제공됩니다. 이 메타데이터에 사용할 수 있는 Operator는 제공되지 않습니다.
2022
- September 27 - 이 날짜 이후에 생성된 모든 Post 객체에는 게시물 편집 메타데이터가 제공됩니다. Post 객체를 반환하는 모든 Enterprise 엔드포인트는 이 날짜부터 이 메타데이터를 제공하도록 업데이트되었습니다. 제공되는 편집 메타데이터에는 edit_history 및 edit_controls 객체가 포함됩니다. 이 메타데이터는 2022년 9월 27일 이전에 생성된 게시물에는 반환되지 않습니다. 현재 이 메타데이터와 일치하는 Enterprise Operators는 제공되지 않습니다. 게시물 편집 메타데이터에 대해 더 알아보려면 Edit Posts fundamentals 페이지를 확인하세요.
2022
- 9월 29일 - 이 날짜 이후에 생성된 모든 게시물 객체에는 편집된 게시물 메타데이터가 제공됩니다. 게시물 객체를 제공하는 모든 Enterprise 엔드포인트는 이 날짜부터 해당 메타데이터를 제공하도록 업데이트되었습니다. 제공되는 편집 메타데이터에는
edit_history및edit_controls객체가 포함됩니다. 이 메타데이터는 2022년 9월 27일 이전에 생성된 포스트에 대해서는 반환되지 않습니다. 현재 이 메타데이터에 대응하는 Enterprise Operators는 제공되지 않습니다. 편집 게시물 메타데이터에 대해 더 알아보려면 Edit Posts fundamentals 페이지를 확인하세요.
필터링 팁
- 일부 메타데이터에는 ‘생성일(born-on)’이 있기 때문에 필터 결과에 위음성(false negative) 이 발생할 수 있습니다. 이런 검색에는 전체 또는 일부 검색 기간 동안 존재하지 않았던 메타데이터에 의존하는 Operator가 포함됩니다. 예를 들어
has:imagesOperator를 사용해 게시물을 검색하는 경우, 2011년 7월 이전 기간에 대해서는 일치하는 결과가 없습니다. 해당 Operator는 네이티브 사진(사용자가 X UI를 통해 게시물에 첨부한 사진)을 기준으로 매칭되기 때문입니다. 사진 공유 게시물에 대한 보다 완전한 데이터 세트를 얻으려면, 2011년 7월 이전 기간에는 일반적인 사진 호스팅 URL에 매칭되는 규칙 절을 필터에 포함해야 합니다. - 일부 메타데이터는 게시물이 X에 게시된 이후 시점의 메타데이터로 다시 채워(backfill)졌습니다.
- X 프로필
- 원본 또는 공유 게시물
- 게시물 언어 분류
- 지리 정보가 참조된 게시물
- 공유된 링크 미디어
X 프로필
원본 게시물 및 리트윗
_is:retweet_ 연산자를 사용하면 리트윗을 포함할지 제외할지 선택할 수 있습니다. 이 연산자를 사용하는 사용자는 2009년 8월 이전 데이터에 대해 리트윗을 일치(또는 비일치)시키기 위한 두 가지 전략을 마련해야 합니다. 2009년 8월 이전에는 “@RT ” 패턴과 일치하는지 확인하기 위해, 정확한 구문 일치 방식으로 게시물 본문 자체를 검사해야 합니다(실제로 2009년 5월부터 8월 사이의 리트윗을 필터링하는 경우에는 “Via @” 패턴도 포함해야 합니다). 2009년 8월 이후 기간에는 _is:retweet_ 연산자를 사용할 수 있습니다.
게시물 언어 분류
포스트의 지리 정보 지정(Geo-referencing)
- 포스트 메시지 내 지리적 참조. 포스트 메시지에 포함된 지리적 참조에 매칭하는 방법입니다. 현지 지식에 의존해야 해서 가장 까다로운 방법이지만, 전체 포스트 아카이브에 대해 사용할 수 있는 옵션입니다. 샌프란시스코 지역을 대상으로 ‘golden gate’ 필터를 기반으로 2006년에 지리 정보가 지정된 매칭 예시는 여기에서 확인할 수 있습니다.
-
사용자가 지오태그한 포스트. Search API에서는 2010년 3월부터 일부 Geo 연산자를 사용해 포스트를 매칭할 수 있게 되었고, 2015년 2월에는 다른 연산자들이 추가되었습니다.
- 2010년 3월 6일:
has:geo,bounding_box:및point_radius: - 2015년 2월 17일:
place_country:및place:
- 2010년 3월 6일:
-
사용자가 설정한 계정 프로필 ‘home’ 위치. 프로필 Geo 연산자는 Historical PowerTrack과 Search API 모두에서 사용할 수 있습니다. Search API에서는 이 프로필 Geo 메타데이터를 2015년 2월부터 사용할 수 있습니다. 프로필 Geo 메타데이터가 제공되기 이전에 게시된 포스트의 경우, 정규화되지 않은 사용자 입력에 매칭하는 데 사용할 수 있는
bio_location:연산자가 제공됩니다.
- 2006년 10월 26일 -
has:links - 2011년 7월 20일 -
has:images및has:media - 2011년 8월 - Expanded URLs enrichment를 사용하는
url:. 2006년 9월처럼 이른 시점에도(url:"spotify.com" OR url:gnip OR url:microsoft OR url:google OR url:youtube)는 twitter_entities 및 gnip 객체에 urls[] 메타데이터가 없음에도 불구하고 http://x.com/Adam/statuses/16602 와 매칭됩니다. “youtube.com”은 어떤 urls[] 메타데이터도 없이 url:youtube와 매칭되는 메시지 콘텐츠의 예입니다. - 2015년 2월 10일 - 네이티브 비디오용
has:videos. 2010/08/28부터 2015/02/10 사이에는 이 연산자가 youtube.com, vimeo.com, vivo.com과 같은 일부 비디오 호스팅 사이트로의 링크가 포함된 포스트와 매칭됩니다. - 2016년 5월 1일 - Enhanced URLs enrichment를 기반으로 하는
url_title:및url_description:이 일반적으로 제공되기 시작했습니다. 첫 번째 Enhanced URL 메타데이터는 2014년 12월에 나타나기 시작했습니다.
자주 묻는 질문(FAQ)
Search Post API 관련 일반 질문
data 엔드포인트를 통해 받는 포스트 수가 counts 엔드포인트에서 집계된 포스트 수와 일치하지 않습니다. 왜 이런 일이 발생하나요?
data 엔드포인트를 통해 받는 포스트 수가 counts 엔드포인트에서 집계된 포스트 수와 일치하지 않습니다. 왜 이런 일이 발생하나요?
counts 엔드포인트가 제공하는 결과와 data 엔드포인트가 제공하는 결과 사이에는 알려진 차이가 있습니다. 이는 counts 엔드포인트가 사전 컴플라이언스(pre-compliance) 단계의 결과를 제공하여 삭제된 게시물, 위치 정보 삭제(scrub geo) 등과 같은 요소를 반영하지 않는 반면, data 엔드포인트는 전달 시점에 컴플라이언스를 준수하며 모든 컴플라이언스 이벤트를 반영하기 때문에, 결과에 불일치가 발생할 수 있기 때문입니다.내 쿼리와 일치해야 하는 게시물을 받지 못했습니다. 왜 그런가요?
내 쿼리와 일치해야 하는 게시물을 받지 못했습니다. 왜 그런가요?
이런 일이 발생했을 수 있는 몇 가지 가능한 이유가 있습니다. 예를 들면 다음과 같습니다.
- 예상했던 게시물이 보호된 계정의 게시물인 경우
- 데이터 엔드포인트가 모든 컴플라이언스 이벤트를 고려하기 때문입니다(즉, 삭제된 게시물, 삭제된 위치 정보 등은 응답에 포함되지 않습니다).
내 쿼리가 게시물과 일치했지만, 내가 NOT 조건으로 제외한 키워드도 포함되어 있습니다. 왜 이런 일이 발생하나요?
내 쿼리가 게시물과 일치했지만, 내가 NOT 조건으로 제외한 키워드도 포함되어 있습니다. 왜 이런 일이 발생하나요?
이는 프리미엄 규칙 및 필터링 기능을 잘못 사용했기 때문일 가능성이 큽니다. 여기의 문서를 검토하고, 규칙을 작성할 때 적용되는 제한 사항을 충분히 이해하고 있는지 확인하세요.
Search 게시물 API를 처음 사용할 때 활용할 수 있는 라이브러리가 있나요?
Search 게시물 API를 처음 사용할 때 활용할 수 있는 라이브러리가 있나요?
네, 다음과 같은 것들이 있습니다.
- Tweepy - 표준 Search/Posts 제품을 사용할 때 유용한 라이브러리입니다(Python)
- X API - 표준 Search Post API를 사용할 때 유용한 라이브러리입니다(Python)
- Search Posts Python 및 Search Posts Ruby - 엔터프라이즈용(및 v2!) Search Post API와 함께 사용할 수 있는 유용한 도구 두 가지입니다
데이터 엔드포인트에 대한 요청에서 `maxResults`로 설정한 값보다 더 적은 수의 포스트를 받는 경우가 있을까요?
데이터 엔드포인트에 대한 요청에서 `maxResults`로 설정한 값보다 더 적은 수의 포스트를 받는 경우가 있을까요?
네. 데이터 엔드포인트는 지정한
maxResults 값 또는 30일 기간 단위로 페이지네이션됩니다.예를 들어, 특정 30일 기간에 포스트가 800개 있는 경우 전체 결과를 가져오려면 두 번의 요청을 보내야 합니다. 요청당 반환될 수 있는 포스트의 최대 개수는 500개(maxResults)이기 때문입니다. 그리고 첫 번째 달에 포스트가 400개, 두 번째 달에 포스트가 100개 있는 경우에도 전체 결과를 가져오려면 두 번의 요청을 사용해야 합니다. 첫 번째 요청이 지정한 maxResults보다 적은 수의 포스트를 반환하더라도, 페이지네이션은 30일 기간이 지나면 이루어지기 때문입니다.검색 결과 포스트는 어떤 순서로 반환되나요?
검색 결과 포스트는 어떤 순서로 반환되나요?
포스트는 최신순(내림차순)으로 반환됩니다. 예를 들어, 첫 페이지 결과에는 쿼리와 일치하는 가장 최신 포스트가 표시되며, 페이지네이션은 결과의 게시 날짜를 기준으로 처음 요청한
fromDate에 도달할 때까지 계속 진행됩니다.Edit Posts 기능은 내 사용량과 과금에 어떤 영향을 미치나요?
Edit Posts 기능은 내 사용량과 과금에 어떤 영향을 미치나요?
청구 시에는 원본 게시물만 계산됩니다. 이후에 이루어진 편집은 모두 무시되며 전체 활동 집계에 반영되지 않습니다.
EnterpriseEnterprise Search 게시물 API의 가격 및 요금제에 대해 더 자세히 알고 싶고, 이 오퍼링을 신청하고 싶습니다. 어떻게 하면 되나요?
Enterprise Search 게시물 API의 가격 및 요금제에 대해 더 자세히 알고 싶고, 이 오퍼링을 신청하고 싶습니다. 어떻게 하면 되나요?
당사의 엔터프라이즈 솔루션은 예측 가능한 가격으로 귀사의 비즈니스 요구에 맞게 맞춤 제공합니다. 자세한 내용 확인 및 신청은 여기를 참조해 주십시오.
내 사용 사례에 맞는 규칙 세트는 어떻게 만들 수 있나요?
내 사용 사례에 맞는 규칙 세트는 어떻게 만들 수 있나요?
이번 달 요청 한도/제한을 초과했는데 더 많은 데이터에 액세스해야 합니다. 어떻게 하면 되나요?
이번 달 요청 한도/제한을 초과했는데 더 많은 데이터에 액세스해야 합니다. 어떻게 하면 되나요?
이와 관련된 도움을 받으시려면 X 담당 Account Manager에게 문의해 주세요.
오류 해결 가이드
- 각 엔드포인트에 올바른 매개변수를 사용하고 있는지 확인하세요 (예:
buckets필드는 data 엔드포인트가 아니라 counts 엔드포인트에서만 사용할 수 있습니다). :product,:account_name,:label필드가 올바른지 다시 한 번 확인하세요. GNIP 콘솔(엔터프라이즈 고객 전용)에서:label필드를 확인할 수 있습니다.
API 참조 문서
Enterprise search APIs
- 30-Day Search API - 최근 30일 이내에 게시된 Tweet을 제공합니다.
- Full-Archive Search API - 2006년 3월에 게시된 첫 번째 Tweet부터 시작해, 2006년까지 거슬러 올라가는 Tweet을 제공합니다.
- Tweet 데이터 및 개수(count)를 요청하는 메서드
- 인증
- 페이지네이션
- API 요청 매개변수 및 요청 예시
- API 응답 JSON 페이로드 및 응답 예시
- HTTP 응답 코드
메서드
https://gnip-api.x.com/search/입니다.
여기서:
:product는 요청을 보내는 검색 endpoint를 나타내며,30day또는fullarchive입니다.:account_name은 console.gnip.com에 표시되는 계정과 연결된 이름으로, 대소문자를 구분합니다.:label은 console.gnip.com에 표시되는 검색 endpoint와 연결된 레이블로, 대소문자를 구분합니다.
- 데이터 endpoint: https://gnip-api.x.com/search/30day/accounts/TwitterDev/prod.json
- 카운트 endpoint: https://gnip-api.x.com/search/30day/accounts/TwitterDev/prod/counts.json
:product, :account_name, :label이 포함된 URL을 사용합니다. 이 예시들을 사용할 때에는 반드시 URL을 자신의 정보로 업데이트해야 합니다.
인증
요청/응답 동작
fromDate 및 toDate 파라미터를 사용하면 API가 지원하는 어떤 기간이든 요청할 수 있습니다. 30-Day search API는 가장 최근 31일간의 Tweet을 제공합니다(‘30-Day’ API라고 부르지만, 사용자가 한 달 전체를 요청할 수 있도록 31일을 제공합니다). Full-Archive search API는 최초의 Tweet(2006년 3월 21일)까지 거슬러 올라가는 Tweet을 제공합니다. 다만 단일 응답에는 지정한 maxResults 값과 31일 중 더 작은 쪽까지만 포함됩니다. 매칭되는 데이터 양 또는 지정한 시간 범위가 maxResults 또는 31일을 초과하는 경우, 남은 지정 시간 범위를 페이지네이션하기 위해 사용해야 하는 next 토큰을 받게 됩니다.
예를 들어, Full-Archive search를 사용하여 2017년 1월 1일부터 2017년 6월 30일까지 쿼리에 매칭되는 모든 Tweet을 조회한다고 가정해 보겠습니다. 이때 요청에서 fromDate 및 toDate 파라미터를 사용해 해당 6개월 전체 기간을 지정합니다. search API는 첫 번째 Tweet ‘페이지’를 응답으로 반환하며, 이때 Tweet 개수는 maxResults 파라미터(기본값은 100)에 맞게 반환됩니다. 더 많은 Tweet이 존재하는 경우(대부분의 경우 더 많이 존재합니다), API는 다음 ‘페이지’의 데이터를 요청할 수 있도록 하는 next 토큰도 함께 제공합니다. 이 과정은 API가 더 이상 next 토큰을 반환하지 않을 때까지 반복됩니다. 자세한 내용은 다음 섹션을 참고하세요.
페이지네이션
next 토큰이 포함됩니다. next 토큰은 최상위 수준 JSON 속성으로 제공됩니다. next 토큰이 제공되는 경우에는 추가로 조회해야 할 데이터가 있다는 의미이므로, 계속해서 API 요청을 보내야 합니다.
참고: next 토큰의 동작은 데이터 요청과 count 요청에서 약간 다르며, 둘 다 아래에서 설명합니다. 예시 응답은 API 참조 문서 섹션에 제공되어 있습니다.
데이터 페이지네이션
maxResults 매개변수의 기본값은 100이며, 10–500 범위 내에서 설정할 수 있습니다. 쿼리와 일치하는 Tweet 수가 요청에 사용한 maxResults 매개변수 값보다 많은 경우, 응답에는 루트 수준 JSON 속성으로 ‘next’ 토큰이 포함됩니다. 이 ‘next’ 토큰은 해당 쿼리에 대해 다음에 일치하는 Tweet 묶음(즉, 다음 ‘page’)을 가져오기 위한 후속 요청에서 사용됩니다. 쿼리에 대한 마지막 ‘page’에 도달해 더 이상 ‘next’ 토큰이 제공되지 않을 때까지 ‘next’ 토큰이 계속 반환됩니다.
다음 ‘page’의 데이터를 요청하려면, (사용했다면) query, toDate, fromDate 매개변수를 포함해 초기 쿼리와 완전히 동일한 쿼리를 보내야 하며, 이전 응답에서 받은 값을 설정한 ‘next’ 요청 매개변수도 포함해야 합니다. 이는 GET 또는 POST 요청 모두에서 사용할 수 있습니다. 단, GET 요청의 경우 ‘next’ 매개변수는 URL 인코딩되어야 합니다.
이전 쿼리에서 받은 ‘next’ 요소를 계속 전달하면, 쿼리가 대상으로 하는 기간 동안의 모든 Tweet을 받을 때까지 데이터를 가져올 수 있습니다. ‘next’ 요소가 포함되지 않은 응답을 받으면, 이는 마지막 페이지에 도달했으며 지정된 쿼리와 시간 범위에 대해 더 이상 사용할 수 있는 데이터가 없다는 의미입니다.
카운트 페이지네이션
counts endpoint는 쿼리와 연관된 Tweet 개수를 일 단위, 시간 단위, 또는 분 단위 기준으로 제공합니다. counts API endpoint는 최대 31일 분량의 카운트에 대해 타임스탬프가 포함된 카운트 배열을 반환합니다. 31일이 넘는 기간의 카운트를 요청하면 next 토큰이 제공됩니다. 데이터용 next 토큰과 마찬가지로, 원래 요청과 완전히 동일한 쿼리를 다시 수행해야 하며, 이전 응답에서 받은 값을 next 요청 매개변수로 함께 보내야 합니다.
31일을 초과하는 카운트를 요청하는 경우 외에도, next 토큰이 제공되는 또 다른 시나리오가 있습니다. 볼륨이 높은 쿼리의 경우, 카운트를 생성하는 데 걸리는 시간이 길어져 응답 타임아웃이 발생할 수 있습니다. 이 경우 31일 미만의 카운트를 받게 되지만, 전체 카운트 페이로드를 계속 요청할 수 있도록 next 토큰이 함께 제공됩니다. 중요: 타임아웃이 발생하면 항상 전체 “버킷”만 반환됩니다. 예를 들어 2.5일 분량의 데이터는 2일치 전체 “버킷”으로만 반환됩니다.
추가 참고 사항
- 검색 요청에서 fromDate 또는 toDate를 사용할 때는 지정한 시간 범위 안에 있는 결과만 받게 됩니다. 시간 범위 내에서 마지막 결과 세트에 도달하면 ‘next’ 토큰을 받지 못합니다.
- ‘next’ 요소는 10~500 사이의 어떤 maxResults 값과도 함께 사용할 수 있습니다(기본값은 100). maxResults는 각 응답에서 반환되는 Tweet 수를 결정하지만, 결국 모든 결과를 받는 것을 막지는 않습니다.
- ‘next’ 요소는 만료되지 않습니다. 동일한 ‘next’ 쿼리를 사용한 여러 요청은, 요청 시점과 관계없이 동일한 결과를 받게 됩니다.
- ‘next’ 매개변수를 사용해 결과를 페이지로 나누어 조회할 때, 쿼리 경계에서 중복 항목이 발생할 수 있습니다. 애플리케이션은 이러한 중복을 허용하도록 설계해야 합니다.
데이터 엔드포인트
POST /search/:product/:label
엔드포인트 패턴:
데이터 요청 매개변수
추가 세부사항
데이터 요청 및 응답 예시
POST 요청 예시
- POST 요청의 매개변수는 아래와 같이 JSON 형식의 본문(body)을 통해 전송됩니다.
- 조회하려는 PowerTrack 규칙의 모든 구성 요소(예: 키워드, bounding_box:와 같은 기타 연산자)는 ‘query’ 매개변수에 포함해야 합니다.
- 규칙의 일부를 쿼리 URL의 개별 매개변수로 분리하지 마십시오.
예시 GET 요청
- GET 요청의 요청 매개변수는 표준 URL 인코딩을 사용하여 URL에 인코딩됩니다.
- 조회하려는 PowerTrack 규칙의 모든 부분(예: 키워드, bounding_box:와 같은 기타 연산자)은 ‘query’ 매개변수에 넣어야 합니다.
- 쿼리 URL에서 규칙의 일부를 별도의 매개변수로 분리하지 마십시오.
예시 데이터 응답
카운트 엔드포인트
/search/:stream/counts
엔드포인트 패턴:
/search/fullarchive/accounts/:account_name/:label/counts.json
이 엔드포인트는 지정된 쿼리에 대한 카운트(데이터 볼륨) 데이터를 반환합니다. 기간이 지정되지 않은 경우 시간 파라미터는 기본적으로 최근 30일로 설정됩니다. 데이터 볼륨은 일 단위, 시간 단위(기본값), 또는 분 단위 중 하나로 타임스탬프가 포함된 배열 형태로 반환됩니다.
참고: 아래에 설명된 파라미터를 URL에 인코딩하면 POST 대신 GET 요청을 사용해도 동일한 동작을 수행할 수 있습니다.
카운트 요청 매개변수
추가 세부 정보
카운트 요청 및 응답 예제
POST 요청 예시
- POST 요청의 요청 매개변수는 아래와 같이 JSON 형식의 요청 본문(body)으로 전송됩니다.
- 조회하려는 PowerTrack 규칙의 모든 요소(예: 키워드, bounding_box:와 같은 기타 연산자)는 ‘query’ 매개변수에 넣어야 합니다.
- 규칙의 일부를 쿼리 URL의 개별 매개변수로 분리하지 마십시오.
GET 요청 예시
- GET 요청의 매개변수는 표준 URL 인코딩을 사용하여 URL에 인코딩됩니다
- 조회할 PowerTrack 규칙의 모든 부분(예: 키워드, bounding_box:와 같은 기타 연산자)은 모두 ‘query’ 매개변수에 포함해야 합니다
- 규칙의 일부를 쿼리 URL에서 분리하여 별도의 매개변수로 전달하지 마십시오