개요
Enterprise
이 API는 관리형 액세스 레벨에서만 제공되는 엔터프라이즈 API입니다. 이 API를 사용하려면 먼저 엔터프라이즈 영업팀을 통해 계정을 개설해야 합니다. 자세히 알아보기
Engagement API는 게시물 노출 수 및 참여 지표에 대한 액세스를 제공합니다. 대부분의 지표와 엔드포인트는 OAuth 1.0a User Context를 사용해 인증해야 하지만, 공개 Favorite, Retweet, Reply, Video Views 지표에는 OAuth 2.0 Bearer Token과 /totals 엔드포인트를 사용해 액세스할 수 있습니다.
참고: 일부 X 웹 대시보드에 보고되는 데이터와 Engagement API에 보고되는 데이터 사이에 차이가 있을 수 있습니다. 이러한 차이는 웹 대시보드가 일반적으로 선택한 기간 내에 발생한 참여 및/또는 노출 수만 표시하기 때문에 발생합니다. 예를 들어, 웹 대시보드는 달력상 한 달 동안의 게시물 참여만 표시할 수 있지만, Engagement API는 요청한 시간 범위 안에 속하는 한 해당 달의 범위를 넘어서는 참여까지도 표시할 수 있습니다. 이러한 경우에는 Engagement API를 정식 데이터 소스로 간주해야 합니다.
요청 엔드포인트
현재 합계: [/totals]
- 요청 시 원하는 포스트에 대해 노출수(Impressions) 합계 메트릭과 참여수(Engagements) 합계 메트릭을 반환합니다
- 다음 메트릭으로 제한됩니다: Impressions, Engagements, Favorites, Replies, Retweets, Quote Tweets, Video Views
- OAuth 1.0a User Context를 사용하여 최근 90일 이내에 생성된 포스트에 대한 Impressions 및 Engagements 메트릭을 조회할 수 있습니다
- OAuth 2.0 Bearer 토큰을 사용하여 모든 포스트에 대한 Favorites, Retweets, Quote Tweets, Replies 및 Video Views 메트릭을 조회할 수 있습니다
- 결과는 요청이 수행되는 시점의 노출수와 참여수 현재 합계를 기준으로 합니다
- 대시보드 보고서를 구성하고 여러 @handle 전반에 걸쳐 참여율을 계산하는 데 적합합니다
- 요청 한 번당 최대 250개 포스트에 대한 메트릭 조회를 지원합니다
지난 28시간: [/28hr]
- 요청 시 지난 28시간 동안 발생한 노출 수 총합 지표, 참여 수 총합 지표, 그리고 개별 참여 지표의 상세 내역을 반환할 수 있습니다.
- 데이터는 Post ID별로, 그리고 시계열(일별 또는 시간별) 집계로 그룹화할 수 있습니다.
- 최근에 생성된 콘텐츠의 성과를 추적하는 데 적합합니다.
- 사용 가능한 모든 지표를 지원합니다.
- 요청당 최대 25개의 포스트에 대한 지표 요청을 지원합니다.
Historical: [/historical]
- 요청은 최근 1년 동안의 노출 수(impressions), 참여 수(engagements), 그리고 개별 참여 지표의 세부 분류 데이터를, 게시물 생성 시간이 아닌 참여(engagement) 발생 시간을 기준으로 반환할 수 있습니다.
- 요청은 시작일과 종료일 파라미터를 지원하므로, 최장 4주까지의 특정 기간으로 범위를 좁힐 수 있는 유연성을 제공합니다.
- 게시물 참여 데이터는 과거 365일까지만 제공됩니다.
- 데이터는 게시물 ID별로, 그리고 시계열 기준으로는 집계 단위(일 또는 시간)별로 그룹화할 수 있습니다.
- 최근 성과를 과거 벤치마크와 비교 평가하거나, 특정 @handle의 과거 성과 추이를 파악하는 데 적합합니다.
- 사용 가능한 모든 지표를 지원합니다.
- 요청당 최대 25개의 포스트에 대한 지표 요청을 지원합니다.
사용 가능한 메트릭
| 지표 | 엔드포인트 가용성 | 사용자 컨텍스트 필요 | 설명 |
|---|---|---|---|
| impressions | 전체 | 예 | 게시물이 조회된 총 횟수입니다. 이 지표는 지난 90일 이내에 게시된 게시물에만 제공됩니다. |
| engagements | 전체 | 예 | 사용자가 게시물과 상호작용한 총 횟수입니다. 이 지표는 지난 90일 이내에 게시된 게시물에만 제공됩니다. |
| favorites | 전체 | 예 - /28hrs & /Historical 아니요 - /totals | 게시물이 즐겨찾기된 총 횟수입니다. |
| retweets | 전체 | 예 - /28hrs 및 /Historical 아니요 - /totals | 게시물이 리트윗된 총 횟수입니다. |
| quote_tweets | /totals | 아니요 - /totals | 게시물이 인용(Quote) 리트윗된 총 횟수입니다. |
| replies | 전체 | 예 - /28hrs & /Historical 아니요 - /totals | 게시물에 답글이 달린 총 횟수입니다. |
| video_views | 전체 | 예 - /28hrs & /Historical 아니요 - /totals | 특정 게시물에 포함된 동영상이 최소 2초 동안 화면에서 50% 이상 보인 횟수입니다. 동영상 조회수는 생성된 지 1800일 이하인 게시물에 대해서만 제공됩니다. 1800일보다 오래된 게시물에 대해 동영상 조회수를 요청하면, 응답에는 요청한 다른 지표를 담은 별도의 객체와 함께 다음 객체가 포함됩니다: “unsupported_for_video_views_tweet_ids”: [“TWEET_ID”] 주의: X가 소유·운영하는 플랫폼(모바일 App 및 웹사이트)에 표시되는 동영상 조회수 지표와 /28hr 및 /historical 엔드포인트를 통해 받는 수치 사이에는 차이가 발생할 수 있습니다. * X 사용자 인터페이스와 /totals 엔드포인트에 표시되는 동영상 조회수는, 해당 동영상이 게시된 모든 게시물을 기준으로 집계된 동영상 조회수를 나타냅니다. 즉, UI에 표시되는 이 지표에는 동영상이 리트윗되었거나 별도의 게시물로 재게시된 모든 경우의 조회수가 합산되어 포함됩니다. 이 지표에는 GIF의 동영상 조회수는 포함되지 않습니다. * /28hr 및 /historical 엔드포인트에서 제공되는 동영상 조회수는, 지표를 조회 중인 특정 게시물에서 발생한 조회수만을 포함합니다. 이 지표에도 GIF의 동영상 조회수는 포함되지 않습니다. |
| media_views | /28hr /historical | 예 | 동영상, GIF, 이미지 등을 포함하여, 자동 재생되거나 사용자가 클릭해 미디어가 재생되거나 조회된 모든 횟수입니다. |
| media_engagements (이전 명칭: Media Clicks) | /28hr /historical | 예 | 게시물에 포함된 이미지나 동영상 등의 미디어가 클릭된 총 횟수입니다. |
| url_clicks | /28hr /historical | 예 | 게시물에 포함된 URL이 클릭된 총 횟수입니다. |
| hashtag_clicks | /28hr /historical | 예 | 게시물에서 해시태그가 클릭된 횟수입니다. |
| detail_expands | /28hr /historical | 예 | 게시물의 세부 정보를 더 보기 위해 게시물이 클릭된 횟수입니다. |
| permalink_clicks | /28hr /historical | 예 | 게시물에 대한 퍼머링크(해당 게시물 전용 웹페이지)가 클릭된 횟수입니다. |
| app_install_attempts | /28hr /historical | 예 | 게시물에서 앱 설치 이벤트가 발생한 횟수입니다. |
| app_opens | /28hr /historical | 예 | 게시물에서 앱 열기 이벤트가 발생한 횟수입니다. |
| email_tweet | /28hr /historical | 예 | 게시물이 이메일을 통해 공유된 횟수입니다. |
| user_follows | /28hr /historical | 예 | 이 게시물을 통해 사용자(게시물 작성자)가 팔로우된 횟수입니다. |
| user_profile_clicks | /28hr /historical | 예 | 이 게시물을 통해 사용자(게시물 작성자)의 프로필이 클릭된 횟수입니다. |
참여 그룹화(Engagement groupings)
- tweet.id
- engagement.type
/28hr 및 /historical 엔드포인트는 시계열 지표를 제공할 수 있으므로, 다음도 지원합니다:
- engagement.day
- engagement.hour
가이드
개발자 시작하기 가이드
소개
Engagement API는 무엇을 제공하나요?
- Engagement API는 3-legged OAuth를 사용해 해당 계정이 귀하의 App이 자신을 대신해 메트릭을 요청하도록 승인했다는 전제하에, 지난 90일 동안 특정 X 계정이 소유한 포스트에 대한 노출 수와 참여 데이터를 제공합니다. 이 강력하면서도 구현이 쉬운 솔루션을 통해 노출 수는 물론 URL 클릭, #해시태그 클릭 등 다양한 심층 참여 지표에 즉시 접근할 수 있습니다.
- Engagement API는 모든 게시물에 대해 좋아요, Retweets, Quote Tweets, 답글, 동영상 조회수의 총 집계 메트릭을 제공합니다. 이를 통해 개별 게시물 또는 포스트 모음에 대한 기본적인 참여 데이터를 효과적으로 수집할 수 있습니다.
- Engagement API는 15개 이상의 성과 메트릭을 사용해 콘텐츠 성과를 효과적으로 측정함으로써, 소셜 리스닝, 마케팅, 퍼블리싱 플랫폼이 X에서의 ROI를 측정할 수 있도록 새로운 가치를 제공합니다.
- Engagement API는 요청/응답 API로서, 앱 개발자가 게시물 id, 원하는 메트릭, 그리고 기간을 지정해 요청을 보내면 API가 해당 데이터를 즉시 반환할 수 있게 해줍니다.
왜 통합해야 하나요? 예시 사용 사례
- 내 콘텐츠의 전체 도달 범위를 파악해 얼마나 많은 사람이 보는지 이해합니다. 얼마나 많은 사람이 동영상을 시청하고, 링크를 클릭하고, 해시태그를 클릭하며, 내 앱을 설치하는지 확인합니다.
- 전체 및 시계열 기반 참여 지표를 생성합니다.
- 모든 공개 게시물에 대해 기본적인 참여 지표(즐겨찾기, 리트윗, 인용 Tweet, 답글)를 파악합니다.
- 이러한 지표를 활용해 어떤 유형의 게시물이 효과적인지 판단하고, 그런 게시물을 더 자주 올려 콘텐츠의 노출과 참여를 더 많이 얻습니다.
- 내 게시물 중 하나가 ‘좋아요’ 100개 또는 다른 임계값에 도달할 때마다(예: 다른 소유 계정의 콘텐츠를 리트윗하는 등) 마케팅 작업을 자동화합니다.
- A/B 테스트 도구로 활용하기 위해 캠페인 간 성과를 비교·벤치마킹합니다.
- 고객 지원 부서에 어떤 유형의 콘텐츠가 반응을 이끌어내는지 분석하여, 어떻게 그리고 언제 응답할지 결정합니다.
- 내 플랫폼에서 게시된 콘텐츠에 대한 분석을 표시합니다.
Engagement API 연동
API 소개
- Post ID 배열
- 관심 있는 metric types를 지정하는 배열. type에는
impressions,retweets,hashtag_clicks,user_follows등이 포함됩니다. - API 응답에서 참여 데이터가 어떻게 구성되기를 원하는지 나타내는 JSON 구조인 Engagement groupings.
- Totals - 포스트에 대한 참여 총합을 제공합니다. 일부 메트릭은 모든 포스트에 대해 사용 가능하지만, 다른 메트릭은 최근 90일에 대해서만 사용 가능합니다.
- 28 hour - 최근 28시간 동안의 시계열 참여 메트릭을 제공합니다.
- Historical - 2014년 9월 1일 이후에 게시된 포스트에 대해, 최대 연속 4주 동안의 시계열 참여 메트릭을 제공합니다.
API 액세스 권한 받기
요청 보내기
1/ Today we’re sharing our vision for the future of the X API platform— Twitter Dev (@TwitterDev) April 6, 2017
Don’t miss the Posts about your Post. Now on iOS, you can see Retweets with comments all in one place. pic.x.com/oanjZfzC6y — X (@X) May 12, 2020첫 번째 단계는 JSON 형식의 API 요청을 구성하는 것입니다. 여기에는 배열로 담긴 두 개의 게시물 id, 관심 있는 참여 유형 배열, 그리고 응답에서 지표를 어떻게 구성해 제공받을지를 나타내는, 사용자 정의 이름의 “groupings” JSON 객체가 포함됩니다. 이 요청은 다음과 같은 형태가 됩니다:
https://data-api.x.com/insights/engagement/totals 엔드포인트에 이 JSON 요청을 POST합니다.
요청 본문이 JSON으로 인코딩되었고 gzip으로 압축되었음을 나타내기 위해 다음 헤더를 포함합니다(요청 본문이 매우 커질 수 있습니다).
- Content-Type: application/json
- Accept-Encoding: gzip
OAuth로 인증하기
Engagement API 엔드포인트 선택하기
- Totals - ‘owned’ 또는 ‘unowned’ 포스트에서 선택된 지표의 총계를 제공합니다. 일부 지표는 모든 포스트에 대해 제공되지만, 다른 지표는 최근 90일 이내에 게시된 포스트에 대해서만 제공됩니다. 요청당 최대 250개의 포스트를 지원합니다.
- 28 hour - 최근 28시간 동안의 ‘owned’ 포스트에 대한 시계열 Engagement 지표를 제공합니다. 요청당 최대 25개의 포스트를 지원합니다.
- Historical - 2014년 9월 1일 이후에 게시된 ‘owned’ 포스트에 대해, 최대 4주 연속 기간에 대한 시계열 Engagement 지표를 제공합니다. 요청당 최대 25개의 포스트를 지원합니다.
핵심 개념
노출 및 참여 지표
소유 및 비소유 X 콘텐츠
/totals 엔드포인트는 소유 및 비소유 포스트 모두에 대한 Engagement 데이터를 제공합니다. 비소유 포스트의 경우, 포스트 화면에 공개적으로 표시되는 Favorite, Retweet, Reply와 같은 Engagement 지표를 요청할 수 있습니다. 이러한 지표와 관련해 Engagement API가 제공하는 가치는, 이 지표들을 자동화된 방식으로 대규모로 조회할 수 있는 기능입니다. 소유 포스트의 경우 /totals 엔드포인트는 Impression과 (총) Engagement 지표도 함께 제공합니다.
/28hr 및 /historical 엔드포인트는 소유 포스트에 대한 지표만 제공하며, 이는 이 엔드포인트들에 요청을 보낼 때 사용자 컨텍스트를 함께 전달해야 함을 의미합니다.
총합 및 시계열 참여 데이터
엔드포인트 및 예시 사용 사례
/totals
- 일부 메트릭 type(Impressions, Engagements, Favorites, Retweets, Quote Tweets, Replies, Video Views)에만 액세스하면 된다.
- 소유한 포스트뿐만 아니라 모든 포스트에 대해 기본 참여 데이터를 조회해야 한다.
- 경쟁사와 성과를 비교하고 싶다.
- 내가 소유하지 않은 포스트를 포함하는 해시태그나 캠페인의 기본 참여 통계를 추적하고 싶다.
- 일별이나 시간별로 분리된 데이터는 필요 없고, 요청 시점의 현재 합계만 필요하다.
- 보고서나 대시보드에 표시할 단일 메트릭만 필요하고, 데이터를 별도로 저장하고 싶지 않다.
- 페이지 로드 시점에 데이터를 표시하고 싶으며, 요청 한 번으로 응답만 받으면 된다.
- 하루에 수십만 혹은 수백만 개의 포스트에 대한 데이터를 조회해야 한다.
/28hr
- 모든 17가지 metric type에 대한 액세스가 필요합니다.
- 지난 28시간 동안 게시된 최신 포스트의 데이터를 보고 싶습니다.
- 하루에 한 번 제가 필요한 데이터를 가져오는 작업이 있어서, 전날 하루치 데이터만 가져오면 됩니다.
- 일(day) 또는 시간(hour) 단위로 세분화된 metric이 필요합니다.
- 대시보드에서 시간(hour) 단위로 활동 시계열 분포를 보여주고 싶습니다.
- 하루에 수십만 개 포스트에 대해 고용량 액세스가 필요합니다.
- 저장소 용량이 있어서 데이터를 하루에 한 번 갱신하고 누적 집계를 유지할 수 있습니다.
/historical
- 17개 메트릭 type 전체에 대한 접근 권한이 필요합니다.
- 2014년 9월까지 거슬러 올라가는 포스트 생성 과거 데이터를 조회해야 합니다.
- 캠페인을 비교하는 상세한 과거 분석을 보여주고 싶습니다.
- 메트릭이 일 단위 또는 시간 단위로 세분화되어야 합니다.
- Engagement API에 대한 높은 수준의 접근 권한은 필요 없으며, 하루에 수백 개 또는 수천 개의 포스트 데이터만 조회하면 됩니다.
Engagement API의 주요 특성
- JSON 데이터를 제공하는 RESTful API로, JSON 본문을 가진 POST 요청을 지원합니다.
- 요청 유형: 클라이언트 App은 다음과 같은 유형의 요청을 보낼 수 있습니다.
- 총 참여 수 조회 — /totals 엔드포인트로의 HTTP POST 요청
- 최근 28시간 참여 수 조회 — /28hr 엔드포인트로의 HTTP POST 요청
- 히스토리컬(과거) 참여 수 조회 — /historical 엔드포인트로의 HTTP POST 요청
- OAuth 인증:
- OAuth 1.0 사용자 컨텍스트: 사용자가 3-legged OAuth를 통해 귀하의 App을 승인한 경우, 해당 사용자가 소유한 게시물에 대해 제공되는 모든 메트릭을 조회할 수 있습니다. 요청을 보낼 때는 해당 사용자의 Access Token을 사용해야 합니다.
- OAuth 2.0 Bearer 토큰: 선택된 메트릭(리트윗, 인용 Tweet, 답글, 즐겨찾기, 동영상 조회수)은 모든 공개 게시물에 대해 사용할 수 있습니다.
- 요청 메타데이터 및 구조: 요청 데이터는 게시물 id 배열, 참여 유형 배열, 참여 그룹화 구조로 구성된 JSON 객체입니다.
- 요청당 게시물 수:
- /totals 엔드포인트: 게시물 id 250개
- /28hr 엔드포인트: 게시물 id 25개
- /historical 엔드포인트: 게시물 id 25개
- 참여 메트릭 가용성:
- /totals — 게시물이 게시된 시점부터의 메트릭 총합입니다. 노출수(Impressions)와 참여수(Engagements)는 최근 90일 이내에 게시된 게시물에 대해서만 제공되며, 리트윗, 인용 Tweet, 답글, 즐겨찾기, 동영상 조회수는 모든 포스트에 대해 제공됩니다.
- /28hr — 요청 시점으로부터 직전 28시간입니다.
- /historical — 2014년 9월 1일부터 시작하는 임의의 28일 기간입니다.
- 메트릭 유형: 각 요청에는 Metric Types 배열이 포함됩니다. 가용성은 엔드포인트에 따라 다르며, /totals 엔드포인트에서 요청하는 경우에는 게시물이 사용자 권한 기반인지 여부에 따라 달라집니다.
- /totals 엔드포인트:
- 모든 포스트: 즐겨찾기, 리트윗, 인용 Tweet, 답글, 동영상 조회수
- OAuth 1.0a 사용자 컨텍스트 필요: 노출수(Impressions), 참여수(Engagements), 즐겨찾기, 답글, 리트윗
- /28hr 및 /historical 엔드포인트 (게시물 소유자의 Access Token을 사용하는 OAuth 1.0a 사용자 컨텍스트 필요): 노출수(Impressions), 참여수(Engagements), 즐겨찾기, 답글, 리트윗, URL 클릭, 해시태그 클릭, 상세 보기 클릭, 퍼머링크 클릭, 미디어 클릭, App 설치 시도, App 열기, 게시물 이메일, 동영상 조회수, 미디어 조회수
- /totals 엔드포인트:
- 참여 그룹화(Engagement groupings): 각 요청에는 Engagement Groupings 배열이 포함됩니다. 이 그룹화를 사용하면 반환되는 메트릭의 구성 방식을 사용자 정의할 수 있습니다. 요청 하나당 최대 세 개의 그룹화를 포함할 수 있습니다. 메트릭은 다음 값 기준으로 구성할 수 있습니다.
- 모든 엔드포인트: 게시물 id, 참여 유형
- /28hr 및 /historical 엔드포인트: 다음 추가 그룹화를 지정하면 시계열 데이터(time-series)를 제공합니다: 참여 일자, 참여 시간
- 통합 시 기대 사항: 귀하의 팀은 다음 항목에 대한 책임을 집니다.
- Engagement API에 HTTP 요청을 보내고, 요청에 포함된 게시물 id에 대한 참여 메트릭을 반환할 수 있는 클라이언트 App을 생성 및 유지 관리합니다.
- 제한 사항
- 동영상 조회수는 게시된 지 1,800일 이하인 포스트에 대해서만 제공됩니다.
Engagement API 인증
유의 사항: Engagement API를 사용하기 전에 X에서 개발자 App에 대해 Engagement API 접근 권한을 활성화해야 합니다. 이를 위해 인증에 사용할 App ID를 계정 관리자 또는 기술 지원 팀과 반드시 공유해 주십시오.Engagement API에는 두 가지 인증 방법이 있습니다: OAuth 1.0a와 OAuth 2.0 Bearer Token입니다. OAuth 2.0 Bearer Token(“애플리케이션 전용(application-only)”이라고도 함)을 사용하면 공개로 제공되는 참여(engagement) 지표에 액세스할 수 있습니다. 이 인증 방식은 /totals 엔드포인트에 요청을 보낼 때, 공개적으로 이용 가능한 포스트에 대해 Favorites(즉, Likes), Retweets, Quote Tweets, Replies 및 동영상 조회수의 총합을 가져오는 데 사용할 수 있습니다. OAuth 1.0a(“사용자 컨텍스트(user context)”라고도 함)를 사용하면 사용자를 대신하여 요청을 보내고, 해당 사용자에게 속한 비공개 참여 지표에 액세스할 수 있습니다. 이 인증 방식은 다음과 같은 경우에 필요합니다:
- /28hr 엔드포인트 및 /historical 엔드포인트로 전송되는 모든 요청
- 다음과 같은 비공개 지표에 액세스하는 모든 경우: Impressions, Engagements, Media Views, Media Engagements, URL Clicks, Hashtag Clicks, Detail Expands, Permalink Clicks, App Install Attempts, App Opens, Email Post, User Follows, User Profile Clicks
403 Forbidden 오류를 반환합니다.
Engagement API는, 해당 포스트의 소유 사용자를 대신하여 인증하더라도 보호된 포스트의 참여 데이터를 가져오는 것을 허용하지 않습니다. 이렇게 시도하면 "Tweet ID(s) are unavailable"라는 메시지와 함께 400 Bad Request 오류가 반환됩니다.
자신의 X 계정(즉, 개발자 App을 소유한 계정)을 대신하여 요청을 보내는 경우, 개발자 콘솔의 해당 개발자 App에 대한 “Keys and tokens” 탭에서 필요한 Access Tokens를 직접 생성할 수 있습니다.
다른 사용자를 대신하여 요청을 보내는 경우, 필요한 Access Tokens를 얻기 위해 3-legged OAuth 플로우를 사용해야 합니다. 이 작업 방법에 대한 자세한 내용은 다음 문서를 참고하십시오: OAuth 1.0a: how to obtain a user’s access tokens.
추가 예제(여기에는 OAuth 1.0a를 사용한 인증 방법도 포함됨)를 보려면, XDevelopers의 Engagement API용 Python 샘플 코드를 확인하십시오.
Engagement API의 최신 변경 사항
| Metric | Change |
| engagements | 전체 engagements에 포함되는 세부 지표를 업데이트하여 Post 분석 대시보드와의 일관성을 맞췄습니다. Engagements는 “사람들이 이 게시물과 상호작용한 횟수(times people interacted with this Post)”를 측정합니다. 동영상 또는 GIF와 같은 미디어가 포함된 게시물의 경우, engagements 지표에는 더 이상 media views가 포함되지 않습니다. Media views는 이제 _media_views_라는 새로운 지표를 통해 확인할 수 있습니다. |
| media_clicks* | 이 지표는 “media_engagements”라는 새로운 지표로 대체되었습니다. |
| video_views | 2018년 7월 6일부터 이 지표는 /totals 엔드포인트를 통해 ‘unowned’ 포스트에도 사용할 수 있습니다. 이는 app-only 인증을 사용해 모든 포스트에 대한 동영상 조회 수에 접근할 수 있음을 의미합니다. video views는 최대 1800일 이내의 게시물에 대해서만 요청할 수 있습니다. 1800일보다 오래된 게시물에 대해 video views를 요청하려고 하면 다음과 같은 응답을 받게 됩니다: “unsupported_for_video_views_tweet_ids”: [“TWEET_ID”] 주의: video_views는 동영상의 50% 이상이 최소 2초 동안 화면에 노출되어야 조회로 집계된다는 MRC 표준에 기반하기 때문에 media_views와 값이 다를 수 있습니다. 또한 X의 자체 플랫폼(모바일 App 및 웹사이트)에 표시되는 video views 지표와, /28hr 및 /historical 엔드포인트를 통해 받는 숫자 사이에 차이가 있을 수 있습니다. * X 사용자 인터페이스와 /totals 엔드포인트를 통해 제공되는 video views는 해당 동영상이 게시된 모든 포스트를 합산한 조회 수를 표시합니다. 즉, UI에 표시되는 지표는 해당 동영상이 리트윗되었거나 별도의 포스트로 재게시된 모든 경우의 조회 수를 합산한 값입니다. * /28hr 및 /historical 엔드포인트를 통해 제공되는 video views는 여러분이 지표를 조회하는 특정 포스트에서 발생한 조회 수만 포함합니다. |
| media_views | 동영상, vine, gif, 이미지 전반에서 자동 재생 및 클릭을 포함한 모든 미디어 조회를 합산한 값입니다. 주의: 이미지가 포함된 게시물의 경우 analytics 대시보드에서는 media_views 지표가 표시되지 않지만, Engagement API에서는 해당 값이 반환됩니다. |
| media_engagements* | 동영상, vine, gif, 이미지 전반에서 미디어에 대한 클릭 수를 포함합니다. 이 지표는 _media_clicks_를 대체합니다. |
| quote_tweets | 2020년 7월 7일부터 이 지표는 /totals 엔드포인트를 통해 ‘unowned’ 포스트에도 사용할 수 있습니다. 이는 app-only 인증을 사용하여 모든 포스트에 대한 인용 게시물(Quote Post) 수에 접근할 수 있음을 의미합니다. |
메트릭 해석하기
노출수 및 참여 데이터
비디오 지표
- /totals 엔드포인트와 X 사용자 인터페이스에서 제공되는 비디오 조회수는 특정 비디오가 게시된 모든 포스트에 걸쳐 집계된 비디오 조회수를 표시합니다. 즉, /totals를 통해 전달되고 X UI에 표시되는 지표에는 해당 비디오가 리트윗되었거나 별도의 포스트로 다시 게시된 모든 경우의 조회수가 합산되어 포함됩니다.
- /28hour 및 /historical Engagement API 엔드포인트에서 제공되는 비디오 조회수는 사용자가 지표를 조회하는 특정 포스트에서 발생한 조회수만 포함합니다.
Engagement API 그룹화
- tweet.id
- engagement.type
/28hr 및 /historical 엔드포인트는 시계열(time-series) 지표를 제공할 수 있으므로, 다음도 지원합니다:
- engagement.day
- engagement.hour
group_by 값들의 순서를 변경하여 원하는 결과 형식을 바꿀 수 있습니다. 네 개의 group_by 값을 사용하는 그룹화는 다음 두 가지 형식 중 하나에서만 지원됩니다:
"Grand Totals" 속성이 포함되며, 여기에는 지표 type별 전체 합계가 담깁니다.
"Tweets_MetricType_TimeSeries" 속성이 포함되며, 여기에는 먼저 게시물 ID별로, 그다음 메트릭 type별로 구분된 메트릭과 해당 시간 단위 시계열이 담깁니다.
자주 묻는 질문
Enterprise
Engagement API
Engagement API에는 어떻게 액세스할 수 있나요?
Engagement API에는 어떻게 액세스할 수 있나요?
Engagement API 액세스는 엔터프라이즈 구독을 통해 제공됩니다. 영업 팀과 연락하기 위해 이 양식을 작성해 주세요.
내 사용량은 '@handle' 기준으로 어떻게 추적되나요?
내 사용량은 '@handle' 기준으로 어떻게 추적되나요?
계약에 Engagement API와 함께 사용할 수 있는 고유 handle 개수에 대한 한도가 포함되어 있는 경우, 내부 X 시스템은 Engagement API로 조회된 게시물을 소유한 인증된 사용자 수를 추적합니다. 고객도 클라이언트 측에서 이 고유한 수치를 직접 추적해야 합니다. 현재 Engagement API의 @handle 사용량을 확인할 수 있는 사용량 API 또는 UI는 없습니다. 계약된 양보다 더 많은 @handle이 요청되더라도 시스템이 이를 차단하지는 않습니다. 청구 월이 끝나면 조회된 고유 @handle 수가 계약된 수량과 비교되며, 계약 조건에 따라 초과 사용량이 청구됩니다.
Engagement API에 대한 @handle 사용량을 확인할 수 있나요?
Engagement API에 대한 @handle 사용량을 확인할 수 있나요?
현재 Engagement API의 @handle 사용량을 확인할 수 있는 사용량 API 또는 UI는 없습니다. 계약된 양보다 더 많은 @handle이 요청되더라도 시스템이 이를 차단하지는 않습니다. 청구 월이 끝나면 조회된 고유 @handle 수가 계약된 수량과 비교되며, 계약 조건에 따라 초과 사용량이 청구됩니다.페이로드에 반환된
engagements 메타데이터 필드가 다양한 참여(engagement) 지표 합계의 총합과 같지 않습니다. 왜 그런가요?이는 정상적인 동작입니다. engagements 메타데이터 필드는 API가 반환하는 개별 참여 지표 합계와 항상 일치하지 않을 수 있습니다. 이는 engagements 메타데이터 필드에 페이로드에서 별도 지표로 분리되어 있지 않은 추가 참여가 포함될 수 있기 때문입니다. 다시 말해, 다양한 참여 지표의 총합을 모두 더하더라도 페이로드의 engagements 메트릭 필드에 반환되는 값과 일치하지 않을 수 있습니다.engagements 메타데이터 필드는 게시물에 대해 발생한 모든 클릭 또는 상호작용으로 이해하시면 됩니다.
페이로드 응답의 url_clicks 필드가 숫자를 반환하지만, 실제로 해당 게시물에는 URL이 없습니다. 어떻게 이런 일이 가능한가요?이는 해시태그처럼 다른 페이지로 연결되는 링크를 생성하는 요소를 포함한 게시물에서, 사용자가 이 요소를 클릭한 경우 URL 클릭으로 집계되기 때문일 수 있습니다.
특정 게시물에 대한 참여 데이터를 받을 수 없는 이유는 무엇인가요?
특정 게시물에 대한 참여 데이터를 받을 수 없는 이유는 무엇인가요?
특정 게시물에 대한 참여 데이터를 검색할 수 없는 이유는 여러 가지가 있으며, 다음을 포함합니다:
- 타사 대신 데이터를 조회하기 위해 사용 중인 인증 토큰 기준으로, 요청한 게시물 ID가 사용 가능하지 않은 경우
- /totals 엔드포인트에 대해 요청한 게시물 ID가 90일 이내의 게시물이 아니어서 노출수(impressions) 또는 참여 지표를 반환할 수 없는 경우
- 요청한 게시물 ID가 더 이상 사용 가능하지 않은 경우로, 일반적으로 삭제되었거나 다른 이유로 더 이상 공개적으로 제공되지 않음을 의미합니다.
Engagement API에서 레이트 리밋(rate limiting)은 어떻게 처리할 수 있나요?
Engagement API에서 레이트 리밋(rate limiting)은 어떻게 처리할 수 있나요?
Engagement API에 요청을 보낼 때 응답 헤더에 반환되는
x-per-minute-limit 및 x-per-minute-remaining 정보를 사용하여 사용량을 모니터링할 수 있습니다.x-per-minute-limit는 허용량을, x-per-minute-remaining은 남은 호출 횟수를 알려줍니다.오류 해결 가이드
인증에 문제가 있습니다
인증에 문제가 있습니다
Engagement API에 대한 인증 가이드라인을 반드시 검토해 주세요.
올바른 consumer key와 secret, 그리고 access token과 access token secret을 전달했는데도 다음 오류가 반환됩니다. 어떻게 해야 하나요?
올바른 consumer key와 secret, 그리고 access token과 access token secret을 전달했는데도 다음 오류가 반환됩니다. 어떻게 해야 하나요?
원하시는 정보를 아직 찾지 못하셨나요?
아직 답을 찾지 못한 질문이 있습니다
아직 답을 찾지 못한 질문이 있습니다
기술 지원 팀으로 문의해 주시면 신속하게 답변드리겠습니다.
API 참조 문서
POST insights/engagement
메서드
| Method | Description |
|---|---|
| POST /insights/engagement/totals | Tweet 모음에 대한 총 노출 수와 참여 수를 조회합니다. |
| POST /insights/engagement/historical | 최대 4주 기간에 대해, 2014년 9월 1일까지 소급하여 Tweet 모음의 노출 수와 참여 수를 조회합니다. |
| POST /insights/engagement/28hr | 지난 28시간 동안의 Tweet 모음에 대한 노출 수와 참여 수를 조회합니다. |
Authentication
- 소유한 Tweet에 한정되는 Impressions 및 Engagements 지표 type을 얻기 위한 /totals에 대한 모든 요청
- /28hr에 대한 모든 요청
- /historical에 대한 모든 요청
- 모든 Tweet에 대해 조회할 수 있는 Favorites, Replies, Retweets 또는 Video Views 지표 type을 얻기 위한 /totals에 대한 모든 요청
POST /insights/engagement/totals
totals 엔드포인트를 사용하면 한 번의 요청으로 최대 250개의 Tweet에 대한 현재 총 노출 수와 참여 수를 조회할 수 있습니다.
| 요청 메서드 | HTTP POST |
| URL | https://data-api.x.com/insights/engagement/totals |
| 콘텐츠 유형 | application/json |
| 압축 | Gzip. Gzip 압축을 사용하여 요청하려면 연결 요청에 Accept-Encoding 헤더를 포함하세요. 헤더는 다음과 같이 설정합니다: Accept-Encoding: gzip |
| POST 요청 형식 | 요청은 본문에 여러 Tweet ID와 원하는 그룹핑이 포함된 JSON 객체를 담은 POST 요청으로 전송할 수 있습니다. POST 본문은 tweets, engagements, groupings 객체를 요소로 하는 배열 형식입니다. 각 요청에는 최대 250개의 Tweet ID를 포함할 수 있습니다. 예시 POST body는 다음과 같습니다. { “tweet_ids”: [ “Tweet ID 1”, “Tweet ID 2”, “Tweet ID 3” ], “engagement_types”: [ “impressions”, “engagements”, “favorites”, “quote_tweets” ], “groupings”: { “grouping name”: { “group_by”: [ “tweet.id”, “engagement.type” ] } } } |
| Tweet ID 목록 | 조회할 참여(engagement) 데이터에 대한 Tweet ID의 배열입니다. 인증에 사용된 @handle 계정이 작성한 Tweet에 대해서만 데이터를 요청할 수 있습니다. 요청당 최대 250개의 Tweet을 포함할 수 있으며, Tweet ID는 문자열로 전달해야 합니다. |
| 참여 유형 | 질의할 참여 지표 유형을 포함하는 배열입니다. Totals 엔드포인트는 다음과 같은 참여 지표 유형만 지원합니다: impressions, engagements, favorites, retweets, quote_tweets, replies, video_views. /totals 엔드포인트를 사용하면 지난 90일 이내에 생성된 Tweet에 대해서는 impressions 및 engagements를, 그리고 어떤 Tweet이든 favorites, retweets, quote_tweets, replies, video_views를 조회할 수 있습니다. |
| 그룹화 | Engagement API의 결과는 다양한 방식으로 그룹화하여 반환할 수 있으므로, 요구 사항에 가장 잘 맞게 설정할 수 있습니다. 요청당 최대 3개의 grouping을 포함할 수 있습니다. 각 grouping에 대해, 애플리케이션에서 이 그룹 유형을 더 쉽게 참조할 수 있도록 사용자 지정 그룹 이름을 정의할 수 있습니다. 그룹 이름을 정의한 후에는 tweet.id 및/또는 engagement.type을 기준으로 그룹화하도록 선택할 수 있습니다. Groupings는 순차적으로 적용되므로, group_by 값의 순서를 변경하여 원하는 결과 형식을 변경할 수 있습니다. Tweet ID 및 지표 유형별로 구분된 지표를 보여 주는 grouping 예시는 다음과 같습니다. “groupings”: { “my grouping name”: { “group_by”: [ “tweet.id”, “engagement.type” ] } } |
| POST 요청 크기 제한 | 요청은 한 번에 최대 250개의 Tweet ID에 대해서만 보낼 수 있습니다. |
| 응답 형식 | JSON. 응답을 JSON 형식으로 받으려면 요청 헤더에 JSON 형식을 명시해야 합니다. |
| 요청 제한 | 액세스 수준과 계약 조건에 따라, 분 단위로 레이트 리밋이 적용됩니다. |
| 예시 요청 (공개 메트릭) | curl —request POST —url https://data-api.x.com/insights/engagement/totals —header ‘accept-encoding: gzip’ —header ‘authorization: Bearer ’ —header ‘content-type: application/json’ —data ’{ “tweet_ids”: [ “1070059276213702656”,“1021817816134156288”,“1067094924124872705” ], “engagement_types”: [ “favorites”,“retweets”,“replies”,“quote_tweets”,“video_views” ], “groupings”: { “perTweetMetricsUnowned”: { “group_by”: [ “tweet.id”, “engagement.type” ] } } } —verbose —compressed |
| 요청 예시 | curl —request POST —url https://data-api.x.com/insights/engagement/totals —header ‘accept-encoding: gzip’ —header ‘authorization: OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’ —header ‘content-type: application/json’ —data ’{ “tweet_ids”: [ “1060976163948904448”,“1045709644067471360” ], “engagement_types”: [ “favorites”,“replies”,“retweets”,“video_views”,“impressions”,“engagements” ], “groupings”: { “perTweetMetricsOwned”: { “group_by”: [ “tweet.id”, “engagement.type” ] } } }’ —verbose —compressed |
| 예시 응답 (공개 지표) | { “perTweetMetricsUnowned”: { “1021817816134156288”: { “favorites”: “530”, “quote_tweets”: “79”, “replies”: “147”, “retweets”: “323”, “video_views”: “0” }, “1067094924124872705”: { “favorites”: “1360”, “quote_tweets”: “29”, “replies”: “56”, “retweets”: “178”, “video_views”: “5754512” }, “1070059276213702656”: { “favorites”: “69”, “quote_tweets”: “5”, “replies”: “7”, “retweets”: “26”, “video_views”: “0” } } } |
| 응답 예시 | { “perTweetMetricsOwned”: { “1045709644067471360”: { “engagements”: “2”, “favorites”: “0”, “impressions”: “47”, “replies”: “0”, “retweets”: “8”, “quote_tweets”: “5”, “video_views”: “0” }, “1060976163948904448”: { “engagements”: “4”, “favorites”: “0”, “impressions”: “148”, “replies”: “1”, “retweets”: “9”, “quote_tweets”: “2”, “video_views”: “0” } } } |
| 이용할 수 없는 Tweet ID | 더 이상 제공되지 않는 Tweet ID(예: 삭제된 경우)를 포함하는 쿼리의 경우, 사용 가능한 모든 Tweet ID에 대해서는 해당 데이터가 반환되며, 사용 불가능한 Tweet ID는 unavailable_tweet_ids라는 배열에 포함됩니다. 예시: { “start”: “2015-11-17T22:00:00Z”, “end”: “2015-11-19T02:00:00Z”, “unavailable_tweet_ids”: [ “323456789” ], “group1”: { “423456789”: { “favorites”: “67”, “replies”: “8”, “retweets”: “26”, “quote_tweets”: “2” } } } |
POST /insights/engagement/28hr
| 요청 메서드 | HTTP POST |
| URL | https://data-api.x.com/insights/engagement/28hr |
| 콘텐츠 유형 | application/json |
| 압축 | Gzip. Gzip 압축을 사용해 요청하려면 연결 요청에 Accept-Encoding 헤더를 포함해 전송하십시오. 헤더 형식은 다음과 같습니다. Accept-Encoding: gzip |
| POST 형식 | 요청은 본문에 Tweet ID 모음과 원하는 그룹화를 포함하는 JSON 객체를 담은 POST 요청으로 전송할 수 있습니다. POST 본문은 tweets, engagements, groupings 객체로 이루어진 배열 형태입니다. 각 요청에는 최대 25개의 Tweet ID를 포함할 수 있습니다. 예시 POST 본문은 다음과 같습니다. { “tweet_ids”: [ “Tweet ID 1”, “Tweet ID 2”, “Tweet ID 3” ], “engagement_types”: [ “impressions”, “engagements”, “url_clicks”, “detail_expands” ], “groupings”: { “grouping name”: { “group_by”: [ “tweet.id”, “engagement.type”, “engagement.hour” ] } } } |
| Tweet ID 목록 | 조회하려는 Tweet의 참여(engagement) 데이터에 대한 Tweet ID 배열입니다. 인증에 사용한 @handle 계정이 작성한 Tweet에 대해서만 데이터를 요청할 수 있습니다. 28시간 엔드포인트는 요청 한 번당 최대 25개의 Tweet까지 지원하며, Tweet ID는 문자열로 표현해야 합니다. |
| 참여 지표 유형 | 조회할 참여 지표 유형을 담은 배열입니다. 28시간 엔드포인트의 경우 impressions, engagements 및 모든 개별 참여 유형이 지원되는 지표입니다. 지원되는 참여 지표의 전체 목록은 Engagement Data를 참고하세요. |
| 그룹화 | Engagement API의 결과는 요구 사항에 가장 잘 맞도록 서로 다른 그룹으로 반환될 수 있습니다. 하나의 요청당 최대 3개의 그룹을 포함할 수 있습니다. 각 그룹에 대해, 애플리케이션에서 이 그룹 유형을 더 쉽게 참조할 수 있도록 사용자 지정 그룹 이름을 정의할 수 있습니다. 그룹 이름을 정의한 후에는 다음 값들 중 하나 이상을 기준으로 그룹화하도록 선택할 수 있습니다: tweet.id engagement.type engagement.day engagement.hour 그룹은 순차적으로 처리되므로, group_by 값의 순서를 변경하여 원하는 결과 형식을 조정할 수 있습니다. 다음은 Tweet ID, 지표 유형, 날짜별로 분리된 지표를 보여주는 그룹화 예시이며, 형식은 다음과 같습니다: “groupings”: { “my grouping name”: { “group_by”: [ “tweet.id”, “engagement.type”, “engagement.day” ] } } 4개의 group_by 항목을 가진 그룹은 아래 두 가지 순서 중 하나를 사용할 때만 유효합니다. 단일 그룹 내에 4개의 group_by 항목이 있으면서 아래에 해당하지 않는 요청은 오류를 반환합니다. 또한, 요청당 4개의 group_by 항목을 가진 그룹은 하나만 허용됩니다. “group_by”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] “group_by”: [ “engagement.type”, “tweet.id”, “engagement.day”, “engagement.hour” ] |
| POST 요청 크기 제한 | 한 번에 최대 25개의 Tweet ID에 대해 요청할 수 있습니다. |
| 응답 형식 | JSON. 요청 헤더에서 응답 형식을 JSON으로 지정해야 합니다. |
| 요청 제한 | 계약서에 명시된 액세스 수준에 따라 분 단위 레이트 리밋이 적용됩니다. |
| 요청 예제 | curl -X POST “https://data-api.x.com/insights/engagement/28hr” -H ‘Accept-Encoding: gzip’ -H ‘Authorization OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’ -d ’{ “tweet_ids”: [ “123456789” ], “engagement_types”: [ “impressions”, “engagements” ], “groupings”: { “hourly-time-series”: { “group_by”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] } } }‘ |
| 응답 예시 | { “시작”:“2015-09-14T17:00:00Z”, “end”:“2015-09-15T22:00:00Z”, “hourly-time-series”:{ “123456789”:{ “impressions”:{ “2015-09-14”:{ “17”:“551”, “18”:“412”, “19”:“371”, “20”:“280”, “21”:“100”, “22”:“19”, “23”:“6” }, “2015-09-15”:{ “00”:“5”, “01”:“2”, “02”:“7”, “03”:“3”, “04”:“1”, “05”:“0”, “06”:“0”, “07”:“0”, “08”:“0”, “09”:“0”, “10”:“0”, “11”:“0”, “12”:“0”, “13”:“0”, “14”:“0”, “15”:“0”, “16”:“0”, “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0” } }, “engagements”:{ “2015-09-14”:{ “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0”, “22”:“0”, “23”:“0” }, “2015-09-15”:{ “00”:“0”, “01”:“0”, “02”:“0”, “03”:“0”, “04”:“0”, “05”:“0”, “06”:“0”, “07”:“0”, “08”:“0”, “09”:“0”, “10”:“0”, “11”:“0”, “12”:“0”, “13”:“0”, “14”:“0”, “15”:“0”, “16”:“0”, “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0” } } } } } |
| 사용 불가능한 Tweet ID | 사용할 수 없게 된 Tweet ID(예: 삭제된 경우)를 포함하는 쿼리를 실행하면, 사용 가능한 모든 Tweet ID에 대해서는 적절한 데이터가 반환되고, 사용할 수 없는 Tweet ID는 unavailable_tweet_ids라는 배열에 나열됩니다. 예를 들어: { “start”: “2015-11-17T22:00:00Z”, “end”: “2015-11-19T02:00:00Z”, “unavailable_tweet_ids”: [ “323456789” ], “group1”: { “423456789”: { “favorites”: “67”, “replies”: “8”, “retweets”: 26 } } } |
POST /insights/engagement/historical
| 요청 메서드 | HTTP POST |
| URL | https://data-api.x.com/insights/engagement/historical |
| 콘텐츠 유형 | application/json |
| 압축 방식 | Gzip. Gzip 압축을 사용하여 요청을 보내려면 연결 요청에 Accept-Encoding 헤더를 포함하세요. 헤더는 다음과 같이 지정합니다. Accept-Encoding: gzip |
| POST 요청 형식 | 요청은 POST 요청으로 전송할 수 있으며, 이때 body는 Tweet ID 컬렉션과 원하는 그룹화를 포함하는 JSON 객체입니다. POST body는 tweets, engagements, groupings 객체를 포함한 배열 형식으로 구성됩니다. 각 요청에는 최대 25개의 Tweet ID를 포함할 수 있습니다. 각 요청에는 최대 4주까지의 기간에 대해 사용자 지정 Start와 End 날짜를 지정할 수 있습니다. { “tweet_ids”: [ “Tweet ID 1”, “Tweet ID 2”, “Tweet ID 3” ], “engagement_types”: [ “impressions”, “engagements”, “url_clicks”, “detail_expands” ], “groupings”: { “grouping name”: { “group_by”: [ “tweet.id”, “engagement.type”, “engagement.hour” ] } } } |
| 시작 및 종료일 | 요청의 일부로 start 및 end 값을 사용하여 사용자 지정 시작일과 종료일을 지정할 수 있습니다. 시작일과 종료일은 기간이 4주를 초과하지 않도록 지정해야 합니다. 현재 설정할 수 있는 가장 이른 시작일은 2014년 9월 1일입니다. 미래 시점의 종료일은 지원되지 않습니다. 시작일과 종료일을 제공하지 않으면 API는 직전 4주간을 기본값으로 사용합니다. Engagement API에서 데이터를 반환할 수 있는 가장 낮은 세분화 단위는 시간(hour)입니다. Start 또는 End 값이 정확히 정각 경계에 맞지 않는 요청의 경우, 요청은 가장 가까운 포함 정각으로 기본 설정됩니다. 예를 들어, “start”:“2015-07-01T12:24:00Z” 및 “end”:“2015-07-10T08:37:00Z” 값을 사용한 요청은 “start”:“2015-07-01T12:00:00Z”,“end”:“2015-07-10T09:00:00Z”으로 기본 설정됩니다. |
| Tweet ID | 조회할 참여(engagement) 데이터를 대상으로 하는 Tweet ID의 배열입니다. 인증을 수행한 @handle 계정이 작성한 Tweet에 대해서만 데이터를 요청할 수 있습니다. 최근 4주 조회 엔드포인트는 요청당 최대 25개의 Tweet만 지원하며, Tweet ID는 문자열로 전달해야 합니다. |
| 참여 유형 | 조회할 참여 지표 유형을 나열한 배열입니다. 4주 히스토리컬 엔드포인트에서는 impressions, engagements 및 모든 개별 참여 유형 지표가 지원됩니다. 지원되는 참여 지표의 전체 목록은 Engagement Data를 참조하세요. Note: 현재 2015년 9월 15일 이전 시점을 대상으로 쿼리하는 경우 favorites, replies, retweets 세 가지 지표는 0으로 표시됩니다. |
| 그룹화 | Engagement API의 결과는 요구 사항에 가장 잘 맞도록 여러 그룹으로 나누어 반환할 수 있습니다. 하나의 요청에는 최대 3개의 grouping을 포함할 수 있습니다. 각 grouping마다, 애플리케이션에서 이 grouping type을 더 쉽게 참조할 수 있도록 사용자 지정 grouping 이름을 정의할 수 있습니다. grouping 이름을 정의한 후에는 다음 값들 중 하나 이상을 기준으로 그룹화하도록 선택할 수 있습니다: tweet.id engagement.type engagement.day engagement.hour Groupings는 순차적으로 적용되므로, group_by 값의 순서를 변경하여 원하는 결과 형식을 바꿀 수 있습니다. 다음은 Tweet ID, 지표 type, 일(day)별로 구분된 metric을 보여주는 grouping 예시입니다: “groupings”: { “my grouping name”: { “group_by”: [ “tweet.id”, “engagement.type”, “engagement.day” ] } } 4개의 group_by 항목을 가진 grouping은 아래 두 가지 순서 중 하나를 사용할 때만 유효합니다. 하나의 grouping에서 4개의 group_by 항목을 사용하면서 아래 두 가지 순서 중 어느 것도 사용하지 않은 요청은 오류를 반환합니다. 추가로, 요청당 4개의 group_by 항목을 가진 grouping은 하나만 허용됩니다. “group_by”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] “group_by”: [ “engagement.type”, “tweet.id”, “engagement.day”, “engagement.hour” ] |
| POST 요청 한도 | 요청당 최대 25개의 Tweet ID까지 지정할 수 있습니다. |
| 응답 형식 | JSON. 요청 헤더에서 응답 형식으로 JSON을 지정해야 합니다. |
| 요청 제한 | 접근 수준과 계약 조건에 따라, 분(minute) 단위 Rate Limit(요청 한도)이 적용됩니다. |
| 요청 예시 | curl -XPOST “https://data-api.x.com/insights/engagement/historical” -H ‘Accept-Encoding: gzip’ -H ‘Authorization OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’ -d ’{ “start”: “2015-08-01”, “end”: “2015-08-15”, “tweet_ids”: [ “123456789”, “223456789”, “323456789” ], “engagement_types”: [ “impressions”, “engagements”, “url_clicks”, “detail_expands” ], “groupings”: { “types-by-tweet-id”: { “group_by”: [ “tweet.id”, “engagement.type” ] } } }‘ |
| 응답 예시 | { “start”: “2015-08-01T00:00:00Z”, “end”: “2015-08-15T00:00:00Z”, “types-by-tweet-id”: { “123456789”: { “impressions”: “0”, “engagements”: “0”, “url_clicks”: “0”, “detail_expands”: “0” }, “223456789”: { “impressions”: “788”, “engagements”: “134”, “url_clicks”: “30”, “detail_expands”: “1323” }, “323456789”: { “impressions”: “4”, “engagements”: “0”, “url_clicks”: “2”, “detail_expands”: “0” } } } |
| 사용할 수 없는 Tweet ID | 사용할 수 없게 된 Tweet ID(예: 삭제된 경우)가 포함된 쿼리의 경우, 사용 가능한 모든 Tweet ID에 대해서는 적절한 데이터가 반환되며, 사용할 수 없는 Tweet ID는 unavailable_tweet_ids라는 배열에 나열됩니다. 예를 들어:{ “start”: “2015-11-17T22:00:00Z”, “end”: “2015-11-19T02:27:50Z”, “unavailable_tweet_ids”: [ “323456789” ], “group1”: { “423456789”: { “favorites”: “67”, “replies”: “8”, “retweets”: 26 } } } |
응답 코드
| Status | Text | Description |
|---|---|---|
| 200 | OK | 요청이 성공적으로 처리되었습니다. |
| 400 | Bad Request | 일반적으로 이 응답은 요청에 유효하지 않은 JSON이 포함되어 있거나, 요청에서 JSON 페이로드를 전혀 보내지 않은 경우 발생합니다. |
| 401 | Unauthorized | 잘못된 자격 증명으로 인해 HTTP 인증에 실패했습니다. OAuth 키와 토큰을 확인하세요. |
| 404 | Not Found | 요청이 전송된 URL에서 리소스를 찾을 수 없습니다. 잘못된 URL을 사용했을 가능성이 큽니다. |
| 429 | Too Many Requests | 앱이 API 요청 한도를 초과했습니다. |
| 500 | Internal Server Error | Gnip 측에서 오류가 발생했습니다. 지수적 백오프 패턴을 사용하여 요청을 재시도하세요. |
| 502 | Proxy Error | Gnip 측에서 오류가 발생했습니다. 지수적 백오프 패턴을 사용하여 요청을 재시도하세요. |
| 503 | Service Unavailable | Gnip 측에서 오류가 발생했습니다. 지수적 백오프 패턴을 사용하여 요청을 재시도하세요. |
오류 메시지
| Error Message | Description |
|---|---|
"errors":["Your account could not be authenticated. Reason: Access token not found"] | 요청의 인증 구성 요소에서 발생한 오류입니다. “Reason” 항목에는 오류를 해결하는 데 도움이 되는 정보가 제공됩니다. 문제를 해결할 수 없는 경우, “Reason”을 포함한 전체 오류 메시지를 지원 팀에 보내 주세요. |
"errors":["1 Tweet ID(s) are unavailable"],"unavailable_tweet_ids": ["TWEET_IDS"] | 요청한 Tweet ID(들)를 더 이상 사용할 수 없습니다. 일반적으로 삭제되었거나, 다른 이유로 더 이상 공개적으로 제공되지 않음을 의미합니다. |
"errors":["Impressions & engagements for tweets older than 90 days (*TIME_PERIOD*) are not supported"],"unsupported_for_impressions_engagements_tweet_ids":[*TWEET_IDS*] | /totals 엔드포인트에 대해 요청한 Tweet ID(들)가 90일 이내에 생성된 Tweet이 아니므로, impressions 또는 engagements 지표를 반환할 수 없습니다. |
"errors":["Forbidden to access tweets: *TWEET_IDS*"] | 제3자를 대신해 데이터를 조회하기 위해 사용 중인 인증 토큰으로는, 요청한 Tweet ID(들)에 접근할 수 없습니다. |