메인 콘텐츠로 건너뛰기
다음 비교 가이드를 확인하세요:

X API: 엔터프라이즈 데이터 사전

Introduction

Enterprise 포스트는 X의 모든 것을 구성하는 가장 기본적인 원자 단위입니다. 포스트를 반환하는 모든 X API는 해당 데이터를 JavaScript Object Notation(JSON) 형식으로 인코딩해 제공합니다. JSON은 이름이 있는 속성과 그에 연결된 값으로 이루어진 키-값 쌍에 기반합니다. API에서 조회한 게시물 객체에는 X 사용자의 “status update”가 포함되지만, 리트윗, 답글, 인용 Tweet 역시 모두 게시물 객체입니다. 게시물이 리트윗, 답글 또는 인용 Tweet처럼 다른 게시물과 연관되어 있는 경우, 각각은 게시물 객체 안에 식별 정보로 포함되거나 중첩됩니다. 기본 X 데이터 형식에서 가장 단순한 게시물조차도 작성자, 멘션된 사용자, 태그된 장소(위치), 해시태그, 캐시태그 심볼, 미디어 또는 URL 링크와 같은 게시물의 다른 속성을 표현하기 위해 중첩된 JSON 객체를 포함합니다. X 데이터를 다룰 때는 이 개념을 이해하는 것이 중요합니다. X API에서 받게 되는 게시물 데이터의 형식은 수신한 게시물의 종류, 사용 중인 X API, 그리고 포맷 설정에 따라 달라집니다. 게시물 객체를 반환하는 Enterprise 엔드포인트는 게시물의 편집 이력을 이해하는 데 필요한 메타데이터를 제공하도록 업데이트되었습니다. 이러한 메타데이터에 대해 더 알아보려면 “게시물 편집” 기본 사항 페이지를 참고하세요.
네이티브 X 형식에서는 JSON 페이로드에 ‘루트 수준’ 속성과 {} 표기법으로 표시된 중첩 JSON 객체가 포함됩니다.
{
	"created_at": "Fri Feb 14 19:00:55 +0000 2020",
	"id_str": "1228393702244134912",
	"text": "개발자가 발렌타인 카드에 뭐라고 썼을까요?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

사용 가능한 데이터 형식

참고: 엔터프라이즈 데이터 API에는 Enriched Native 형식 사용을 강력히 권장합니다. 
  • Enriched Native 형식에는 poll 메타데이터를 비롯해 reply_count 및 quote_count와 같은 추가 지표 등 2017년 이후 추가된 모든 신규 메타데이터가 포함됩니다.
  • Activity Streams 형식은 2017년 문자 수 업데이트 이후로 새로운 메타데이터나 enrichment가 반영되지 않았습니다.
엔터프라이즈 데이터 API는 두 가지 서로 다른 형식으로 데이터를 제공합니다. 표준 v1.1 native 형식과 가장 유사한 엔터프라이즈 형식은 Native Enriched입니다. 레거시 엔터프라이즈 데이터 형식은 Activity Streams로, 당시 X 및 기타 소셜 미디어 데이터 제공업체 전반에서 공통 포맷으로 사용하기 위해 Gnip이 처음 구현한 정규화 형식입니다. 이 형식은 여전히 사용할 수 있지만, X는 2017년 이후로 새로운 기능 및 개발을 Native Enriched 형식에만 투자해 왔습니다. Enriched Native 형식은 이름 그대로, native X 객체에 더해 URL 언와인딩 메타데이터, 프로필 위치 정보(profile geo), poll 메타데이터, 추가 참여(engagement) 지표 등과 같은 엔터프라이즈 데이터 제품에서 제공되는 추가 enrichment를 포함합니다.  

데이터 형식별 객체 비교

어떤 X 사용 사례이든 간에, 이 JSON으로 인코딩된 게시물 객체와 속성이 무엇을 나타내는지 이해하는 것은 관심 있는 데이터 신호를 성공적으로 찾는 데 매우 중요합니다. 이를 돕기 위해, 각 데이터 형식의 각 객체를 다루는 전용 페이지들이 준비되어 있습니다. 위의 JSON 계층 구조를 반영하여, 각 객체에 대한 링크는 다음과 같습니다:
Native EnrichedActivity Streams
Link 게시물 객체Link Activity 객체
Link User 객체Link Actor 객체
Link Entities 객체Link X entities 객체
Link Extended entities 객체[Link]/x-api/enterprise-gnip-2.0/fundamentals/data-dictionary#x-extended-entities X extended entitites 객체
Link Geo 객체Link Location 객체
n/aLink Gnip 객체

파싱 모범 사례

  • X JSON은 UTF-8로 인코딩됩니다.
  • 파서는 필드 순서의 변동을 무리 없이 허용하도록 설계해야 합니다. 게시물 JSON은 순서가 없는 데이터 해시로 제공된다고 가정해야 합니다.
  • 파서는 ‘새로운’ 필드의 추가를 허용해야 합니다. 
  • JSON 파서는 ‘누락된’ 필드를 허용해야 합니다. 모든 필드가 모든 컨텍스트에 나타나는 것은 아니기 때문입니다.
  • 일반적으로 null로 설정된 필드, 빈 집합, 필드가 없는 경우를 동일한 것으로 간주해도 안전합니다.

엔터프라이즈 네이티브 Enriched 데이터 객체

Native Enriched Tweet 객체

X API v2 형식과 Native Enriched 데이터 형식 간의 매핑 방식에 대해 더 자세히 알고 싶으신가요? 비교 가이드를 참조하세요: Native Enriched compared to X API v2

게시물 객체

엔터프라이즈 데이터 제품을 사용할 때, 데이터 사전의 많은 부분이 게시물 데이터의 기본(native) 포맷과 유사하며, 여기에 추가로 강화(enriched) 메타데이터가 포함되어 있음을 알 수 있습니다. 기본 수준의 네이티브 강화 포맷은 X API v1.1 데이터 포맷과 상당 부분 동일한 객체 이름을 사용합니다. 게시물 객체에는 id, created_at, text와 같은 기본 속성을 포함한 ‘루트 수준’ 속성이 길게 나열됩니다. 게시물 객체에는 또한 user, entities, extended_entities를 포함하는 중첩 객체도 존재합니다. 게시물 객체는 retweeted_status, quoted_status, extended_tweet와 같은 중첩 게시물 객체도 포함합니다. 네이티브 강화 포맷에는 추가로 matching_rules 객체가 포함됩니다.
X Data Dictionary
아래에는 이러한 ‘루트 레벨’ 속성에 대한 데이터 사전과 하위 객체 데이터 사전에 대한 링크가 제공됩니다.
속성유형설명
created_atString이 게시물이 생성된 UTC 시간입니다. 예시:

“created_at”: “Wed Oct 10 20:19:24 +0000 2018”
idInt64이 게시물의 고유 식별자를 정수로 표현한 값입니다. 이 값은 53비트보다 크며, 일부 프로그래밍 언어에서는 이를 해석하는 과정에서 어려움을 겪거나 눈에 띄지 않는 결함이 발생할 수 있습니다. 이 식별자를 저장할 때는 부호 있는 64비트 정수를 사용하는 것이 안전합니다. 이 식별자를 안전하게 가져오려면 **id_str**를 사용하십시오. 자세한 내용은 X ID를 참조하세요. 예시:

“id”:1050118621198921728
id_strString이 게시물 고유 식별자의 문자열 표현입니다. 구현에서는 큰 정수 값인 id 대신 이 값을 사용해야 합니다. 예시:

“id_str”:“1050118621198921728”
textString게시물의 실제 UTF-8 텍스트입니다. 현재 어떤 문자가 유효한 것으로 간주되는지에 대한 자세한 내용은 X-text를 참조하세요. 예시:

“text”:“더 많은 표현이 가능하도록 이제 모든 이모지를 동일하게 계산합니다. 성별 및 피부 톤이 있는 이모지도 포함됩니다… https://t.co/MkGjXf9aXm
sourceString게시물을 게시하는 데 사용된 유틸리티를 나타내는 HTML 형식의 문자열입니다. X 웹사이트에서 작성된 포스트는 source 값이 **web**입니다.

예:

“source”:“X Web Client”
truncatedBooleantext 파라미터의 값이, 예를 들어 리트윗이 원본 게시물 텍스트 길이 제한인 140자를 초과하여 잘렸는지를 나타냅니다. 잘린 텍스트는 **...**와 같이 말줄임표로 끝납니다. 현재 X는 길이가 긴 포스트를 잘라내지 않고 거부하므로, 대부분의 포스트에서는 이 값이 false 로 설정됩니다. 네이티브 리트윗의 경우 최상위 text 프로퍼티가 축약될 수 있지만, 원본 텍스트는 retweeted_status 객체에서 확인할 수 있고, truncated 파라미터는 원본 상태의 값(대부분의 경우 false )으로 설정됩니다. 예시:

“truncated”:true
in_reply_to_status_idInt64null 허용. 해당 게시물이 답글인 경우, 이 필드에는 원래 게시물 ID의 정수 표현이 포함됩니다. 예:

“in_reply_to_status_id”:1051222721923756032
in_reply_to_status_id_strString널 허용. 해당 게시물이 답글인 경우, 이 필드에는 원본 게시물의 ID를 문자열로 표현한 값이 포함됩니다. 예시:

“in_reply_to_status_id_str”:“1051222721923756032”
in_reply_to_user_idInt64Nullable. 표시된 게시물이 답글인 경우, 이 필드는 원본 게시물 작성자 ID의 정수형 표현을 포함합니다. 이는 해당 게시물에서 직접 언급된 사용자와 항상 일치하는 것은 아닙니다. 예시:

“in_reply_to_user_id”:6253282
in_reply_to_user_id_strStringNullable. 해당 게시물이 답글인 경우, 이 필드는 원본 게시물 작성자 ID의 문자열 표현을 포함합니다. 이는 반드시 게시물에서 직접 멘션된 사용자와 일치하는 것은 아닙니다. 예:

“in_reply_to_user_id_str”:“6253282”
in_reply_to_screen_nameStringNullable. 표시된 게시물이 답글인 경우, 이 필드에는 원래 게시물 작성자의 스크린 이름이 포함됩니다. 예시:

“in_reply_to_screen_name”:“xapi”
userUser 객체이 게시물을 작성한 사용자입니다. 전체 속성 목록은 User 데이터 사전을 참조하세요.

일부 선택된 속성을 강조한 예시:

{ “user”: <br/> “id”: 6253282,
“id_str”: “6253282”,
“name”: “X API”,
“screen_name”: “API”,
“location”: “San Francisco, CA”,
“url”: “https://developer.x.com”,
“description”: “The Real X API. Tweets about API changes, service issues and our Developer Platform. Don’t get an answer? It’s on my website.”,
“verified”: true,
“followers_count”: 6129794,
“friends_count”: 12,
“listed_count”: 12899,
“favourites_count”: 31,
“statuses_count”: 3658,
“created_at”: “Wed May 23 06:01:13 +0000 2007”,
“utc_offset”: null,
“time_zone”: null,
“geo_enabled”: false,
“lang”: “en”,
“contributors_enabled”: false,
“is_translator”: false,
“profile_background_color”: “null”,
“profile_background_image_url”: “null”,
“profile_background_image_url_https”: “null”,
“profile_background_tile”: null,
“profile_link_color”: “null”,
“profile_sidebar_border_color”: “null”,
“profile_sidebar_fill_color”: “null”,
“profile_text_color”: “null”,
“profile_use_background_image”: null,
“profile_image_url”: “null”,
“profile_image_url_https”: “https://pbs.twimg.com/profile&#95;images/942858479592554497/BbazLO9L&#95;normal.jpg”,
“profile_banner_url”: “https://pbs.twimg.com/profile&#95;banners/6253282/1497491515”,
“default_profile”: false,
“default_profile_image”: false,
“following”: null,
“follow_request_sent”: null,
“notifications”: null
}
}
coordinatesCoordinatesnull 허용. 사용자 또는 클라이언트 애플리케이션에서 보고한 이 게시물의 지리적 위치를 나타냅니다. 내부 coordinates 배열은 geoJSON 형식으로, 경도가 먼저이고 그다음이 위도입니다. 예시:

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlacesNullable 값이 존재하는 경우, 게시물이 Place와 연관되어 있음을 나타내지만(반드시 해당 Place에서 생성되었다는 의미는 아님). 예:

“place”:
<br/> “attributes”:,
“bounding_box”:
<br/> “coordinates”:
[[
[-77.119759,38.791645],
[-76.909393,38.791645],
[-76.909393,38.995548],
[-77.119759,38.995548]
]],
“type”:“Polygon”
},
“country”:“United States”,
“country_code”:“US”,
“full_name”:“Washington, DC”,
“id”:“01fbe706f872cb32”,
“name”:“Washington”,
“place_type”:“city”,
“url”:“http://api.x.com/1/geo/id/0172cb32.json
}
quoted_status_idInt64이 필드는 해당 게시물이 인용 Tweet일 때에만 노출됩니다. 이 필드에는 인용된 Tweet의 게시물 ID를 나타내는 정수 값이 포함됩니다. 예시:

“quoted_status_id”:1050119905717055488
quoted_status_id_strString이 필드는 게시물이 인용 Tweet인 경우에만 노출됩니다. 이는 인용된 Tweet의 게시물 ID를 문자열로 표현한 값입니다. 예시:

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBoolean해당 게시물이 인용 Tweet인지 여부를 나타냅니다. 예:

“is_quote_status”:false
quoted_statusPost이 필드는 이 게시물이 인용 Tweet일 때에만 노출됩니다. 이 속성에는 인용된 원본 게시물의 Post 객체가 포함됩니다.
retweeted_status리트윗된 게시물사용자는 다른 사용자가 작성한 포스트를 리트윗하여 노출을 확대할 수 있습니다. 리트윗은 retweeted_status 속성의 존재 여부로 일반 포스트와 구분할 수 있습니다. 이 속성에는 리트윗된 원본 게시물의 표현이 포함됩니다. 리트윗을 다시 리트윗한 경우, 중간 리트윗의 표현은 포함되지 않고 원본 게시물만 표시된다는 점에 유의하세요. (사용자는 자신이 생성한 리트윗을 삭제하여 해당 리트윗을 취소할 수도 있습니다.)
quote_countIntegernull 허용. X 사용자가 이 게시물을 인용한 대략적인 횟수를 나타냅니다. 예:

“quote_count”:33

참고: 이 객체는 Premium 및 Enterprise 티어 제품에서만 사용할 수 있습니다.
reply_countInt이 게시물에 대한 답글 수입니다. 예:

“reply_count”:30

참고: 이 객체는 Premium 및 Enterprise 티어 제품에서만 제공됩니다.
retweet_countInt이 게시물이 리트윗된 횟수입니다. 예:

“retweet_count”:160
favorite_countIntegernull 가능. X 사용자들이 이 게시물에 좋아요를 누른 대략적인 횟수를 나타냅니다. 예시:

“favorite_count”:295
entitiesEntities게시물 텍스트에서 추출된 엔터티입니다. 자세한 내용은 X 객체의 Entities도 참조하세요. 예시:

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended Entities게시물에 네이티브 사진 1~4개 또는 동영상 1개 또는 애니메이션 GIF 1개가 포함된 경우, ‘media’ 메타데이터 배열을 포함합니다. 이는 인용 Tweet 에도 제공됩니다. 자세한 내용은 Entities in X Objects를 참조하세요. 예:

“entities”:
<br/> “media”:[]
}
favoritedBooleanNullable. 인증된 사용자가 이 게시물을 좋아요를 눌렀는지 여부를 나타냅니다. 예시:

“favorited”:true
retweetedBoolean이 게시물이 인증된 사용자가 리트윗했는지 여부를 나타냅니다. 예시:

“retweeted”:false
possibly_sensitiveBooleanNullable. 이 필드는 콘텐츠가 민감한 것으로 인식될 수 있음을 나타냅니다. 게시물 작성자는 자신의 계정 환경설정에서 “게시하는 미디어를 잠재적으로 민감한 콘텐츠로 표시” 옵션을 선택할 수 있으며, 이후 생성되는 각 게시물에는 이 플래그가 설정됩니다.

또한 내부 X 지원 담당자가 이를 검토해 라벨을 부여할 수도 있습니다.

”possibly_sensitive”:false
filter_levelString이 게시물을 스트리밍할 수 있는 filter&#95;level 매개변수의 최대 값을 나타냅니다. 따라서 값이 **medium**인 경우 none, low, medium 스트림에서 모두 스트리밍됩니다.

예시:

“filter_level”: “low”
langString널 허용. 값이 존재하면 자동으로 감지된 게시물 텍스트의 언어에 해당하는 BCP 47 언어 식별자를 나타내며, 언어를 감지할 수 없으면 **und**로 설정됩니다. 

 예시:

“lang”: “en”
edit_historyObject게시물의 모든 버전을 나타내는 고유 식별자입니다. 편집 내역이 없는 포스트의 경우 ID가 하나만 존재합니다. 편집 기록이 있는 포스트의 경우 여러 개의 ID가 있으며, 편집 순서를 반영해 오름차순으로 정렬되고, 배열의 마지막 위치에 가장 최신 버전이 위치합니다. 

해당 게시물 ID는 hydrate 작업과 이전 버전 게시물 조회에 사용할 수 있습니다.

예:

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObject존재하는 경우, 게시물이 얼마나 더 수정 가능한지와 남은 수정 횟수를 나타냅니다. 포스트는 생성 후 처음 30분 동안만 수정할 수 있으며, 최대 다섯 번까지 수정할 수 있습니다. 

게시물 ID는 게시물의 이전 버전을 복원하고 조회하는 데 사용할 수 있습니다.

예시:

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBoolean존재하는 경우, 게시물이 게시될 당시 수정 가능했는지를 나타냅니다. 이 필드는 동적으로 변경되지 않으며, 게시물이 수정 가능 시간 한도나 최대 수정 횟수에 도달하더라도 True에서 False로 전환되지 않습니다. 다음과 같은 게시물 특성이 있는 경우 이 필드는 False로 설정됩니다:

* 게시물이 프로모션(광고)된 경우
* 게시물에 투표가 포함된 경우
* 게시물이 자신이 시작한 스레드가 아닌 답글인 경우
* 게시물이 리트윗인 경우(인용 Tweet은 수정 가능합니다)
* 게시물이 널캐스트(nullcast)인 경우
* 커뮤니티 게시물인 경우
* 슈퍼 팔로우 게시물인 경우
* 공동 게시물인 경우
matching_rules규칙 객체의 배열X Search 및 PowerTrack와 같은 filtered 제품에서 사용됩니다. 게시물과 일치한 규칙과 연결된 idtag를 제공합니다. 일치 규칙에 대한 자세한 내용은 여기를 참조하세요. PowerTrack의 경우 하나의 게시물에 둘 이상의 규칙이 일치할 수 있습니다. 

예시:

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
추가 게시물 속성
포스트(예: GET statuses/lookup 엔드포인트)를 제공하는 X API에서는 다음과 같은 추가 게시물 속성이 포함될 수 있습니다:
AttributeTypeDescription
current_user_retweetObjectPerspectival include_my_retweet 매개변수를 지원하고 해당 값이 true로 설정된 메서드에서만 제공됩니다. 이 게시물에 대해 사용자가 한 리트윗(존재하는 경우)의 게시물 ID를 나타냅니다. 예시:

“current_user_retweet”: <br/> “id”: 6253282,
“id_str”: “6253282”
}
scopesObject포함된 게시물을 어떤 컨텍스트에서 전달할지 나타내는 키-값 쌍의 집합입니다. 현재 X의 Promoted Products에서 사용됩니다. 예시:

“scopes”:{“followers”:false}
withheld_copyrightBoolean존재하며 값이 “true”인 경우, 이 콘텐츠가 DMCA complaint로 인해 제공이 제한되었음을 나타냅니다. 예시:

“withheld_copyright”: true
withheld_in_countriesArray of String존재하는 경우, 이 콘텐츠가 차단된 대문자 두 글자 국가 코드 목록을 나타냅니다. X는 이 필드에 대해 다음과 같은 비(非) 국가 값을 지원합니다:

“XX” - 콘텐츠가 모든 국가에서 보류됨
”XY” - 콘텐츠가 DMCA 요청으로 인해 보류됨.

예시:

“withheld_in_countries”: [“GR”, “HK”, “MY”]
withheld_scopeString존재하는 경우, 보류 중인 콘텐츠가 “status”인지 “user”인지를 나타냅니다.

예시:

“withheld_scope”: “status”
사용 중단된 속성
FieldTypeDescription
geoObject사용 중단됨. Null 가능. 대신 coordinates 필드를 사용하세요. 이 사용 중단된 속성에서는 좌표가 [lat, long] 형태로 표현되며, 다른 모든 게시물의 geo는 [long, lat] 형태로 표현됩니다.

중첩된 게시물 객체

여러 경우에 게시물 객체에는 다른 중첩 객체가 포함됩니다. 중첩 객체를 다루는 경우, 해당 JSON 페이로드에는 여러 게시물 객체가 포함되며, 각 게시물 객체는 자체 하위 객체를 포함할 수 있습니다. 루트 레벨 객체에는 수행된 액션의 유형, 즉 리트윗인지 인용 Tweet인지에 대한 정보가 포함되며, 공유되고 있는 ‘원본’ 게시물을 설명하는 객체가 포함될 수도 있습니다. 확장 게시물(Extended Posts)은 2017년 업데이트 시 하위 호환성을 유지하기 위해 도입된, 140자를 초과하는 내용을 담는 중첩 확장 객체를 포함합니다. 각 중첩 객체 딕셔너리에 대해서는 아래에서 설명합니다. 리트윗(Retweets) 리트윗은 항상 두 개의 게시물 객체를 포함합니다. 리트윗되고 있는 ‘원본’ 게시물은 “retweeted_status” 객체로 제공됩니다. 루트 레벨 객체는 리트윗 자체를 캡슐화하며, 여기에는 리트윗 액션을 수행한 계정에 대한 User 객체와 리트윗 시각이 포함됩니다. 리트윗은 게시물을 팔로워와 공유하는 액션이며, 새로운 콘텐츠를 추가할 수 없습니다. 또한 (새로운) 위치 정보는 리트윗에 제공할 수 없습니다. ‘원본’ 게시물에 지오태그가 있더라도, 리트윗의 “geo” 및 “place” 객체는 항상 null입니다. 확장 게시물이 도입되기 이전에도, 루트 레벨의 “entities” 객체는 일부 경우에 “RT @username ” 문자열이 리트윗되는 게시물 메시지에 덧붙여지면서 잘리거나 불완전한 상태가 되었습니다. 리트윗이 다시 리트윗되는 경우에도 “retweet_status”는 여전히 원본 게시물을 가리키며, 이는 중간 리트윗이 포함되지 않는다는 의미입니다. x.com을 사용해 리트윗을 ‘표시(display)‘할 때도 유사한 동작이 나타납니다. 리트윗 ‘액션’에 할당된 고유 Post ID를 복사하면, 원본 게시물이 표시됩니다.  아래는 리트윗의 예시 구조입니다. 다시 말해, 리트윗을 파싱할 때에는 전체 (원본) 게시물 메시지와 엔티티 메타데이터를 얻기 위해 “retweeted_status” 객체를 파싱하는 것이 핵심입니다.
{
	"tweet": {
		"text": "RT @author original message",
		"user": {
			"screen_name": "Retweeter"
		},
		"retweeted_status": {
			"text": "original message",
			"user": {
				"screen_name": "OriginalTweeter"
			},
			"place": {},
			"entities": {},
			"extended_entities": {}
		}
	},
	"entities": {},
	"extended_entities": {}
}
인용 Tweet
인용 Tweet은 새로운 게시물 메시지가 포함된다는 점을 빼면 리트윗과 매우 비슷합니다. 이러한 새 메시지에는 자체 해시태그, 링크 및 기타 “entities” 메타데이터가 포함될 수 있습니다. 인용 Tweet에는 인용 Tweet을 게시하는 사용자가 공유한 위치 정보와 GIF, 동영상, 사진과 같은 미디어가 함께 포함될 수도 있습니다. 인용 Tweet에는 최소 두 개, 경우에 따라 세 개의 게시물 객체가 포함됩니다. 인용되는 게시물(그 자체가 인용 Tweet일 수도 있음)은 “quoted_status” 객체로 제공됩니다. 루트 수준 객체는 공유 동작을 수행하는 계정의 User 객체와 인용 Tweet 시각을 포함하여, 인용 Tweet 자체를 캡슐화합니다. 이제 인용 Tweet에는 ‘Post’ 사용자 인터페이스를 사용해 사진, GIF 또는 동영상을 추가할 수 있다는 점에 유의하세요. 외부에 호스팅된 미디어에 대한 링크가 인용 Tweet 메시지에 포함된 경우, 루트 수준 “entities.urls”에서 이를 서술합니다. 인용 Tweet에 첨부된 미디어는 루트 수준 “extended_entities” 메타데이터에 나타납니다. 인용 Tweet이 처음 출시되었을 때는 단축 링크(t.co URL)가 ‘원본’ 게시물 메시지에 덧붙여져 루트 수준 “text” 필드에 제공되었습니다. 또한 해당 t.co URL에 대한 메타데이터는 루트 수준 ‘entities.urls’ 배열에 포함되었습니다. 2018년 5월에는 사양이 변경되어, 인용된 Tweet으로 연결되는 단축 t.co URL이 루트 수준 “text” 필드에 더 이상 포함되지 않게 되었습니다. 둘째로, 인용된 Tweet에 대한 메타데이터도 “entities.urls” 메타데이터에 더 이상 포함되지 않습니다. 대신, 인용된 Tweet에 대한 URL 메타데이터는 루트 수준(또는 최상위 수준)의 새로운 “quoted_status_permalink” 객체에 포함되며, “quoted_status” 객체와 동일한 계층 수준에 위치합니다. 아래는 이 초기 포맷을 사용하는 인용 Tweet의 예시 구조입니다.
{
	"created_at": "Tue Feb 14 19:30:06 +0000 2017",
	"id_str": "831586333415976960",
	"text": "Definitely quotable! https:\/\/t.co\/J1LKrbHpWR",
	"user": {
		"screen_name": "happycamper"
	},
	"quoted_status_id_str": "831569219296882688",
	"quoted_status": {
		"created_at": "Tue Feb 14 18:22:06 +0000 2017",
		"id_str": "831569219296882688",
		"text": "This is a test of the tweeting system \ud83d\ude0e to update #supportdocs @twitterboulder here: https:\/\/t.co\/NRq9UrSzm0",
		"user": {
			"screen_name": "furiouscamper",
		},
		"place": {
			"id": "9a974dfc8efb32a0",
		},
		"entities": {
			"hashtags": [{
				"text": "supportdocs",
			}],
			"urls": [{
			}],
			"user_mentions": [{	}],
			"symbols": []
		},
	},
	"is_quote_status": true,
	"entities": {},
	"matching_rules": [{}]
}
{
	"created_at": "Fri Jan 04 18:47:16 +0000 2019",
	"id_str": "1081260794069671936",
	"text": "Quote test https://t.co/CE4m1qs3NJ",
	"user": {
		"screen_name": "furiouscamper"
	},
	"place": null,
	"quoted_status_id_str": "1079578364904648705",
	"quoted_status": {
		"created_at": "Mon Dec 31 03:21:54 +0000 2018",
		"id_str": "1079578364904648705",
		"text": "AHHHHH",
		"user": {
			"screen_name": "infinite_scream"
		},
		"place": null,
		"is_quote_status": false,
		"quote_count": 1,
		"reply_count": 0,
		"retweet_count": 3,
		"favorite_count": 6,
		"entities": {
			"hashtags": [],
			"urls": [],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quoted_status_permalink": {
		"url": "https://t.co/CE4m1qs3NJ",
		"expanded": "https://x.com/infinite_scream/status/1079578364904648705",
		"display": "x.com/infinite_screa…"
	},
	"is_quote_status": true,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 1,
	"entities": {}
}
확장 게시물
*확장 게시물(Extended Posts)*을 설명하는 JSON은 280자 게시물이 2017년 11월에 출시될 때 함께 도입되었습니다. 게시물 JSON은 이 더 긴 메시지를 캡슐화하도록 확장되었지만, 이러한 기본 X 객체를 파싱하던 수천 개 App이 동작에 문제가 생기지 않도록 설계되었습니다. 완전한 하위 호환성을 제공하기 위해, 원래의 140자 길이의 ‘text’ 필드와 그로부터 파싱되던 엔터티 객체들은 유지되었습니다. 140자를 초과하는 게시물의 경우 루트 레벨의 ‘text’ 필드는 잘려서(truncated) 불완전해집니다. 루트 레벨의 ‘entities’ 객체에는 포함된 해시태그와 링크처럼 ‘text’ 메시지에서 파싱된 핵심 메타데이터의 배열이 들어 있으므로, 이러한 컬렉션 역시 불완전해지게 됩니다. 예를 들어 게시물 메시지가 200자이고 끝에 해시태그가 포함되어 있다면, 레거시 루트 레벨의 ‘entities.hashtags’ 배열에는 이 해시태그가 포함되지 않습니다.  더 긴 게시물 메시지와 완전한 엔터티 메타데이터를 저장하기 위해 새로운 ‘extended_tweet’ 필드가 도입되었습니다. “extended_tweet” 객체는 140자를 초과할 때 잘리지 않은 전체 게시물 메시지를 담는 “full_text” 필드를 제공합니다. “extended_tweet” 객체에는 해시태그, 링크, 멘션 등의 완전한 배열을 포함하는 “entities” 객체도 들어 있습니다. 확장 게시물은 루트 레벨의 “truncated” 불리언으로 식별됩니다. 값이 true일 때(“truncated”: true) 루트 레벨 필드 대신 “extended_tweet” 필드들을 파싱해야 합니다. 아래 JSON 예시에서 루트 레벨의 “text” 필드는 잘려 있으며, 게시물 메시지에 해시태그가 세 개 포함되어 있음에도 루트 레벨의 “entities.hashtags” 배열은 비어 있다는 점에 주목하십시오. 이는 확장 게시물이므로 “truncated” 필드는 true로 설정되어 있고, “extended_tweet” 객체가 전체 “full_text”와 “entities” 게시물 메타데이터를 제공합니다.
{
	"created_at": "Thu May 10 17:41:57 +0000 2018",
	"id_str": "994633657141813248",
	"text": "Just another Extended Tweet with more than 140 characters, generated as a documentation example, showing that [\"tru… https://t.co/U7Se4NM7Eu",
	"display_text_range": [0, 140],
	"truncated": true,
	"user": {
		"id_str": "944480690",
		"screen_name": "FloodSocial"
	},
	"extended_tweet": {
		"full_text": "Just another Extended Tweet with more than 140 characters, generated as a documentation example, showing that [\"truncated\": true] and the presence of an \"extended_tweet\" object with complete text and \"entities\" #documentation #parsingJSON #GeoTagged https://t.co/e9yhQTJSIA",
		"display_text_range": [0, 249],
		"entities": {
			"hashtags": [{
				"text": "documentation",
				"indices": [211, 225]
			}, {
				"text": "parsingJSON",
				"indices": [226, 238]
			}, {
				"text": "GeoTagged",
				"indices": [239, 249]
			}]
		}

	},
	"entities": {
		"hashtags": []
	}
}

네이티브 Enriched 사용자 객체

User 객체에는 참조된 X 사용자를 설명하는 X 사용자 계정 메타데이터가 포함됩니다. 

사용자 데이터 딕셔너리

속성타입설명
idInt64이 User에 대한 고유 식별자의 정수 표현입니다. 이 수는 53비트보다 크기 때문에 일부 프로그래밍 언어에서는 이를 해석하는 과정에서 어려움이 있거나, 해석 시 눈에 띄지 않는 오류가 발생할 수 있습니다. 이 식별자를 저장할 때는 부호 있는 64비트 정수를 사용하는 것이 안전합니다. 식별자를 안전하게 가져오려면 id_str을(를) 사용하세요. 자세한 내용은 X IDs를 참조하세요. 예시:

“id”: 6253282
id_strString이 User에 대한 고유 식별자의 문자열 표현입니다. 구현 시에는 id의 매우 크고 일부 환경에서는 처리할 수 없을 수 있는 정수 대신 이 값을 사용해야 합니다. 예시:

“id_str”: “6253282”
nameString사용자가 설정한 이름입니다. 반드시 사람 이름일 필요는 없습니다. 일반적으로 최대 50자로 제한되지만, 변경될 수 있습니다. 예:

“name”: “API”
screen_nameString이 사용자가 자신을 식별하는 데 사용하는 스크린 이름(screen name), 핸들(handle) 또는 별칭(alias)입니다. screen_name은 고유하지만 변경될 수 있습니다. 가능하면 id_str를 사용자 식별자로 사용하세요. 일반적으로 최대 15자까지 허용되지만, 일부 예전 계정은 더 긴 이름을 가지고 있을 수 있습니다. 예시:

“screen_name”: “api”
locationStringNullable . 이 계정 프로필에 대해 사용자가 지정한 위치입니다. 실제 위치일 필요도 없으며, 기계가 파싱할 수 있는 형식일 필요도 없습니다. 이 필드는 때때로 Search 서비스에서 대략적으로 해석될 수 있습니다. 예:

“location”: “San Francisco, CA”
derivedEnrichment 객체의 배열Enterprise API에서만 사용할 수 있습니다. 사용자에 대해 파생된 Enrichment 메타데이터의 컬렉션입니다. Profile Geo Enrichment 메타데이터를 제공합니다. JSON 데이터 사전 등을 포함한 자세한 내용은 참조 문서를 확인하세요. 예시:

“derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”]
urlStringnull 허용. 사용자가 자신의 프로필에 연결해 제공한 URL입니다. 예시:

“url”: “https://developer.x.com
descriptionStringNullable . 사용자가 자신의 계정을 설명하기 위해 직접 정의한 UTF-8 문자열입니다. 예시:

“description”: “The Real X API.”
protectedBooleantrue인 경우 이 사용자가 자신의 포스트를 비공개로 설정했음을 나타냅니다. 공개 및 비공개 포스트에 대하여를 참조하세요. 예:

“protected”: true
verifiedBooleantrue인 경우, 해당 사용자의 계정이 인증 계정임을 나타냅니다. Verified Accounts를 참고하세요. 예:

“verified”: false
followers_countInt이 계정이 현재 보유한 팔로워 수입니다. 특정 장애나 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예:

“followers_count”: 21
friends_countInt이 계정이 팔로우하고 있는 사용자 수(‘팔로잉 수’라고도 함)입니다. 특정 비정상 상황에서는 이 필드가 일시적으로 “0”으로 표시될 수 있습니다. 예:

“friends_count”: 32
listed_countInt이 사용자가 속해 있는 공개 리스트의 수입니다. 예시:

“listed_count”: 9274
favourites_countInt이 사용자가 계정이 존재한 전체 기간 동안 좋아요를 누른 포스트 수입니다. 필드 이름에는 역사적인 이유로 영국식 철자를 사용합니다. 예시:

“favourites_count”: 13
statuses_countInt사용자가 작성한 포스트 수(리트윗 포함)입니다. 예시:

“statuses_count”: 42
created_atStringX에서 사용자 계정이 생성된 UTC 기준 날짜 및 시간. 예제:

“created_at”: “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlString사용자가 업로드한 프로필 배너의 웹 상 표준 표현을 가리키는 HTTPS 기반 URL입니다. URL에 마지막 경로 요소를 추가하면 특정 디스플레이에 최적화된 서로 다른 이미지 크기를 얻을 수 있습니다. 크기별 변형에 대해서는 User Profile Images and Banners를 참조하세요.

예시:

“profile_banner_url”: “https://si0.twimg.com/profile&#95;banners/819797/1348102824
profile_image_url_httpsString사용자의 프로필 이미지를 가리키는 HTTPS 기반의 URL입니다. 예:

“profile_image_url_https”:
https://abs.twimg.com/sticky/default&#95;profile&#95;images/default&#95;profile&#95;normal.png
default_profile불리언true인 경우 사용자가 사용자 프로필의 테마 또는 배경을 변경하지 않았음을 나타냅니다. 예:

“default_profile”: false
default_profile_image불리언true인 경우, 사용자가 자신의 프로필 이미지를 업로드하지 않았고 기본 이미지가 사용되고 있음을 나타냅니다. 예시:

“default_profile_image”: false

더 이상 지원되지 않는(사용 중단됨) 속성

FieldTypeDescription
utc_offsetnull값은 null로 설정됩니다. 여전히 GET account/settings를 통해 사용 가능합니다.
time_zonenull값은 null로 설정됩니다. 여전히 GET account/settings에서 tzinfo_name으로 사용 가능합니다.
langnull값은 null로 설정됩니다. 여전히 GET account/settings에서 language로 사용 가능합니다.
geo_enablednull값은 null로 설정됩니다. 여전히 GET account/settings를 통해 사용 가능합니다. 이 필드는 현재 사용자가 POST statuses / update를 사용할 때 지리적 데이터를 첨부하려면 true여야 합니다.
followingnull값은 null로 설정됩니다. 여전히 GET friendships/lookup를 통해 사용 가능합니다.
follow_request_sentnull값은 null로 설정됩니다. 여전히 GET friendships/lookup를 통해 사용 가능합니다.
has_extended_profilenull사용 중단됨. 값은 null로 설정됩니다.
notificationsnull사용 중단됨. 값은 null로 설정됩니다.
profile_locationnull사용 중단됨. 값은 null로 설정됩니다.
contributors_enablednull사용 중단됨. 값은 null로 설정됩니다.
profile_image_urlnull사용 중단됨. 값은 null로 설정됩니다. 참고: 프로필 이미지는 profile_image_url_https 필드를 통해서만 사용할 수 있습니다.
profile_background_colornull사용 중단됨. 값은 null로 설정됩니다.
profile_background_image_urlnull사용 중단됨. 값은 null로 설정됩니다.
profile_background_image_url_httpsnull사용 중단됨. 값은 null로 설정됩니다.
profile_background_tilenull사용 중단됨. 값은 null로 설정됩니다.
profile_link_colornull사용 중단됨. 값은 null로 설정됩니다.
profile_sidebar_border_colornull사용 중단됨. 값은 null로 설정됩니다.
profile_sidebar_fill_colornull사용 중단됨. 값은 null로 설정됩니다.
profile_text_colornull사용 중단됨. 값은 null로 설정됩니다.
profile_use_background_imagenull사용 중단됨. 값은 null로 설정됩니다.
is_translatornull사용 중단됨. 값은 null로 설정됩니다.
is_translation_enablednull사용 중단됨. 값은 null로 설정됩니다.
translator_typenull사용 중단됨. 값은 null로 설정됩니다.

예시 사용자 객체:

"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "The voice of the #XDevelopers team and your official source for updates, news, and events, related to the #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	}

네이티브 Enriched Geo 객체

포스트에는 위치를 연결할 수 있으며, 이렇게 하면 ‘지오태그(geo-tagged)’된 게시물이 생성됩니다. 게시물 위치는 X 사용자 인터페이스를 사용하거나 API로 게시물을 작성할 때 지정할 수 있습니다. 게시물 위치는 정확한 ‘포인트(point)’ 위치이거나, 공연장부터 전체 지역에 이르는 더 넓은 영역을 설명하는 ‘바운딩 박스(bounding box)’를 가진 X Place일 수 있습니다. 게시물과 연결된 위치를 설명하기 위해 사용되는 세 개의 ‘루트 레벨’ JSON 객체가 있습니다: place, geo, coordinates 추가로, 네이티브 enriched 형식에는 사용자 객체 내에 프로필 geo enrichment의 파생 위치가 포함됩니다. place 객체는 게시물이 Place로 지오태그될 때마다 항상 존재합니다. Place는 해당 지리 좌표가 있는 특정 이름의 위치를 의미합니다. 사용자가 자신의 게시물에 위치를 지정하기로 선택하면, 후보 X Place 목록이 사용자에게 제시됩니다. API를 사용하여 게시물을 작성할 때는 게시 시 place_id를 지정하여 X Place를 첨부할 수 있습니다. Place와 연결된 포스트는 반드시 해당 위치에서 발행된 것일 필요는 없으며, 해당 위치에 관한 포스트일 수도 있습니다. geo 및 coordinates 객체는 게시물에 정확한 위치 가 지정된 경우에만 (null이 아닌 상태로) 존재합니다. 정확한 위치가 제공되면 coordinates 객체는 지리 좌표가 담긴 [long, lat] 배열을 제공하고, 해당 위치에 대응되는 X Place가 지정됩니다.

장소 데이터 사전

FieldTypeDescription
idString이 장소를 나타내는 ID입니다. 정수가 아니라 문자열로 표현됩니다. 예:

“id”:“01a9a39529b27f36”
urlString이 장소에 대한 추가 장소 메타데이터의 위치를 나타내는 URL입니다. 예:

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeString이 장소가 나타내는 위치의 유형입니다. 예:

“place_type”:“city”
nameString이 장소의 이름을 사람이 읽기 쉬운 짧은 형태로 표현한 값입니다. 예:

“name”:“Manhattan”
full_nameString이 장소의 이름을 사람이 읽기 쉬운 전체 형태로 표현한 값입니다. 예:

“full_name”:“Manhattan, NY”
country_codeString이 장소가 속한 국가를 나타내는 축약된 국가 코드입니다. 예:

“country_code”:“US”
countryString이 장소가 속한 국가의 이름입니다. 예:

“country”:“United States”
bounding_boxObject이 장소를 둘러싸는 좌표들의 바운딩 박스입니다. 예:


“bounding_box”:
“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
],
“type”: “Polygon”

attributesObjectPowerTrack, 30-Day 및 Full-Archive Search API, Volume Streams를 사용할 때 이 해시는 null입니다. 예:

“attributes”:

경계 상자

FieldTypeDescription
coordinatesArray of Array of Array of Float이 경계 상자와 관련된 Place 엔티티를 포함하는 상자(영역)를 정의하는 경도 및 위도 지점들의 시퀀스입니다. 각 지점은 [longitude, latitude] 형식의 배열입니다. 지점들은 경계 상자마다 하나의 배열로 묶입니다. 경계 상자 배열은 폴리곤 표기법과의 호환성을 위해 한 번 더 배열로 감싸집니다. 예시:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringcoordinates 속성에 인코딩된 데이터의 type입니다. 경계 상자에는 “Polygon”이, 정확한 좌표를 가진 포스트에는 “Point”가 사용됩니다. 예시:

“type”:“Polygon”

Geo object 데이터 사전

FieldTypeDescription
coordinatesFloat 컬렉션게시물의 위치에 대한 경도와 위도 값으로, [latitude, longitude] 형식의 컬렉션입니다. 예시:

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringcoordinates 속성에 인코딩된 데이터의 유형입니다. 게시물 좌표 필드에서는 항상 “Point”입니다. 예시:

“type”: “Point”
Coordinates object 데이터 사전
FieldTypeDescription
coordinatesFloat 컬렉션게시물의 위치에 대한 경도와 위도 값으로, [longitude, latitude] 형식의 컬렉션입니다. 예시:

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringcoordinates 속성에 인코딩된 데이터의 유형입니다. 게시물 좌표 필드에서는 항상 “Point”입니다. 예시:

“type”: “Point”

파생 위치

필드type설명
derivedlocations 객체프로필 geo enrichment를 통해 생성된 파생 위치

“derived”:

      “locations”: [


**       

“country”:** “United Kingdom”,

“country_code”: “GB”,

“locality”: “Yorkshire”,

“region”: “England”,

“full_name”: “Yorkshire, England, United Kingdom”,

**          “geo”:

            “coordinates”: [

-1.5
,

54

            ],

“type”:** “point”

**         

       

      ]

    **

예제:

{
  "geo": null,
  "coordinates": null,
  "place": {
    "id": "07d9db48bc083000",
    "url": "https://api.x.com/1.1/geo/id/07d9db48bc083000.json",
    "place_type": "poi",
    "name": "McIntosh Lake",
    "full_name": "McIntosh Lake",
    "country_code": "US",
    "country": "United States",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
{
  "geo": {
    "type": "Point",
    "coordinates": [
      40.74118764,
      -73.9998279
    ]
  },
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -73.9998279,
      40.74118764
    ]
  },
  "place": {
    "id": "01a9a39529b27f36",
    "url": "https://api.x.com/1.1/geo/id/01a9a39529b27f36.json",
    "place_type": "city",
    "name": "Manhattan",
    "full_name": "Manhattan, NY",
    "country_code": "US",
    "country": "United States",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -74.026675,
            40.683935
          ],
          [
            -74.026675,
            40.877483
          ],
          [
            -73.910408,
            40.877483
          ],
          [
            -73.910408,
            40.683935
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
데이터 사전: Enterprise

X 엔티티

이 페이지에서 바로가기 소개 엔티티 객체   - Hashtag 객체   - 미디어 객체   - 미디어 크기 객체   - URL 객체   - 사용자 멘션 객체   - 심볼 객체   - 투표 객체 리트윗 및 인용 트윗 세부 정보 사용자 객체의 엔티티 다이렉트 메시지의 엔티티 다음 단계

소개

엔티티(entities)는 X에 게시된 콘텐츠에 대한 메타데이터와 추가적인 문맥 정보를 제공합니다. entities 섹션에는 게시물에 포함되는 공통 요소들의 배열이 들어 있습니다: 해시태그, 사용자 멘션, 링크, 주식 티커(심볼), X 투표, 그리고 첨부 미디어입니다. 이러한 배열은 포스트를 수집하는 개발자에게 편리한데, X가 본문 텍스트를 사실상 사전 전처리(pre-processed) 또는 사전 파싱(pre-parsed)해 두었기 때문입니다. 게시물 본문에서 이 엔티티들을 직접 검색해 찾아야 하는 대신, 파서가 바로 이 JSON 섹션으로 이동하면 거기에 모두 포함되어 있습니다. 파싱 편의성을 제공하는 것 외에도, entities 섹션은 유용한 부가적인 메타데이터도 제공합니다. 예를 들어, Enhanced URLs enrichment을 사용하는 경우, URL 메타데이터에는 완전히 확장된 URL뿐 아니라 관련 웹사이트의 제목과 설명도 포함됩니다. 또 다른 예로, 사용자 멘션이 있는 경우 엔티티 메타데이터에는 숫자 기반 사용자 ID가 포함되며, 이는 여러 X API에 요청을 보낼 때 유용합니다. 모든 게시물 JSON 페이로드에는 entities 섹션이 포함되며, 여기에 최소한의 hashtags, urls, user_mentions, symbols 속성 집합이 들어갑니다. 이는 해당 엔티티가 게시물 메시지의 일부가 아니더라도 마찬가지입니다. 예를 들어, 본문이 “Hello World!”이고 첨부 미디어가 전혀 없는 게시물의 JSON을 살펴보면, 엔티티 배열에 항목이 0개인 다음과 같은 콘텐츠가 해당 게시물의 JSON에 포함되어 있습니다:
"entities": {
        "hashtags": [
        ],
        "urls": [
        ],
        "user_mentions": [
        ],
        "symbols": [
        ]
      }
참고:
  • media 및 polls 엔티티는 해당 유형의 콘텐츠가 게시물에 포함된 경우에만 표시됩니다.
  • 네이티브 media(사진, 동영상 또는 GIF)로 작업하는 경우 Extended Entities object를 사용해야 합니다.

Entities object

entitiesextended_entities 섹션은 모두 엔티티 object 배열로 구성됩니다. 아래에서 각 엔티티 object에 대한 설명과 함께, object의 속성 이름, type, 간단한 설명을 담은 데이터 딕셔너리를 확인할 수 있습니다. 또한 이러한 속성과 매칭되는 PowerTrack Operator를 표시하고, 일부 JSON 페이로드 예시도 포함합니다. 포스트에서 공통적으로 발견되는 엔티티(해시태그, 링크, 사용자 멘션 등)의 모음입니다. 이 entities object에는 media 속성이 포함되어 있지만, entiites 섹션에서의 구현은 단일 사진이 있는 포스트에 대해서만 완전히 정확합니다. 둘 이상의 사진, 동영상 또는 애니메이션 GIF가 포함된 모든 포스트에 대해서는 extended_entities 섹션을 참고해야 합니다.

엔티티 데이터 사전

entities 객체는 다른 엔티티 하위 객체 배열을 담는 컨테이너입니다. entities 구조를 먼저 설명한 뒤, 이 하위 객체들에 대한 데이터 사전과 이에 매칭되는 연산자들이 제공됩니다.
필드type설명
hashtagsHashtag 객체의 배열게시물 텍스트에서 파싱된 해시태그를 나타냅니다. 예시:


“hashtags”: [

“indices”: [
32,
38
],
“text”: “nodejs”

]
mediaMedia 객체 배열게시물과 함께 업로드된 미디어를 나타냅니다. 예시:


“media”: [

“display_url”: “pic.x.com/5J1WJSRCy9”,
“expanded_url”: “https://x.com/nolan_test/status/930077847535812610/photo/1”,
“id”: 9.300778475358126e17,
“id_str”: “930077847535812610”,
“indices”: [
13,
36
],
“media_url”: “http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,
“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg
“sizes”:
       “thumb”:
“h”: 150,
               “resize”: “crop”,
               “w”: 150
          ,
          “large”:
          “h”: 1366,
          “resize”: “fit”,
          “w”: 2048
          ,
          “medium”:
          “h”: 800,
          “resize”: “fit”,
          “w”: 1200
          ,
          “small”:
          “h”: 454,
          “resize”: “fit”,
          “w”: 680
         
      ,
“type”: “photo”,
“url”: “https://t.co/5J1WJSRCy9”,

]
urlsURL 객체 배열게시물의 텍스트에 포함된 URL을 나타냅니다.

예시(Enhanced URLs enrichment 기능이 비활성화된 경우):


“urls”: [

“indices”: [
32,
52
],
“url”: “http://t.co/IOwBrTZR”,
“display_url”: “youtube.com/watch?v=oHg5SJ…”,
“expanded_url”: “http://www.youtube.com/watch?v=oHg5SJYRHA0

]


예시(Enhanced URLs enrichment 기능이 활성화된 경우):

“urls”: [

“url”: “https://t.co/D0n7a53c2l”,
“expanded_url”: “http://bit.ly/18gECvy”,
“display_url”: “bit.ly/18gECvy”,
“unwound”:
“url”: “https://www.youtube.com/watch?v=oHg5SJYRHA0”,
“status”: 200,
“title”: “RickRoll’D”,
“description”: “http://www.facebook.com/rickroll548 As long as trolls are still trolling, the Rick will never stop rolling.”
,
“indices”: [
62,
85
]

]
user_mentionsUser Mention 객체 배열게시물 텍스트에 언급된 다른 X 사용자를 나타냅니다. 예시:


“user_mentions”: [

“name”: “X API”,
“indices”: [
4,
15
],
“screen_name”: “xapi”,
“id”: 6253282,
“id_str”: “6253282”

]
symbolsSymbol 객체 배열(Symbol Objects)게시물 텍스트에 포함된 기호(예: $cashtag)를 나타냅니다. 예:


“symbols”: [

“indices”: [
12,
17
],
“text”: “twtr”

]
pollsPoll 객체 배열게시물에 포함된 X 설문조사(Poll)를 나타냅니다. 예시:

“polls”: [

“options”: [

“position”: 1,
“text”: “I read documentation once.”
,

“position”: 2,
“text”: “I read documentation twice.”
},

“position”: 3,
“text”: “I read documentation over and over again.”
}
],
“end_datetime”: “Thu May 25 22:20:27 +0000 2017”,
“duration_minutes”: 60

]

해시태그 객체

entities 섹션에는 게시물 본문에 포함된 각 해시태그에 대한 객체를 담고 있는 hashtags 배열이 있으며, 해시태그가 없으면 빈 배열이 포함됩니다. PowerTrack의 # 연산자는 text 속성을 기준으로 매칭하는 데 사용됩니다. has:hashtags 연산자는 배열에 최소 하나의 항목이 있으면 매칭됩니다.
FieldTypeDescription
indicesArray of Int게시물 텍스트 내에서 해시태그가 시작되고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 게시물 텍스트 문자열에서 # 문자의 위치를 나타냅니다. 두 번째 정수는 해시태그 다음 첫 번째 문자의 위치를 나타냅니다. 따라서 두 숫자의 차이는 해시태그 이름의 길이에 1(‘#’ 문자)을 더한 값이 됩니다. 예시:

“indices”:[32,38]
textString앞에 오는 ‘#’ 문자를 제외한 해시태그의 이름입니다. 예시:

“text”:“nodejs”

미디어 객체

게시물에 미디어 객체가 ‘첨부’된 경우, entities 섹션은 단일 미디어 객체를 포함하는 media 배열을 포함합니다. 네이티브 미디어가 첨부되지 않은 경우, entities 내에 media 배열은 존재하지 않습니다. 다음과 같은 이유로 게시물의 네이티브 미디어를 처리할 때는 extended_entities 섹션을 사용해야 합니다:
  • 비디오와 GIF가 게시물에 첨부된 경우에도, 미디어 type 은 항상 ‘photo’를 나타냅니다.
  • 최대 네 개의 사진을 첨부할 수 있지만, entities 섹션에는 첫 번째 사진만 나열됩니다.
has:media 연산자는 이 배열에 값이 있으면 매칭됩니다.
필드타입설명
display_url문자열클라이언트에 표시되는 미디어의 URL입니다. 예시:

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_url문자열display_url을 확장한 버전입니다. 미디어 표시 페이지로 연결되는 링크입니다. 예:

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt64미디어의 식별자를 64비트 정수로 표현한 값입니다. 예:

“id”:114080493040967680
id_str문자열문자열 형태로 표현된 미디어의 ID입니다. 예시:

“id_str”:“114080493040967680”
indices정수 배열게시물 텍스트 내에서 URL이 시작되고 끝나는 오프셋을 나타내는 정수 배열입니다. 첫 번째 정수는 게시물 텍스트에서 URL의 첫 글자 위치를 나타냅니다. 두 번째 정수는 URL 이후에 나오는 첫 번째 URL이 아닌 문자(또는 URL이 게시물 텍스트의 마지막 부분인 경우 문자열의 끝)의 위치를 나타냅니다. 예:

“indices”:[15,35]
media_url문자열업로드된 미디어 파일을 직접 가리키는 http:// URL입니다. 예시:

“media_url”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg

다이렉트 메시지의 미디어의 경우 media_urlmedia_url_https와 동일한 https URL이며, OAuth 1.0a를 사용해 사용자의 액세스 토큰으로 요청에 서명해야만 액세스할 수 있습니다.

인증된 x.com 세션을 통해 이미지를 액세스하는 것은 불가능합니다. 이 최근 변경 사항을 처리하는 방법을 알아보려면 this page 를 방문하세요. 

이러한 이미지를 웹 페이지에 직접 임베드할 수는 없습니다.

사용 가능한 sizes에 따라 media_url_https와 같은 사진 URL을 어떻게 포맷하는지 알아보려면 Photo Media URL formatting을 참조하세요.
media_url_https문자열업로드된 미디어 파일을 가리키는 https:// URL로, https 페이지에 임베드할 때 사용됩니다. 예시:

“media_url_https”:“https://p.twimg.com/AZVLmp-CIAAbkyy.jpg

다이렉트 메시지에 포함된 미디어의 경우, media_url_https에 접근하려면 사용자의 액세스 토큰으로 요청에 서명해 OAuth 1.0A를 사용해야 합니다.

인증된 x.com 세션을 통해 이미지에 직접 접근하는 것은 불가능합니다. 이러한 최근 변경 사항에 대응하는 방법을 알아보려면 이 페이지를 방문하세요. 

이러한 이미지를 웹 페이지에 직접 임베드할 수는 없습니다.

사용 가능한 sizes를 기반으로 media_url_https와 같은 사진 URL을 어떻게 포맷하는지에 대해서는 Photo Media URL formatting을 참조하세요.
sizesSize 객체미디어 파일에서 사용 가능한 크기를 나타내는 객체입니다. 예:


“sizes”:
“thumb”:
“h”: 150,
“resize”: “crop”,
“w”: 150
},
“large”:
“h”: 1366,
“resize”: “fit”,
“w”: 2048
},
“medium”:
“h”: 800,
“resize”: “fit”,
“w”: 1200
},
“small”:
“h”: 454,
“resize”: “fit”,
“w”: 680
}
}
}

사용 가능한 sizes를 기준으로 media_url_https와 같은 사진의 URL을 포맷하는 방법은 Photo Media URL formatting을 참고하세요.
source_status_idInt64Null 허용. 원래 다른 게시물에 연결되어 있던 미디어를 포함하는 포스트의 경우, 이 ID는 원본 게시물을 가리킵니다. 예시:

“source_status_id”: 205282515685081088
source_status_id_str문자열널 허용됨. 원래 다른 포스트에 연관되어 있던 미디어를 포함하는 포스트의 경우, 이 문자열 기반 ID는 원본 포스트를 가리킵니다. 예:

“source_status_id_str”: “205282515685081088”
type문자열업로드된 미디어의 종류입니다. 가능한 값으로는 photo, video, animated_gif 등이 있습니다. 예시:

“type”:“photo”
url문자열미디어 링크에 대한 래핑된 URL입니다. 이는 게시물 원문 텍스트에 직접 포함된 URL 및 indices 매개변수 값과 일치합니다. 예:

“url”:“http://t.co/rJC5Pxsu

미디어 크기 객체

네이티브 미디어(사진, 동영상, GIF)가 포함된 모든 포스트에는 높이와 너비(픽셀 단위) 정보가 있는 ‘thumb’, ‘small’, ‘medium’, ‘large’ 크기 집합이 포함됩니다. 사진 및 미리보기 이미지 미디어 URL의 경우, Photo Media URL formatting에서 서로 다른 크기의 사진 미디어를 로드하기 위한 다양한 URL을 구성하는 방법을 설명합니다.

Sizes object

FieldTypeDescription
thumbSize Object미디어의 썸네일 크기 버전에 대한 정보입니다. 예시:

“thumb”:“h”:150, “resize”:“crop”, “w”:150}

썸네일 크기 사진 미디어는 150x150 경계 영역을 fill 방식으로 채우도록 제한되며, 잘려서(crop) 표시됩니다.
largeSize Object미디어의 large 크기 버전에 대한 정보입니다. 예시:

“large”:“h”:454, “resize”:“fit”, “w”:680}

small 크기 사진 미디어는 680x680 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다.
mediumSize Object미디어의 medium 크기 버전에 대한 정보입니다. 예시:

“medium”:“h”:800, “resize”:“fit”, “w”:1200}

medium 크기 사진 미디어는 1200x1200 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다.
smallSize Object미디어의 small 크기 버전에 대한 정보입니다. 예시:

“small”:“h”:1366, “resize”:“fit”, “w”:2048}

large 크기 사진 미디어는 2048x2048 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다.

Size 객체

FieldTypeDescription
wInt이 크기의 너비(픽셀 단위). 예:

“w”:150
hInt이 크기의 높이(픽셀 단위). 예:

“h”:150
resizeString이 크기를 얻기 위해 사용된 크기 조정 방식. 값이 _fit_이면 미디어의 원본 종횡비를 유지한 채 한 변에 맞도록 크기를 조정했음을 의미합니다. 값이 _crop_이면 특정 해상도에 맞추기 위해 미디어를 잘라냈음을 의미합니다. 예:

“resize”:“crop”

사진 미디어 URL 포맷팅

X의 사진 미디어는 서로 다른 크기로 로드할 수 있습니다. 특정 이미지 뷰포트에 맞으면서도 그보다 약간 더 큰 크기 중 가능한 한 가장 작은 이미지를 로드하는 것이 가장 좋습니다. 서로 다른 크기를 로드하려면 Size Objectmedia_url(또는 media_url_https)을 특정 형식으로 조합해야 합니다. 사진 미디어 URL을 구성하는 예제로, 앞서 제공된 media entity 예제 객체를 활용하겠습니다. media_url 또는 media_url_https만 단독으로 로드할 수도 있으며, 이 경우 기본적으로 medium 변형이 로드됩니다. 하지만 가능하다면 완전한 형식으로 구성된 사진 미디어 URL을 제공하는 것이 바람직합니다. 사진 미디어 URL은 세 부분으로 구성됩니다:
Base URLBase URL은 파일 확장자를 제외한 media URL입니다.

예를 들어:

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

이때 Base URL은 다음과 같습니다.

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
FormatFormat은 이미지가 어떤 형식의 사진으로 포맷되어 있는지를 나타냅니다. 가능한 형식은 jpg 또는 _png_이며, media URL의 확장자로 제공됩니다.

예를 들어:

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

이때 Format은: jpg 입니다.
NameName은 로드할 size의 필드 이름입니다.

예를 들어:


 “sizes”:
   “thumb”:
     “h”: 150,
     “resize”: “crop”,
     “w”: 150
   ,
   “large”:
     “h”: 1366,
     “resize”: “fit”,
     “w”: 2048
   },
   “medium”:
     “h”: 800,
     “resize”: “fit”,
     “w”: 1200
   },
   “small”:
     “h”: 454,
     “resize”: “fit”,
     “w”: 680
   }
 }
}

large 크기의 사진을 로드할 때 Name은: large 가 됩니다.
이 세 부분(Base URL, format, name)을 조합하여 로드할 사진 미디어 URL을 구성합니다. 이 방식으로 이미지를 로드하는 포맷에는 legacymodern 두 가지가 있습니다. 모든 이미지 로드는 legacy 포맷 사용을 중단하고 modern 포맷을 사용해야 합니다. modern 포맷을 사용하면 호출자에게 더 나은 CDN 히트율을 제공하여, 데이터 센터에서 미디어를 새로 생성·로드해야 할 가능성을 줄이고, 그 결과 로드 지연 시간을 개선할 수 있습니다.
Legacy format레거시 형식은 사용이 중단(deprecated)되었습니다. 사진 미디어 로드는 모두 모던 형식으로 전환해야 합니다.

<base_url>.<format>:<name>

예:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
Modern format사진을 로드하기 위한 모던 형식은 2015년에 X에서 도입되었으며, 2017년부터 사실상의 표준으로 사용되고 있습니다. 모든 사진 미디어 로드는 이 형식으로 전환해야 합니다.

<base_url>?format=<format>&name=<name>

예:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq?format=jpg&amp;name=large


참고: 사진 미디어 URL의 쿼리 문자열에 있는 항목은 알파벳 순으로 배치되어 있습니다. 미디어 로드에 추가적인 쿼리 항목이 추가되더라도 알파벳 순서는 계속 유지되어야 합니다. 예를 들어, _preferred_format_이라는 가상의 새 쿼리 항목이 있다면, 쿼리 문자열에서 formatname 뒤에 와야 합니다.

URL object

entities 섹션에는 Post 본문에 포함된 각 링크에 해당하는 객체가 들어 있는 urls 배열이 있으며, 링크가 없으면 빈 배열이 포함됩니다. has:links 연산자는 배열에 최소 한 개의 항목이 있을 경우 매치됩니다. url: 연산자는 expanded_url 속성을 기준으로 매치하는 데 사용됩니다. Expanded URL enrichment를 사용하는 경우, url: 연산자는 unwound.url(완전히 풀어낸 URL) 속성을 기준으로 매치하는 데 사용됩니다. Exhanced URL enrichment를 사용하는 경우, url_title:url_decription: 연산자는 unwound.titleunwound.description 속성을 기준으로 매치하는 데 사용됩니다.
FieldTypeDescription
display_urlStringPost에 붙여넣거나 입력한 URL. 예:

“display_url”:“bit.ly/2so49n2”
expanded_urlStringdisplay_url의 확장 버전. 예:

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of IntURL이 Post 텍스트 내에서 시작하고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 Post 텍스트에서 URL의 첫 글자가 위치한 곳을 나타냅니다. 두 번째 정수은 URL 끝 이후의 첫 URL이 아닌 문자가 위치한 곳을 나타냅니다. 예:

“indices”:[30,53]
urlString래핑된 URL로, 원시 Post 텍스트에 직접 포함된 값이며 indices 매개변수의 값에 해당합니다. 예:

“url”:“https://t.co/yzocNFvJuL
Expanded 및/또는 Enhanced URL enrichment를 사용하는 경우, 다음 메타데이터가 unwound 속성 아래에서 제공됩니다:
FieldTypeDescription
urlStringPost에 포함된 링크의 완전히 풀어낸 버전입니다. 예:

“url”:“https://blog.x.com/en&#95;us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html
statusInt언와인딩 프로세스의 최종 HTTP 상태 코드이며, ‘200’은 성공을 나타냅니다. 예:

200
titleString링크의 HTML title입니다. 예:

“title”:“Using X as a ‘go-to’ communication channel during severe weather”
descriptionString링크의 HTML description입니다. 예:

“description”:“Using X as a ‘go-to’ communication channel during severe weather”

사용자 멘션 객체

entities 섹션에는 게시물 본문에 포함된 각 사용자 멘션마다 하나의 객체를 담은 user_mentions 배열이 포함되며, 사용자 멘션이 없으면 빈 배열이 포함됩니다. PowerTrack @ 연산자는 screen_name 속성 값을 기준으로 매칭하는 데 사용됩니다. has:mentions 연산자는 배열에 최소 한 개의 항목이 있을 경우 매칭됩니다.
FieldTypeDescription
idInt64멘션된 사용자의 id를 나타내는 정수입니다. 예:

“id”:6253282
id_strString멘션된 사용자의 id를 나타내는 문자열입니다. 예:

“id_str”:“6253282”
indicesArray of Int사용자 참조가 게시물 텍스트 내에서 시작되고 끝나는 위치 오프셋을 나타내는 정수 배열입니다. 첫 번째 정수는 사용자 멘션의 ‘@’ 문자 위치를 나타냅니다. 두 번째 정수는 사용자 멘션 뒤에 오는, 해당 screen_name에 속하지 않는 첫 번째 문자의 위치를 나타냅니다. 예:

“indices”:[4,15]
nameString참조된 사용자의 표시 이름입니다. 예:

“name”:“API”
screen_nameString참조된 사용자의 screen_name입니다. 예:

“screen_name”:“api”

Symbol object

entities 섹션에는 게시물 본문에 포함된 모든 $cashtag마다 하나의 객체를 담은 symbols 배열이 포함되며, 심볼이 없으면 빈 배열이 포함됩니다. PowerTrack $ 연산자는 text 속성 값을 기준으로 매치하는 데 사용됩니다. has:symbols 연산자는 배열에 최소 한 개의 항목이 있을 경우 매치됩니다.
FieldTypeDescription
indicesArray of Int심볼/cashtag가 게시물 텍스트 내에서 시작하고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 게시물 텍스트 문자열에서 문자의위치를나타냅니다.두번째정수는cashtag다음첫번째문자의위치를나타냅니다.따라서두숫자의차이는cashtag이름의길이에1( 문자의 위치를 나타냅니다. 두 번째 정수는 cashtag 다음 첫 번째 문자의 위치를 나타냅니다. 따라서 두 숫자의 차이는 cashtag 이름의 길이에 1(‘’ 문자)을 더한 값이 됩니다. 예시:

“indices”:[12,17]
textString앞부분의 ‘$’ 문자를 제외한 cashtag의 이름입니다. 예시:

“text”:“twtr”

Poll 객체

게시물에 투표가 포함되어 있으면 entities 섹션에 단일 poll 객체를 담은 polls 배열이 생성됩니다. 투표가 포함되지 않은 경우 entities 섹션에 polls 배열이 존재하지 않습니다. 이 Poll 메타데이터는 다음 Enterprise API에서만 제공됩니다:
필드type설명
optionsOption 객체 배열각 옵션이 투표 위치와 해당 위치의 텍스트를 가지는 옵션 배열입니다. 예시:

“options”: [

“position”: 1,
“text”: “I read documentation once.”
}
]
}
end_datetimeString투표가 종료되는 시점의 타임스탬프(UTC)입니다. 예시:

“end_datetime”: “Thu May 25 22:20:27 +0000 2017”
duration_minutesString투표 진행 시간(분)입니다. 예시:

“duration_minutes”: 60

Retweet and Quote Tweet 세부 정보

X API 관점에서 Retweet과 Quote Tweet은 원본 포스트를 포함하는 특수한 종류의 포스트입니다. 따라서 Retweet 및 Quote Tweet 객체는 하위 ‘original’ 포스트를 가진 상위 객체이며(이로 인해 전체 크기가 두 배가 됩니다), Retweet에는 최상위에 “retweeted_status” 객체가 있고, Quote Tweet에는 “quoted_status” 객체가 있습니다. 일관성을 위해 이 최상위 Retweet 및 Quote Tweet 객체에도 text 속성과 관련 엔티티가 있습니다. 다만, 최상위에 있는 엔티티는 포함된 ‘original’ 포스트에서 제공되는 엔티티와 다를 수 있습니다. Retweet의 경우 새 텍스트가 원본 포스트 본문 앞에 추가됩니다. Quote Tweet의 경우 새 텍스트가 포스트 본문 뒤에 추가됩니다. 일반적으로는, 가능한 경우 항상 retweeted_status 내의 원본 포스트에서 텍스트, 엔티티, 원본 작성자 및 날짜를 가져오는 것이 모범 사례입니다. 예외적으로는, 추가된 Quote 부분에 포함된 X 엔티티를 가져와야 하는 경우가 있습니다. 자세한 내용과 팁은 아래를 참고하세요.

Retweets

Retweet과 관련된 중요한 세부 사항은, Retweet 시 해당 게시물에 새로운 X entities 를 추가할 수 없다는 점입니다. 사용자는 Retweet을 할 때 해시태그, URL 또는 기타 세부 정보를 추가할 수 없습니다. 하지만 Retweet의 (top-level) text 속성은 원본 게시물의 텍스트 앞에 “RT @username: ”가 붙은 형태로 구성됩니다.   특히 사용자 이름이 긴 계정의 경우처럼, 새로 추가된 문자와 원본 게시물 본문이 합쳐지면 원래 게시물 텍스트의 길이 제한인 140자를 쉽게 초과할 수 있습니다. 140자 기반 표시 및 저장에 대한 지원을 유지하기 위해, top-level 본문은 게시물 본문의 끝 부분을 잘라내고 말줄임표(“…”)를 추가합니다. 그 결과, 원본 게시물의 끝부분에 위치해 있던 일부 top-level entities — 예를 들어 잘려 나간 해시태그나 URL 항목 — 는 부정확해지거나 누락될 수 있습니다. 다음 게시물(https://x.com/FloodSocial/status/907974220298125312)의 게시물 텍스트는 다음과 같습니다:                Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag http://wapo.st/2w8iwPQ #Testing 위 예시에서는 URL과 해시태그 모두 영향을 받았습니다. 해시태그는 완전히 잘려 나가고 URL은 일부만 잘려 나갔기 때문에, 이들은 top-level entities 에서 누락되어 있습니다. 또한 text 필드 앞에 붙는 “RT @floodsocial: ” 접두어로 인해, 추가적인 user_mentions top-level entity 가 생긴 것도 확인할 수 있습니다. 그러나 retweeted_status 안의 게시물 텍스트와 entities 는 잘림이나 잘못된 entity 없이 원본 게시물을 정확하게 반영하므로, Retweet의 경우에는 중첩된 retweeted_status 객체를 사용하는 것을 권장합니다.

인용 Tweet

인용 Tweet은 2016년에 도입되었으며, Retweet과는 달리 게시물을 “인용(quote)“할 때 공유된 게시물 위에 새로운 콘텐츠를 덧붙인다는 점에서 차이가 있습니다. 이 새로운 콘텐츠에는 원래 게시물이 가질 수 있는 거의 모든 요소를 포함할 수 있으며, 여기에는 새로운 텍스트, 해시태그, 멘션, URL 등이 포함됩니다. 인용 Tweet에는 네이티브 미디어(사진, 동영상, GIF)를 포함할 수 있으며, entities 오브젝트 아래에 나타납니다. X의 entities에 항목을 추가할 수 있으므로, 인용에 해당하는 entities는 원본의 entities와 다를 가능성이 높습니다. 다음 예시에서는 새로운 URL과 해시태그가 인용 Tweet의 끝에 배치되어 있습니다. 이 게시물 https://x.com/FloodSocial/status/907983973225160704 의 게시물 텍스트는 다음과 같습니다:                   strange and equally tragic when islands flood… trans-atlantic testing of quote tweets | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing 이 경우, 최상위 entities는 인용에 대한 세부 내용을 반영하지 않습니다.  그러나 extended_tweet 내의 게시물 텍스트와 entities는 잘림(truncation)이나 잘못된 엔티티 없이 인용 Tweet을 완벽하게 반영하므로, 인용 Tweet의 경우 중첩된 _extended_tweet_ 오브젝트를 기준으로 삼을 것을 권장합니다.

사용자 오브젝트의 Entities

사용자 오브젝트의 Entities는 사용자가 정의한 프로필 URL 및 설명 필드에 나타나는 URL을 설명합니다. 이들은 해시태그나 user_mentions를 설명하지 않습니다. 게시물 엔티티와 달리, 사용자 엔티티는 상위 오브젝트 내 여러 필드에 적용될 수 있습니다. 이를 구분하기 위해, 어떤 필드에 엔티티가 적용된 URL이 포함되어 있는지 나타내는 상위 노드 urldescription이 제공됩니다. 이 예시에서 사용자 url 필드는 응답의 entities/url/urls[0] 노드 안에 완전히 확장된 형태의 t.co 링크를 포함합니다. 이 사용자의 설명(description)에는 래핑된 URL이 포함되어 있지 않습니다.

JSON 예시

{
  "id": 6253282,
  "id_str": "6253282",
  "name": "X API",
  "screen_name": "xapi",
  "location": "San Francisco, CA",
  "description": "The Real X API. I tweet about API changes, service issues and happily answer questions about X and our API. Don't get an answer? It's on my website.",
  "url": "http:\/\/t.co\/78pYTvWfJd",
  "entities": {
    "url": {
      "urls": [
        {
          "url": "http:\/\/t.co\/78pYTvWfJd",
          "expanded_url": "http:\/\/dev.x.com",
          "display_url": "dev.x.com",
          "indices": [
            0,
            22
          ]
        }
      ]
    },
    "description": {
      "urls": [

      ]
    }
  }
}

X 확장 엔티티

이 페이지에서 바로가기 소개 Extended Entities 객체 예제 Tweet 및 JSON 페이로드   - 네 장의 네이티브 사진이 포함된 Tweet   - 네이티브 동영상이 포함된 Tweet   - 애니메이션 GIF가 포함된 Tweet 다음 단계

소개

게시물에 네이티브 미디어(외부 링크가 아니라 게시물 UI를 통해 공유된 미디어)가 포함되어 있으면 extended&#95;entities 섹션도 존재합니다. 네이티브 미디어(사진, 동영상, GIF)의 경우 여러 가지 이유로 extended&#95;entities가 선호되는 메타데이터 소스입니다. 현재 하나의 게시물에는 최대 네 장의 사진을 첨부할 수 있습니다. entities 메타데이터에는 첫 번째 사진만 포함되지만(2014년까지는 사진을 한 장만 포함할 수 있었습니다) extended&#95;entities 섹션에는 첨부된 모든 사진이 포함됩니다. 네이티브 미디어에서 entities.media 메타데이터의 또 다른 한계점은, 첨부된 미디어가 동영상이거나 애니메이션 GIF인 경우에도 미디어 type이 항상 ‘photo’로 표시된다는 점입니다. 실제 미디어 유형은 extended&#95;entities.media[].type 속성에 지정되며, photo, video, animated_gif 중 하나로 설정됩니다. 이러한 이유로 네이티브 미디어를 다루는 경우에는 extended&#95;entities 메타데이터를 사용하는 것이 가장 좋습니다. 사진, 동영상, 애니메이션 GIF가 첨부된 모든 포스트에는 extended_entities JSON 객체가 포함됩니다. extended_entities 객체에는 media 객체들로 이루어진 단일 media 배열이 포함됩니다(데이터 사전은 entities 섹션을 참조). 해시태그나 링크와 같은 다른 엔티티 typeextended_entities 섹션에는 포함되지 않습니다. extended_entities 섹션의 media 객체는 entities 섹션에 포함된 것과 구조가 동일합니다. 게시물에는 한 종류의 미디어만 첨부할 수 있습니다. 사진의 경우 최대 네 장까지 첨부할 수 있고, 동영상 및 GIF는 하나만 첨부할 수 있습니다. extended_entities 섹션의 미디어 type 메타데이터는 미디어 유형(‘photo’, ‘video’, ‘animated_gif’)을 정확히 나타내며 최대 4장의 사진을 지원하므로, 네이티브 미디어에 대해서는 우선적으로 사용해야 하는 메타데이터 소스입니다.
{
      "extended_entities": {
        "media": [

        ]
      }
    }

포스트 예시와 JSON 페이로드

아래는 몇 가지 포스트 예시와 각 포스트에 연결된 엔티티 메타데이터입니다. 네 개의 네이티브 사진이 포함된 포스트 해시태그, 사용자 멘션, 캐시태그, URL, 네 개의 네이티브 사진이 포함된 포스트:
이 포스트에 대한 entities 섹션은 다음과 같습니다:
{
      "entities": {
        "hashtags": [
          {
            "text": "hashtag",
            "indices": [
              59,
              67
            ]
          }
        ],
        "urls": [
          {
            "url": "https://t.co/RzmrQ6wAzD",
            "expanded_url": "http://bit.ly/2pUk4be",
            "display_url": "bit.ly/2pUk4be",
            "unwound": {
              "url": "https://blog.gnip.com/tweeting-in-the-rain/",
              "status": 200,
              "title": "Tweeting in the Rain, Part 1 - Gnip Blog - Social Data and Data Science Blog",
              "description": "If you would have told me a few years ago that one day I’d be comparing precipitation and social media time-series data, I would have assumed you were joking.  For 13 years at OneRain I helped develop software and monitoring … Continue reading →"
            },
            "indices": [
              35,
              58
            ]
          }
        ],
        "user_mentions": [
          {
            "screen_name": "MentionThis",
            "name": "Just Me",
            "id": 50247739,
            "id_str": "50247739",
            "indices": [
              16,
              28
            ]
          }
        ],
        "symbols": [
          {
            "text": "twtr",
            "indices": [
              29,
              34
            ]
          }
        ],
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }
아래의 이 ‘extended’ 페이로드에만 최대 네 개의 네이티브 사진이 포함됩니다. 배열의 첫 번째 사진이 extended가 아닌 X entities 섹션에 포함된 단일 사진과 동일하다는 점에 유의하세요. 사진용 media 메타데이터 구조는 entities 섹션과 extended_entities 섹션 모두에서 동일합니다. 이 게시물의 extented_entities 섹션은 다음과 같습니다:
{
    "extended_entities": {
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627472244203520,
            "id_str": "861627472244203520",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474144149504,
            "id_str": "861627474144149504",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474760708096,
            "id_str": "861627474760708096",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }

네이티브 동영상이 포함된 게시물

아래는 동영상이 포함된 이 게시물의 extended entities 메타데이터입니다:
{
      "extended_entities": {
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "video",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                9,
                16
              ],
              "duration_millis": 10704,
              "variants": [
                {
                  "bitrate": 320000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/180x320/FMei8yCw7yc_Z7e-.mp4"
                },
                {
                  "bitrate": 2176000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/720x1280/octt5pFbISkef8RB.mp4"
                },
                {
                  "bitrate": 832000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/360x640/2OmqK74SQ9jNX8mZ.mp4"
                },
                {
                  "content_type": "application/x-mpegURL",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/pl/wcJQJ2nxiFU4ZZng.m3u8"
                }
              ]
            }
          }
        ]
      }
    }
광고주가 동영상 재생을 X가 소유·운영하는 플랫폼에서만 가능하도록 제한하기로 선택하면, video_info 객체는 additional_media_info 객체로 대체됩니다. additional_media_info에는 게시자가 제공한 title, description, embeddable flag 등 추가 미디어 정보가 포함됩니다. embeddable=false인 경우 동영상 콘텐츠는 X의 공식 클라이언트에서만 이용할 수 있습니다. 이때 페이로드에 포함된 모든 동영상 URL은 X 기반이므로, 사용자는 링크를 클릭해 X 소유 자산에서 동영상을 열 수 있습니다. 이러한 상황에서 extended entities 객체가 어떻게 표시되는지에 대한 예시는 다음과 같습니다:
{
      "extended_entities": {
        "media": [
          {
            "id": 924685332347469824,
            "id_str": "924685332347469824",
            "indices": [
              49,
              72
            ],
            "media_url": "http://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "media_url_https": "https://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "url": "https://t.co/90xOJqKMox",
            "display_url": "pic.x.com/90xOJqKMox",
            "expanded_url": "https://x.com/nyjets/status/924685391524798464/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 383,
                "resize": "fit"
              },
              "medium": {
                "w": 1200,
                "h": 675,
                "resize": "fit"
              },
              "large": {
                "w": 1280,
                "h": 720,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              }
            },
            "additional_media_info": {
              "title": "#ATLvsNYJ: McCown의 Tomlinson TD",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
위에서 설명했듯이, 아래는 type이 ‘photo’로 잘못 설정된 entities 섹션입니다. 다시 한 번, ‘video’와 ‘animated_gif’을 포함한 모든 네이티브 미디어 타입에는 extended_entities 섹션을 사용하는 것이 권장됩니다.
    {
    "entities": {
        "hashtags": [

        ],
        "urls": [

        ],
        "user_mentions": [

        ],
        "symbols": [

        ],
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            }
          }
        ]
      }

    }

애니메이션 GIF가 포함된 게시물

아래는 이 애니메이션 GIF 게시물의 extended entities 메타데이터입니다.
{
      "extended_entities": {
        "media": [
          {
            "id": 870042654213459968,
            "id_str": "870042654213459968",
            "indices": [
              29,
              52
            ],
            "media_url": "http://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "url": "https://t.co/nD6G4bWSKb",
            "display_url": "pic.x.com/nD6G4bWSKb",
            "expanded_url": "https://x.com/FloodSocial/status/870042717589340160/photo/1",
            "type": "animated_gif",
            "sizes": {
              "medium": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              },
              "small": {
                "w": 340,
                "h": 255,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                175,
                131
              ],
              "variants": [
                {
                  "bitrate": 0,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/tweet_video/DBMDLy_U0AAqUWP.mp4"
                }
              ]
            }
          }
        ]
      }
    }

Native Enriched 예시 페이로드

게시물

{
	"created_at": "Fri Sep 18 18:36:15 +0000 2020",
	"id": 1307025659294675000,
	"id_str": "1307025659294674945",
	"text": "새로운 Tweet payload v2의 업데이트를 강조하는 기사입니다 https://t.co/oeF3ZHeKQQ",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1304102743196356600,
	"in_reply_to_status_id_str": "1304102743196356610",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 목소리이자 #XAPI와 관련된 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 1,
	"reply_count": 2,
	"retweet_count": 11,
	"favorite_count": 70,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"unwound": {
				"url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
				"status": 200,
				"title": "X API v2의 새로운 Tweet payload 이해하기",
				"description": "X는 최근 새로운 기능을 제공하기 위해 처음부터 다시 구축된 새로운 X API v2를 발표했습니다..."
			},
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

답글 게시물

{
	"created_at": "Fri Aug 21 19:10:05 +0000 2020",
	"id": 1296887316556980200,
	"id_str": "1296887316556980230",
	"text": "@PennMedCDH가 COVID-19 보건 위기를 이해하기 위해 X 데이터를 활용하는 방법을 확인하세요 📊\n\nhttps://t.co/1tdA8uDWes",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1296887091901718500,
	"in_reply_to_status_id_str": "1296887091901718529",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 공식 채널이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 정보 출처입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 2,
	"reply_count": 3,
	"retweet_count": 9,
	"favorite_count": 26,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"unwound": {
				"url": "https://developer.x.com/en/use-cases/success-stories/penn",
				"status": 200,
				"title": "Penn Medicine Center for Digital Health",
				"description": "Penn Med Center for Digital Health는 감정 분석, 보고된 증상, 주별 데이터 분석, COVID-19 발생에 대한 국경 데이터를 상세히 보여주는 차트가 포함된 COVID-19 X 지도를 제작했습니다. 또한 Penn Med With You 이니셔티브는 X의 지역별 집계 정보를 활용하여 웹사이트와 문자 메시지 서비스에 정보를 제공합니다. 이 서비스는 해당 정보를 사용하여 관련성 있고 시의적절한 리소스를 제공합니다."
			},
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

확장 게시물

{
	"created_at": "Wed Aug 19 16:26:16 +0000 2020",
	"id": 1296121314218897400,
	"id_str": "1296121314218897408",
	"text": "답글 숨기기 엔드포인트가 오늘 출시됩니다! \n\n개발자는 Tweet에 대한 답글을 숨길 수 있습니다 - 개발자가… https://t.co/VyfXs1RTXn",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 공식 채널이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "답글 숨기기 엔드포인트가 오늘 출시됩니다! \n\n개발자는 Tweet에 대한 답글을 숨길 수 있습니다 - #XAPI를 사용하여 공개 대화의 건전성을 개선하는 데 도움이 되는 중요한 방법입니다.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"unwound": {
					"url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
					"status": 200,
					"title": "새로운 X API에서 답글 숨기기 기능 제공",
					"description": "오늘 새로운 X API에서 답글 숨기기 엔드포인트의 정식 출시를 발표하게 되어 기쁩니다. 답글 숨기기 엔드포인트를 사용하면 사용자가 자신의 Tweet에 대한 답글을 숨기거나 숨김 해제할 수 있도록 돕는 도구를 구축할 수 있습니다. 사용자는 욕설, 주의 산만, 오해의 소지가 있는 댓글에 덜 주목하거나 대화를 더 매력적으로 만들기 위해 등 여러 가지 이유로 답글을 관리합니다. 이 엔드포인트를 통해 X 사용자가 답글을 더 빠르고 효율적으로 숨기거나 숨김 해제할 수 있도록 돕는 도구를 구축할 수 있습니다..."
				},
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 23,
	"reply_count": 9,
	"retweet_count": 54,
	"favorite_count": 172,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

extended_entitites 필드가 포함된 게시물

{
	"created_at": "Wed Aug 12 17:01:42 +0000 2020",
	"id": 1293593516040269800,
	"id_str": "1293593516040269825",
	"text": "드디어 출시되었습니다! 🥁 새로운 #XAPI를 만나보세요.\n\nX API v2를 처음부터 새롭게 구축하고 있습니다… https://t.co/UeCndQGMjx",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 정보 제공처입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "드디어 출시되었습니다! 🥁 새로운 #XAPI를 만나보세요.\n\n개발자 커뮤니티에 더 나은 서비스를 제공하기 위해 X API v2를 처음부터 새롭게 구축하고 있습니다. 오늘의 출시는 시작에 불과합니다.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"unwound": {
					"url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
					"status": 200,
					"title": "새롭게 개선된 X API 소개",
					"description": "새로운 X API 소개 - 개발자들이 X에서 일어나는 공개 대화에 전 세계를 연결할 수 있도록 새로운 기능을 더 빠르게 제공하기 위해 처음부터 새롭게 구축되었습니다."
				},
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"quote_count": 332,
	"reply_count": 172,
	"retweet_count": 958,
	"favorite_count": 2844,
	"entities": {
		"hashtags": [{
			"text": "XAPI",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

리트윗

{
	"created_at": "Tue Feb 18 19:33:59 +0000 2020",
	"id": 1229851574555508700,
	"id_str": "1229851574555508737",
	"text": "RT @suhemparack: APL을 사용해서 X용 Alexa 스킬을 만들었어요. echo show에서 Tweet과 트렌드를 볼 수 있습니다!\n\n여기서 확인해 보세요…",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X 웹 앱</a>",
	"truncated": false,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "X Developers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 공식 채널이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"retweeted_status": {
		"created_at": "Tue Feb 18 19:01:58 +0000 2020",
		"id": 1229843515603144700,
		"id_str": "1229843515603144704",
		"text": "APL을 사용해서 X용 Alexa 스킬을 만들었어요. echo show에서 Tweet과 트렌드를 볼 수 있습니다!\n\n여기서 확인해 보세요… https://t.co/RP9NgltX7i",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X 웹 앱</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"name": "Suhem Parack",
			"screen_name": "suhemparack",
			"location": "Seattle, WA",
			"url": "https://developer.x.com",
			"description": "@X 학술 연구 개발자 관계 담당. X 데이터를 활용한 연구에 대해 이야기 나눠요. 이전: Amazon Alexa. 개인 의견입니다",
			"translator_type": "none",
			"protected": false,
			"verified": false,
			"followers_count": 732,
			"friends_count": 501,
			"listed_count": 12,
			"favourites_count": 358,
			"statuses_count": 458,
			"created_at": "Thu Apr 27 20:56:22 +0000 2017",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": false,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "F5F8FA",
			"profile_background_image_url": "",
			"profile_background_image_url_https": "",
			"profile_background_tile": false,
			"profile_link_color": "1DA1F2",
			"profile_sidebar_border_color": "C0DEED",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": true,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/857699969263964161/1593055939",
			"default_profile": true,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "APL을 사용해서 X용 Alexa 스킬을 만들었어요. echo show에서 Tweet과 트렌드를 볼 수 있습니다!\n\n여기서 확인해 보세요 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"unwound": {
						"url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
						"status": 200,
						"title": null,
						"description": null
					},
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 6,
		"reply_count": 1,
		"retweet_count": 19,
		"favorite_count": 71,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"is_quote_status": false,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 0,
	"entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

인용 Tweet

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "계획대로 아래에 언급된 Labs v2 엔드포인트가 종료되었습니다. 문제가 있으시면 포럼에 알려주세요… https://t.co/ahQvTYaOcZ",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"quoted_status_id": 1327011423252144000,
	"quoted_status_id_str": "1327011423252144128",
	"quoted_status": {
		"created_at": "Thu Nov 12 22:12:32 +0000 2020",
		"id": 1327011423252144000,
		"id_str": "1327011423252144128",
		"text": "👋 X Developer Labs v2 답글 숨기기 및 최근 검색 기능이 다음 주 월요일에 종료됩니다… https://t.co/EEWN2Q9aXh",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 2244994945,
			"id_str": "2244994945",
			"name": "X Dev",
			"screen_name": "XDevelopers",
			"location": "127.0.0.1",
			"url": "https://developer.x.com/en/community",
			"description": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
			"translator_type": "regular",
			"protected": false,
			"verified": true,
			"followers_count": 512292,
			"friends_count": 2038,
			"listed_count": 1666,
			"favourites_count": 2147,
			"statuses_count": 3634,
			"created_at": "Sat Dec 14 04:35:55 +0000 2013",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": true,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "FFFFFF",
			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_tile": false,
			"profile_link_color": "0084B4",
			"profile_sidebar_border_color": "FFFFFF",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": false,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
			"default_profile": false,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "👋 X Developer Labs v2 답글 숨기기 및 최근 검색 기능이 다음 주 월요일인 11월 16일에 종료됩니다! v2 #XAPI에서 현재 제공되는 새로운 답글 숨기기 및 최근 검색 엔드포인트로 마이그레이션하시기 바랍니다. 자세한 내용: https://t.co/r6z6CI7kEy",
			"display_text_range": [
				0,
				273
			],
			"entities": {
				"hashtags": [{
					"text": "XAPI",
					"indices": [
						228,
						239
					]
				}],
				"urls": [{
					"url": "https://t.co/r6z6CI7kEy",
					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
					"display_url": "devcommunity.com/t/retiring-lab…",
					"unwound": {
						"url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
						"status": 200,
						"title": "Labs v2 최근 검색 및 답글 숨기기 종료",
						"description": "얼리 액세스 및 답글 숨기기 공지에서 안내드린 바와 같이, 다음 X Developer Labs v2 엔드포인트가 11월 16일에 종료됩니다. Labs v2 최근 검색 Labs v2 답글 숨기기 호출 시 이러한 엔드포인트는 HTTP 410 상태로 응답하며 데이터를 반환하지 않습니다. Labs에서 받은 피드백을 바탕으로 해당 기능을 X API v2에 통합했습니다. 관련 문서는 아래 링크에서 확인할 수 있습니다. 아직 등록하지 않으셨다면 여기를 클릭하여 v2 액세스에 등록하세요..."
					},
					"indices": [
						250,
						273
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 4,
		"reply_count": 2,
		"retweet_count": 8,
		"favorite_count": 33,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/EEWN2Q9aXh",
				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"quoted_status_permalink": {
		"url": "https://t.co/JaxttUMmjX",
		"expanded": "https://x.com/XDevelopers/status/1327011423252144128",
		"display": "x.com/XDevelopers/sta…"
	},
	"is_quote_status": true,
	"extended_tweet": {
		"full_text": "계획대로 아래에 언급된 Labs v2 엔드포인트는 종료되었습니다. X API v2 관련 질문이 있거나 도움이 필요하시면 포럼에 알려주세요! https://t.co/JaxttUMmjX",
		"display_text_range": [
			0,
			166
		],
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/JaxttUMmjX",
				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
				"display_url": "x.com/XDevelopers/sta…",
				"indices": [
					167,
					190
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 1,
	"reply_count": 4,
	"retweet_count": 7,
	"favorite_count": 29,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/ahQvTYaOcZ",
			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

리트윗된 인용 Tweet

{
 	"created_at": "Thu Feb 06 17:26:44 +0000 2020",
 	"id": 1225470895902412800,
 	"id_str": "1225470895902412800",
 	"text": "RT @AureliaSpecker: 📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that uses…",
 	"source": "<a href=\"http://x.com/download/iphone\" rel=\"nofollow\">X for iPhone</a>",
 	"truncated": false,
 	"in_reply_to_status_id": null,
 	"in_reply_to_status_id_str": null,
 	"in_reply_to_user_id": null,
 	"in_reply_to_user_id_str": null,
 	"in_reply_to_screen_name": null,
 	"user": {
 		"id": 2244994945,
 		"id_str": "2244994945",
 		"name": "X Dev",
 		"screen_name": "XDevelopers",
 		"location": "127.0.0.1",
 		"url": "https://developer.x.com/en/community",
 		"description": "The voice of the #XDevelopers team and your official source for updates, news, and events, related to the #XAPI.",
 		"translator_type": "regular",
 		"protected": false,
 		"verified": true,
 		"followers_count": 512292,
 		"friends_count": 2038,
 		"listed_count": 1666,
 		"favourites_count": 2147,
 		"statuses_count": 3634,
 		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
 		"utc_offset": null,
 		"time_zone": null,
 		"geo_enabled": true,
 		"lang": null,
 		"contributors_enabled": false,
 		"is_translator": false,
 		"profile_background_color": "FFFFFF",
 		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_tile": false,
 		"profile_link_color": "0084B4",
 		"profile_sidebar_border_color": "FFFFFF",
 		"profile_sidebar_fill_color": "DDEEF6",
 		"profile_text_color": "333333",
 		"profile_use_background_image": false,
 		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
 		"default_profile": false,
 		"default_profile_image": false,
 		"following": null,
 		"follow_request_sent": null,
 		"notifications": null
 	},
 	"geo": null,
 	"coordinates": null,
 	"place": null,
 	"contributors": null,
 	"retweeted_status": {
 		"created_at": "Tue Feb 04 15:01:25 +0000 2020",
 		"id": 1224709550214873000,
 		"id_str": "1224709550214873090",
 		"text": "📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that u… https://t.co/cAepHunkFp",
 		"display_text_range": [
 			0,
 			140
 		],
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "London, UK",
 			"url": null,
 			"description": "devrel @TwitterUK • Swiss in London • mother of houseplants • personal hairdresser to @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"quoted_status_id": 1195000047089389600,
 		"quoted_status_id_str": "1195000047089389573",
 		"quoted_status": {
 			"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 			"id": 1195000047089389600,
 			"id_str": "1195000047089389573",
 			"text": "I wrote a tutorial on how to get bespoke commute information using the X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 			"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 			"truncated": true,
 			"in_reply_to_status_id": null,
 			"in_reply_to_status_id_str": null,
 			"in_reply_to_user_id": null,
 			"in_reply_to_user_id_str": null,
 			"in_reply_to_screen_name": null,
 			"user": {
 				"id": 1102321381,
 				"id_str": "1102321381",
 				"name": "Aurelia Specker",
 				"screen_name": "AureliaSpecker",
 				"location": "London, UK",
 				"url": null,
 				"description": "devrel @TwitterUK • Swiss in London • mother of houseplants • personal hairdresser to @_dormrod",
 				"translator_type": "none",
 				"protected": false,
 				"verified": false,
 				"followers_count": 1032,
 				"friends_count": 1331,
 				"listed_count": 26,
 				"favourites_count": 4979,
 				"statuses_count": 854,
 				"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 				"utc_offset": null,
 				"time_zone": null,
 				"geo_enabled": true,
 				"lang": null,
 				"contributors_enabled": false,
 				"is_translator": false,
 				"profile_background_color": "8B542B",
 				"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_tile": false,
 				"profile_link_color": "5E341C",
 				"profile_sidebar_border_color": "D9B17E",
 				"profile_sidebar_fill_color": "EADEAA",
 				"profile_text_color": "333333",
 				"profile_use_background_image": true,
 				"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 				"default_profile": false,
 				"default_profile_image": false,
 				"following": null,
 				"follow_request_sent": null,
 				"notifications": null
 			},
 			"geo": null,
 			"coordinates": null,
 			"place": null,
 			"contributors": null,
 			"is_quote_status": false,
 			"extended_tweet": {
 				"full_text": "X API를 사용하여 맞춤형 출퇴근 정보를 얻는 방법에 대한 튜토리얼을 작성했습니다🚇\n\n#DEVcommunity #Pythontutorial \n\n여기에서 확인하세요 👇\nhttps://t.co/sOjXW4YhbN",
 				"display_text_range": [
 					0,
 					160
 				],
 				"entities": {
 					"hashtags": [{
 							"text": "DEVcommunity",
 							"indices": [
 								85,
 								98
 							]
 						},
 						{
 							"text": "Pythontutorial",
 							"indices": [
 								99,
 								114
 							]
 						}
 					],
 					"urls": [{
 						"url": "https://t.co/sOjXW4YhbN",
 						"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"display_url": "dev.to/twitterdev/usi…",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							137,
 							160
 						]
 					}],
 					"user_mentions": [],
 					"symbols": []
 				}
 			},
 			"quote_count": 4,
 			"reply_count": 5,
 			"retweet_count": 31,
 			"favorite_count": 123,
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/pL0qJ4vhtE",
 					"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 					"display_url": "x.com/i/web/status/1…",
 					"indices": [
 						116,
 						139
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			},
 			"favorited": false,
 			"retweeted": false,
 			"possibly_sensitive": false,
 			"filter_level": "low",
 			"lang": "en"
 		},
 		"quoted_status_permalink": {
 			"url": "https://t.co/dXrJYvn3hY",
 			"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 			"display": "x.com/AureliaSpecker…"
 		},
 		"is_quote_status": true,
 		"extended_tweet": {
 			"full_text": "📣 작년 11월에 제가 작성한 런던 출퇴근 튜토리얼이 마음에 드셨다면, X의 새로운 검색 엔드포인트를 사용하는 리팩토링 버전을 확인해보세요 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDev @XAPI https://t.co/dXrJYvn3hY",
 			"display_text_range": [
 				0,
 				229
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							176,
 							189
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							190,
 							205
 						]
 					}
 				],
 				"urls": [{
 						"url": "https://t.co/87XIPZmZBJ",
 						"expanded_url": "https://bit.ly/2OrnrCC",
 						"display_url": "bit.ly/2OrnrCC",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							151,
 							174
 						]
 					},
 					{
 						"url": "https://t.co/dXrJYvn3hY",
 						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
 						"display_url": "x.com/AureliaSpecker…",
 						"indices": [
 							230,
 							253
 						]
 					}
 				],
 				"user_mentions": [{
 						"screen_name": "XDev",
 						"name": "X Dev",
 						"id": 2244994945,
 						"id_str": "2244994945",
 						"indices": [
 							206,
 							217
 						]
 					},
 					{
 						"screen_name": "XAPI",
 						"name": "X API",
 						"id": 6253282,
 						"id_str": "6253282",
 						"indices": [
 							218,
 							229
 						]
 					}
 				],
 				"symbols": []
 			}
 		},
 		"quote_count": 2,
 		"reply_count": 0,
 		"retweet_count": 12,
 		"favorite_count": 43,
 		"entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/cAepHunkFp",
 				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_id": 1195000047089389600,
 	"quoted_status_id_str": "1195000047089389573",
 	"quoted_status": {
 		"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 		"id": 1195000047089389600,
 		"id_str": "1195000047089389573",
 		"text": "X API를 사용하여 맞춤형 출퇴근 정보를 얻는 방법에 대한 튜토리얼을 작성했습니다🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X 웹 앱</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "London, UK",
 			"url": null,
 			"description": "devrel @TwitterUK • 런던에 사는 스위스인 • 식물 집사 • @_dormrod의 전담 미용사",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"is_quote_status": false,
 		"extended_tweet": {
 			"full_text": "X API를 사용해서 맞춤형 출퇴근 정보를 받는 방법에 대한 튜토리얼을 작성했어요🚇\n\n#DEVcommunity #Pythontutorial \n\n여기서 확인해보세요 👇\nhttps://t.co/sOjXW4YhbN",
 			"display_text_range": [
 				0,
 				160
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/sOjXW4YhbN",
 					"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 					"display_url": "dev.to/twitterdev/usi…",
 					"unwound": {
 						"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"status": 200,
 						"title": null,
 						"description": null
 					},
 					"indices": [
 						137,
 						160
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"quote_count": 4,
 		"reply_count": 5,
 		"retweet_count": 31,
 		"favorite_count": 123,
 		"entities": {
 			"hashtags": [{
 					"text": "DEVcommunity",
 					"indices": [
 						85,
 						98
 					]
 				},
 				{
 					"text": "Pythontutorial",
 					"indices": [
 						99,
 						114
 					]
 				}
 			],
 			"urls": [{
 				"url": "https://t.co/pL0qJ4vhtE",
 				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					116,
 					139
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_permalink": {
 		"url": "https://t.co/dXrJYvn3hY",
 		"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 		"display": "x.com/AureliaSpecker…"
 	},
 	"is_quote_status": true,
 	"quote_count": 0,
 	"reply_count": 0,
 	"retweet_count": 0,
 	"favorite_count": 0,
 	"entities": {
 		"hashtags": [],
 		"urls": [],
 		"user_mentions": [{
 			"screen_name": "AureliaSpecker",
 			"name": "Aurelia Specker",
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"indices": [
 				3,
 				18
 			]
 		}],
 		"symbols": []
 	},
 	"favorited": false,
 	"retweeted": false,
 	"filter_level": "low",
 	"lang": "en",
 	"matching_rules": [{
 		"tag": null
 	}]
 }

Enterprise Activity Streams 데이터 객체

Activity Streams 데이터 형식이 X API v2 형식에 어떻게 매핑되는지 더 알아보고 싶으신가요?
비교 가이드를 확인하세요: Activity Streams compared to X API v2
주의: 엔터프라이즈 데이터 API에는 Enriched Native 형식을 사용하는 것을 강력히 권장합니다. 
  • Enriched Native 형식에는 투표 메타데이터와 같은 2017년 이후의 모든 신규 메타데이터와 reply_count 및 quote_count 같은 추가 지표(메트릭)가 포함되어 있습니다.
  • Activity Streams 형식은 2017년의 문자 수 업데이트 이후 새로운 메타데이터나 데이터 보강(enrichment)으로 업데이트되지 않았습니다.

Activity Object

Activity Streams는 Gnip이 만든 객체 스키마로, X의 원래 데이터 형식을 제3자 Activity Base Schema(여기에서 설명)를 사용해 게시물 데이터와 기타 소셜 미디어 데이터를 ‘형식 표준화(normalize the format)’하기 위해 변환한 것입니다. 포스트는 note, person, place, service 객체 type과 같은 중첩 객체들을 포함하는 Activity Streams 스키마로 정규화됩니다. 포스트에는 Retweet에 대한 중첩 게시물 activity 객체나 twitter_quoted_status, long_object 등이 중첩될 수 있습니다. 기본 레벨 객체 type인 “activity”는 네이티브 enriched 형식의 게시물 기본 레벨 객체와 유사합니다. Activity Streams 형식의 예제 payload는 여기에서 확인할 수 있습니다.

데이터 사전

아래에서 이러한 ‘루트 수준’ “activity” 속성에 대한 데이터 사전과 하위 객체 데이터 사전에 대한 링크를 확인할 수 있습니다.
속성타입설명
idstring게시물에 대한 고유한 IRI입니다. 좀 더 자세히 말하면, “tag”는 스킴이고, “search.x.com”은 해당 스킴의 도메인을 나타내며, 2005는 이 스킴이 정의된 시점입니다.
포스트를 저장할 때는 이를 고유 식별자 또는 기본 키로 사용해야 합니다.
“id”: “tag:search.x.com,2005:1050118621198921728”
objectTypestring객체 type이며, 값은 항상 “activity”입니다
“objectType”: “activity”
objectobject게시되었거나 공유된 게시물을 나타내는 object입니다.
Retweet의 경우, 이 object에는 이 스키마에 설명된 관련 필드를 모두 포함하는 전체 “activity”가 들어 있습니다.
원본 게시물의 경우, 여기 설명된 필드를 가진 “note” object가 들어 있습니다.
“object”:
“object”:
“objectType”: “note”,
“id”: “object:search.x.com,2005:1050118621198921728”,
“summary”: “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm”,
“link”: “http://x.com/API/statuses/1050118621198921728”,
“postedTime”: “2018-10-10T20:19:24.000Z”
long_objectobject게시물 텍스트가 140자를 초과하는 경우 전체 텍스트 본문을 나타내는 객체입니다.


“long_object”:
“body”: “표현의 폭을 넓히기 위해 이제 성별 및 피부 톤 수정자가 있는 이모지를 포함해 모든 이모지를 동일하게 계산합니다. 이는 이제 우리의 오픈 소스 라이브러리인 Twitter-Text에 반영되었습니다. \n\nTwitter-Text를 사용 중이신가요? 자세한 내용은 포럼 게시물을 참조하세요: https://t.co/Nx1XZmRCXA”,
“display_text_range”: [
0,
277
],
“twitter_entities”:
“hashtags”: [],
“urls”: [

“url”: “https://t.co/Nx1XZmRCXA”,
“expanded_url”: “https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607”,
“display_url”: “devcommunity.com/t/new-update-t…”,
“indices”: [
254,
277
]

],
“user_mentions”: [],
“symbols”: []

display_text_rangearray게시물 본문이 140자를 초과하는 경우.


“display_text_range”: [
0,
142
]
verbstring사용자가 수행하는 작업의 type입니다.
포스트, “post”
리트윗, “share”
삭제된 포스트, “delete”
이 동사(verb)는 Tweet과 실제 Retweet을 구분하는 올바른 방법입니다. 다만, 이는 실제 리트윗에만 적용되며, X 리트윗 기능을 사용하지 않는 수정되거나 인용된 Tweet에는 적용되지 않습니다. AS 동사에 대한 설명은
여기를 참고하세요.
삭제(Deletes)의 경우, 아래 샘플 페이로드에 표시된 것처럼 제한된 수의 필드만 포함된다는 점에 유의하세요.
“verb”: “post”
postedTime날짜 (ISO 8601)동작이 발생한 시간입니다. 예를 들어, 게시물이 게시된 시각입니다.


“postedTime”: “2018-10-10T20:19:24.000Z”
generatorobject게시물을 게시하는 데 사용된 도구를 나타내는 객체입니다. 여기에는 게시물을 생성한 소스 애플리케이션의 이름(“displayName”)과 링크(“link”)가 포함됩니다.
“generator”:
“displayName”: “X Web Client”,
“link”: “http://x.com
providerobject활동 제공자를 나타내는 JSON 객체입니다. 이 객체에는 objectType(“service”), 제공자 이름(“displayName”), 제공자 웹사이트 링크(“link”)가 포함됩니다.
“provider”:

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
linkstring게시물의 퍼머링크입니다.
“link”: “http://x.com/API/statuses/1050118621198921728
bodystring게시물의 텍스트입니다.

리트윗의 경우, X가 루트 레벨의 body 값 앞에 “RT @username”를 추가하고 원본 텍스트를 잘라 끝에 줄임표를 붙이는 방식으로 값을 변경한다는 점에 유의하세요. 따라서 리트윗에 대해서는, App에서 object.body를 참조하여 원본 게시물(리트윗 대상 게시물)의 수정되지 않은 텍스트를 추출하고 있는지 확인해야 합니다.
“body”: “With Cardiff, Crystal Palace, and Hull City joining the EPL from the Championship it will be a great relegation battle at the end.”
display_text_rangearray본문 텍스트 내에서 실제로 화면에 표시되는 게시물 구간을 나타내는 문자 범위를 설명합니다. 앞부분에 @멘션이 있는 포스트는 시작 값이 0보다 크고, 미디어가 첨부된 포스트나 140자를 초과하는 포스트는 long_object 안의 display_text_range로 제공됩니다.

“display_text_range”: [
14,
42
]
or
“long_object”:
“display_text_range”: [
0,
277
]…
actorobject게시물을 작성한 X 사용자를 나타내는 객체입니다. Actor Object는 X 사용자(X User)를 가리키며, 해당 사용자와 관련된 모든 메타데이터를 포함합니다.
자세한 내용은
Actor Object 세부 정보
inReplyToobject해당되는 경우, 답글을 단 게시물을 참조하는 JSON 객체입니다. 게시물에 대한 링크를 포함합니다.
“inReplyTo”:

“link”: “http://x.com/GOP/statuses/349573991561838593
locationobjectX의 “Place”로, 게시물이 생성된 위치를 나타내는 JSON 객체입니다. 이 객체는 X 플랫폼에서 그대로 전달되는 객체입니다.

자세한 내용은
location object를 참조하세요
twitter_entitiesobjectX의 데이터 형식에서 urls, 멘션, 해시태그 리스트를 포함하는 entities 객체입니다. Entities에 대해서는 여기에서 X 문서를 참고하세요. 리트윗의 경우, X가 루트 수준에서 추출한 entities 값들을 잘라낼 수 있습니다. 따라서 리트윗에서는 잘린 값이 아닌 전체 값을 사용하고 있는지 확인하기 위해 App에서 object.twitter_entities를 참조해야 합니다.

twitter_entities 객체 세부 정보를 참조하세요
twitter_extended_entitiesobjectX의 네이티브 데이터 형식에서 “media”를 포함하는 객체입니다. twitter_entities 객체의 “media” 필드에 데이터가 있는 모든 게시물에 이 객체가 포함되며, 게시물에 여러 장의 사진이 있을 경우 그 사진들을 모두 포함합니다. 여러 장의 사진이 포함된 게시물의 미디어 정보를 가져오려면 이 위치를 사용하는 것이 올바른 방법입니다.

여러 장의 사진은 “media” 배열 내에서 쉼표로 구분된 JSON 객체들로 표현됩니다.

twitter_extended_entities 객체 상세 정보를 참조하세요.
gnipobject스트림이나 제품에서 활성화된 enrichment를 기반으로 매칭 규칙을 나타내고 보강된 데이터를 포함하도록 activity 페이로드에 추가되는 객체입니다.

gnip 객체 세부 정보를 참조하세요.
edit_history객체게시물의 모든 버전을 나타내는 고유 식별자입니다. 수정 이력이 없는 게시물의 경우 ID는 하나만 존재합니다. 수정 이력이 있는 게시물의 경우 여러 개의 ID가 있으며, 수정 순서를 반영하도록 오름차순으로 정렬되며 배열의 마지막 위치에 가장 최신 버전이 위치합니다. 

게시물 ID는 이전 버전의 게시물을 복원(hydrate)하고 조회하는 데 사용할 수 있습니다.

예시:

edit_history”:
“initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
edit_controls객체존재하는 경우, 게시물을 얼마나 더 편집할 수 있는지와 남은 편집 횟수를 나타냅니다. 포스트는 생성 후 처음 30분 동안만 편집할 수 있으며, 최대 다섯 번까지 편집할 수 있습니다. 

게시물 ID는 이전 버전의 게시물을 복원하고 조회하는 데 사용할 수 있습니다.

예시:

“edit_controls”:
“editable_until_ms”: 123
“edits_remaining”: 3
editable부울 값존재하는 경우, 게시물이 게시될 당시 편집 대상이었는지를 나타냅니다. 이 필드는 동적으로 변경되지 않으며, 게시물이 편집 가능 시간 제한에 도달하거나 허용된 최대 편집 횟수에 도달하더라도 값이 True에서 False로 전환되지 않습니다. 다음과 같은 게시물 특성이 있으면 이 필드는 false가 됩니다:

* 게시물이 프로모션된 상태인 경우
* 게시물에 투표가 포함된 경우
* 자신이 시작한 스레드가 아닌 답글인 경우
* 게시물이 리트윗인 경우 (인용 Tweet은 편집 가능함)
* 게시물이 nullcast인 경우
* 커뮤니티 게시물인 경우
* Superfollow 게시물인 경우
* 공동 작성 게시물인 경우

추가 게시물 속성

AttributeTypeDescription
twitter_langstring
favoritesCountintNullable. 이 게시물이 X 사용자에게 좋아요를 받은 대략적인 횟수를 나타냅니다.

“favoritesCount”:298
retweetCountint이 게시물이 리트윗된 횟수입니다. 예:

“retweetCount”:153

사용 중단된 속성

FieldTypeDescription
geoobject게시물이 생성된 지리적 포인트 위치입니다.
twitter_filter_levelstring하위 호환성을 유지하기 위해 남겨 둔 사용 중단 필드입니다.

중첩된 게시물 활동 객체

여러 경우에 Post 객체 안에는 다른 중첩된 게시물이 포함됩니다. 중첩 객체를 다루는 경우, 해당 JSON 페이로드에는 여러 객체가 포함되며, 각 Post 객체는 자체적인 하위 객체를 포함할 수 있습니다. 루트 수준 객체에는 Retweet 인지 Quote Tweet 인지와 같이 수행된 작업의 type 정보가 포함되며, 공유되는 ‘원본’ 게시물을 설명하는 객체를 포함할 수도 있습니다. Extended Posts 에는 2017년 업데이트 당시 하위 호환성 유지를 위해 140자를 초과하는 내용을 담기 위한 중첩 확장 객체가 포함됩니다. 각 중첩 객체 딕셔너리에 대해서는 아래에서 설명합니다. Retweet Retweet 의 Activity Streams 형식에는 Retweet 되고 있는 원본 게시물을 표현하기 위해 type 이 “activity” 이고 verb 가 “note” 인 중첩 객체가 포함됩니다.
{
	"id": "tag:search.x.com,2005:222222222222",
	"objectType": "activity",
	"verb": "share",
	"body": "RT @TheOriginalTweeter: Coffee and art ☕️",
	"actor": {
		"displayName": "TheRetweeter"
	},
	"object": {
		"id": "tag:search.x.com,2005:11111111111",
		"objectType": "activity",
		"verb": "post",
		"body": "Coffee and art ☕️",
		"actor": {
			"displayName": "TheOriginalTweeter"
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:11111111111",
			"summary": "Coffee and art ☕️",
			"link": "http://x.com/originaltweeter/statuses/11111111111",
			"postedTime": "2020-12-04T11:00:01.000Z"
		},
		"twitter_entities": {},
		"twitter_extended_entities": {}
	},
	"twitter_entities": {},
	"twitter_extended_entities": {},
	"gnip": {}
}
X 인용 상태 Activity Streams 형식에는 인용 Tweet이 임베드됩니다 { "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } } 리트윗된 인용 Tweet:
    {
    	"id": "tag:search.x.com,2005:1293612267087384577",
    	"objectType": "activity",
    	"verb": "share",
    	"postedTime": "2020-08-12T18:16:13.000Z",
    	"generator": {},
    	"provider": {},
    	"link": "http://x.com/XDevelopers/statuses/1293612267087384577",
    	"body": "RT @compston: 이 첫 번째 엔드포인트 세트를 사용할 수 있게 되어 매우 기쁩니다 - 완료되기 전에 더 많은 것들이 제공될 예정입니다. @XDevelopers #DevRel 팀…",
    	"actor": {},
    	"object": {},
    	"favoritesCount": 0,
    	"twitter_entities": {},
    	"twitter_lang": "en",
    	"retweetCount": 13,
    	"gnip": {},
    	"twitter_filter_level": "low",
    	"twitter_quoted_status": {}
    }

Long object

extended_tweet의 Activity Streams 포맷
{
  "id": "tag:search.x.com,2005:1050118621198921728",
  "objectType": "activity",
  "verb": "post",
  "postedTime": "2018-10-10T20:19:24.000Z",
  "generator": {
    "displayName": "X Web Client",
    "link": "http://x.com"
  },
  "provider": {
    "objectType": "service",
    "displayName": "X",
    "link": "http://www.x.com"
  },
  "link": "http://x.com/API/statuses/1050118621198921728",
  "body": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm",
  "long_object": {
    "body": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin tone modifiers 👍🏻👍🏽👍🏿. This is now reflected in Twitter-Text, our Open Source library. \n\nUsing Twitter-Text? See the forum post for detail: https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "twitter_entities": {see twitter_entities object},
  "actor": {see actor object},
  "object": {
    "objectType": "note",
    "id": "object:search.x.com,2005:1050118621198921728",
    "summary": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm",
    "link": "http://x.com/API/statuses/1050118621198921728",
    "postedTime": "2018-10-10T20:19:24.000Z"
  },
  "favoritesCount": 298,
  "twitter_entities": {see twitter_entities object},
  "twitter_lang": "en",
  "retweetCount": 153,
  "gnip": {see gnip object},
  "twitter_filter_level": "low"
}

Actor 객체

Actor 객체에는 활동을 생성한 X 사용자를 설명하는 X 사용자 계정 메타데이터가 포함되어 있습니다.

데이터 사전

AttributeTypeDescription
objectTypestring”objectType”: “person”
idstring이 작성자의 고유 식별자를 나타내는 문자열입니다. 예:

“id:x.com:2244994945”
linkhttp://www.x.com/XDeveloeprs
displayNameString사용자가 지정한 이름입니다. 반드시 실제 사람의 이름일 필요는 없습니다. 일반적으로 50자까지로 제한되지만, 변경될 수 있습니다. 예:

“displayName”: “XDevelopers”
preferredUsernamestring이 사용자가 자신을 나타내는 화면 이름, 핸들, 또는 별칭입니다. 고유하지만 변경될 수 있습니다. 가능한 경우 항상 id를 사용자 식별자로 사용하세요. 일반적으로 최대 15자이지만, 더 긴 이름을 가진 과거 계정도 있을 수 있습니다. 예:

“preferredUsername”: “XDevelopers”
locationobject**        “location”:

“objectType”:** “place”,

“displayName”: “127.0.0.1”

**        }**
linksarrayNullable. 사용자 프로필과 연관해 사용자가 제공한 URL입니다. 예:

**       “links”: [

          {

“href”:** “https://developer.x.com/en/community,

“rel”: “me”

**          }

        ]**
summarystringNullable. 계정을 설명하는, 사용자가 정의한 UTF-8 문자열입니다. 예:

“summary”: “The voice of the #XDevelopers team…“
protectedBooleantrue인 경우, 이 사용자가 자신의 게시물을 보호하도록 선택했음을 나타냅니다. 공개 게시물 및 보호된 게시물에 대해를 참조하세요. 예:

“protected”: true
verifiedBooleantrue인 경우, 사용자가 인증된 계정임을 나타냅니다. 인증된 계정을 참조하세요. 예:

“verified”: false
followersCountInt이 계정이 현재 보유한 팔로워 수입니다. 일부 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예:

“followers_count”: 21
friendsCountInt이 계정이 팔로우하는 사용자 수입니다(“팔로잉”이라고도 함). 일부 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예:

“friends_count”: 32
listedCountInt이 사용자가 멤버로 포함된 공개 리스트 수입니다. 예:

“listed_count”: 9274
favoritesCountInt이 사용자가 계정 사용 기간 동안 좋아요 표시한 게시물 수입니다. 필드 이름에는 역사적인 이유로 영국식 철자가 사용됩니다. 예:

“favourites_count”: 13
statusesCountInt사용자가 발행한 게시물(리트윗 포함) 수입니다. 예:

“statuses_count”: 42
postedTimedateX에서 이 사용자 계정이 생성된 UTC 날짜 및 시간입니다. 예:

“postedTime”: “2013-12-14T04:35:55.036Z”
imagestring사용자의 프로필 이미지를 가리키는 HTTPS 기반 URL입니다. 예:

“image”:https://pbs.twimg.com/profile&#95;images/1283786620521652229/lEODkLTh&#95;normal.jpg

더 이상 지원되지 않는(사용 중단된) 속성

FieldTypeDescription
utcOffsetnull값은 null로 설정됩니다. 여전히 GET account/settings을 통해 사용할 수 있습니다.
twitterTimeZonenull값은 null로 설정됩니다. 여전히 GET account/settings에서 tzinfo_name 필드로 사용할 수 있습니다.
languagesnull값은 null로 설정됩니다. 여전히 GET account/settings에서 language 필드로 사용할 수 있습니다.

예시:

			"actor": {
        "objectType": "person",
        "id": "id:twitter.com:2244994945",
        "link": "http://www.x.com/XDevelopers",
        "displayName": "X Dev",
        "postedTime": "2013-12-14T04:35:55.036Z",
        "image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
        "summary": "#XDevelopers 팀의 목소리이자 #XAPI와 관련된 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
        "friendsCount": 2039,
        "followersCount": 512197,
        "listedCount": 1662,
        "statusesCount": 3632,
        "twitterTimeZone": null,
        "verified": true,
        "utcOffset": null,
        "preferredUsername": "XDevelopers",
        "languages": [],
        "links": [
          {
            "href": "https://developer.x.com/en/community",
            "rel": "me"
          }
        ],
        "location": {
          "objectType": "place",
          "displayName": "127.0.0.1"
        },
        "favoritesCount": 2147
      }
"actor": {
    "objectType": "person",
    "id": "id:twitter.com:6253282",
    "link": "http://www.x.com/API",
    "displayName": "X API",
    "postedTime": "2007-05-23T06:01:13.000Z",
    "image": "https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg",
    "summary": "Tweets about changes and service issues. Follow @XDevelopers for more.",
    "friendsCount": 39,
    "followersCount": 6054164,
    "listedCount": 12285,
    "statusesCount": 3689,
    "twitterTimeZone": null,
    "verified": true,
    "utcOffset": null,
    "preferredUsername": "API",
    "languages": [

    ],
    "links": [
      {
        "href": "https://developer.x.com",
        "rel": "me"
      }
    ],
    "favoritesCount": 4
  }

Location Object

Location objects는 X 계정 수준에서 설정된 actor object 내에 존재할 수도 있고, gnip object의 profileLocations object 내에 존재할 수도 있습니다. Location objects는 place object type을 가지며, name, address 또는 geo coordinates를 포함할 수 있습니다. Location objects는 네이티브 enriched 형식의 Geo와 유사합니다.

Location 데이터 사전

FieldTypeDescription
objectTypestring더 자세한 정보는 여기를 참조하세요. 예:

“objectType”: “place”
displayNamestring위치의 전체 이름입니다.

****“displayName”:
“United States”
namestringX의 place JSON 형식에 정의된 위치 이름입니다.
linkstringplace에 대한 전체 X JSON 표현을 가리키는 링크입니다.

“link”:https://api.x.com/1.1/geo/id/27c45d804c777999.json
geoobjectX에서 제공하는 지리 좌표(geo) 객체입니다. 폴리곤 또는 포인트일 수 있습니다.

geo를 참조하세요.
countryCodeString이 place가 속한 국가를 나타내는 축약형 국가 코드입니다. 예:

“countryCode”: “US
countryString이 place가 속한 국가의 이름입니다. 예:

**“country”: **“United States”

profileLocations 파생 객체

FieldTypeDescription
addressobjectgnip object 내 profileLocation location 객체에 포함됩니다.  profile geo enrichement에 의해 파생된 위치의 주소입니다.  세부 수준(정밀도)은 달라질 수 있습니다. 

“address”: {

**          “country”: “United States”,

          “countryCode”: “US”,

          “locality”: “Providence”,

          “region”: “Rhode Island”,

          “subRegion”: “Providence County”

        }**
geoobjectgnip object 내 profileLocation location 객체에 포함됩니다. profile geo enrichement에 의해 파생된 위치의 중심점 좌표입니다.

”geo”: {

**          “coordinates”: [

-98.5
,

39.76

          ],

          “type”: “point”

        }**
예시
	"location": {
    "objectType": "place",
    "displayName": "Kansas, USA",
    "name": "Kansas",
    "country_code": "United States",
    "twitter_country_code": "US",
    "twitter_place_type": "admin",
    "link": "https://api.x.com/1.1/geo/id/27c45d804c777999.json",
    "geo": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -102.051769,
            36.99311
          ],
          [
            -102.051769,
            40.003282
          ],
          [
            -94.588081,
            40.003282
          ],
          [
            -94.588081,
            36.99311
          ]
        ]
      ]
    }
    "location": {
      "objectType": "place",
      "displayName": "California, USA"
    }

X 엔티티 객체

Activity Streams 형식의 경우, twitter_entities는 네이티브 확장 형식의 엔티티 객체와 동일한 형식과 데이터 사전을 갖습니다.

예시:

"twitter_entities": {
	"hashtags": [{
		"text": "API",
		"indices": [
			228,
			239
		]
	}],
	"urls": [{
		"url": "https://t.co/r6z6CI7kEy",
		"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
		"display_url": "devcommunity.com/t/retiring-lab…",
		"indices": [
			250,
			273
		]
	}],
	"user_mentions": [],
	"symbols": []
}

X extended entities object

Activity Streams 형식의 경우, twitter_extended_entities는 네이티브 enriched 형식에서 extended_entities 객체에 표시된 것과 동일한 형식과 데이터 사전을 따릅니다.

예시:

"twitter_extended_entities":{
	"media": [{
		"id": 1293565706408038400,
		"id_str": "1293565706408038401",
		"indices": [
			219,
			242
		],
		"additional_media_info": {
			"monetizable": false
		},
		"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"url": "https://t.co/KaFSbjWUA8",
		"display_url": "pic.x.com/KaFSbjWUA8",
		"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
		"type": "video",
		"video_info": {
			"aspect_ratio": [
				16,
				9
			],
			"duration_millis": 34875,
			"variants": [{
					"bitrate": 256000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
				},
				{
					"bitrate": 832000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
				},
				{
					"content_type": "application/x-mpegURL",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
				},
				{
					"bitrate": 2176000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
				}
			]
		},
		"sizes": {
			"thumb": {
				"w": 150,
				"h": 150,
				"resize": "crop"
			},
			"medium": {
				"w": 1200,
				"h": 675,
				"resize": "fit"
			},
			"small": {
				"w": 680,
				"h": 383,
				"resize": "fit"
			},
			"large": {
				"w": 1280,
				"h": 720,
				"resize": "fit"
			}
		}
	}]
}

Gnip object

Activity Streams 형식에서 gnip 객체는 활성화된 enrichment 기능에 의해 추가된 메타데이터와 해당 activity에 매칭된 규칙 정보를 포함합니다.

데이터 사전

FieldTypeDescription
matching_rulesarray활동이 어떤 규칙과 일치하는지를 나타내는 매칭 규칙 객체의 배열입니다.
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarray활동에 포함된 링크들의 배열과 URL unwinding enrichement를 위한 확장 URL 메타데이터를 포함합니다.

**    “urls”: [

      {

“url”:** “https://t.co/tGQqNxxyhU,

“expanded_url”:https://www.youtube.com/channel/UCwUxW2CV2p5mzjMBqvqLzJA,

“expanded_status”: 200**,

“expanded_url_title”:** “Birdys Daughter”,

“expanded_url_description”: “Premium, single-origin, handpicked Jamaica Blue Mountain Coffee”

**      }

    ]**
profileLocationsarray of location objectsProfile Geo enrichment에서 파생된 위치 객체의 배열입니다.

**    “profileLocations”: [

      {

        “address”: {

“country”:** “Canada”,

“countryCode”: “CA”,

“locality”: “Toronto”,

“region”: “Ontario”

**        },

“displayName”:** “Toronto, Ontario, Canada”,

**        “geo”: {

          “coordinates”: [

-79.4163
,

43.70011

          ],

“type”:** “point”

**        },

“objectType”:** “place”

**      }

    ]

  }**

예시:

	"gnip": {
    "matching_rules": [
      {
        "tag": null
      }
    ],
    "urls": [
      {
        "url": "https://t.co/Nx1XZmRCXA",
        "expanded_url": "https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
        "expanded_status": 200,
        "expanded_url_title": null,
        "expanded_url_description": null
      }
    ]
  }

Activity Streams 페이로드 예시

게시물 활동
{
	"id": "tag:search.x.com,2005:1307025659294674945",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-09-18T18:36:15.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
	"body": "Here’s an article that highlights the updates in the new Tweet payload v2 https://t.co/oeF3ZHeKQQ",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "The voice of the #XDevelopers team and your official source for updates, news, and events, related to the #XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1307025659294674945",
		"summary": "Here’s an article that highlights the updates in the new Tweet payload v2 https://t.co/oeF3ZHeKQQ",
		"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
		"postedTime": "2020-09-18T18:36:15.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1304102743196356610"
	},
	"favoritesCount": 70,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 11,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"expanded_status": 200,
			"expanded_url_title": "Understanding the new Tweet payload in the X API v2",
			"expanded_url_description": "X는 최근 새로운 기능을 제공하기 위해 처음부터 재구축된 새로운 X API v2를 발표했습니다..."
		}]
	},
	"twitter_filter_level": "low"
}
답글 게시물 Activity
{
	"id": "tag:search.x.com,2005:1296887316556980230",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-21T19:10:05.000Z",
	"generator": {
		"displayName": "X 웹 앱",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
	"body": "@PennMedCDH가 COVID-19 보건 위기를 이해하기 위해 X 데이터를 활용하는 방법을 확인하세요 📊\n\nhttps://t.co/1tdA8uDWes",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers 팀의 공식 채널이자 #API 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296887316556980230",
		"summary": "@PennMedCDH가 COVID-19 보건 위기를 이해하기 위해 X 데이터를 활용하는 방법을 확인하세요 📊\n\nhttps://t.co/1tdA8uDWes",
		"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
		"postedTime": "2020-08-21T19:10:05.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1296887091901718529"
	},
	"favoritesCount": 26,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 9,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"expanded_status": 200,
			"expanded_url_title": "Penn Medicine 디지털 헬스 센터",
			"expanded_url_description": "Penn Med 디지털 헬스 센터는 감정, 보고된 증상, 주별 데이터 분석 및 COVID-19 발병에 대한 국경 데이터를 상세히 보여주는 차트가 포함된 COVID-19 X 지도를 제작했습니다. 또한 Penn Med With You 이니셔티브는 X의 집계된 지역 정보를 활용하여 웹사이트와 문자 메시지 서비스를 운영합니다. 이 서비스는 해당 정보를 사용하여 관련성 있고 시의적절한 리소스를 제공합니다."
		}]
	},
	"twitter_filter_level": "low"
}
long_object가 포함된 게시물 액티비티
{
	"id": "tag:search.x.com,2005:1296121314218897408",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-19T16:26:16.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
	"body": "답글 숨기기 엔드포인트가 오늘 출시됩니다! \n\n개발자는 Tweet 답글을 숨길 수 있습니다 - 개발자가… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "답글 숨기기 엔드포인트가 오늘 출시됩니다! \n\n개발자는 Tweet 답글을 숨길 수 있습니다 - #XAPI를 사용하여 공개 대화의 건전성을 개선하는 데 도움이 되는 중요한 방법입니다.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 정보 소스입니다.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296121314218897408",
		"summary": "답글 숨기기 엔드포인트가 오늘 출시됩니다! \n\n개발자는 Tweet 답글을 숨길 수 있습니다 - 개발자가… https://t.co/VyfXs1RTXn",
		"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
		"postedTime": "2020-08-19T16:26:16.000Z"
	},
	"favoritesCount": 172,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 54,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/khXhTurm9x",
			"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
			"expanded_status": 200,
			"expanded_url_title": "새로운 X API에서 답글 숨기기 기능 제공",
			"expanded_url_description": "오늘 새로운 X API에서 답글 숨기기 엔드포인트의 정식 출시를 발표하게 되어 기쁩니다. 답글 숨기기 엔드포인트를 사용하면 사용자가 자신의 Tweet 답글을 숨기거나 숨김 해제할 수 있도록 돕는 도구를 구축할 수 있습니다. 사용자는 욕설, 주의 산만, 오해의 소지가 있는 댓글에 덜 주목하거나 대화를 더 매력적으로 만들기 위해 등 여러 가지 이유로 답글을 관리합니다. 이 엔드포인트를 통해 X 사용자가 답글을 더 빠르고 쉽게 숨기거나 숨김 해제할 수 있도록 돕는 도구를 구축할 수 있습니다..."
		}]
	},
	"twitter_filter_level": "low"
}
twitter_extended_entities를 포함한 게시물 activity
{
	"id": "tag:search.x.com,2005:1293593516040269825",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-12T17:01:42.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
	"body": "드디어 출시되었습니다! 🥁 새로운 #XAPI를 만나보세요.\n\n개발자 커뮤니티에 더 나은 서비스를 제공하기 위해 X API v2를 처음부터 다시 구축하고 있습니다… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "드디어 출시되었습니다! 🥁 새로운 #XAPI를 만나보세요.\n\n개발자 커뮤니티에 더 나은 서비스를 제공하기 위해 X API v2를 처음부터 다시 구축하고 있습니다. 오늘의 출시는 시작에 불과합니다.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"twitter_extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"display_text_range": [
		0,
		140
	],
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers 팀의 공식 채널이자 #TwitterAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 정보 소스입니다.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1293593516040269825",
		"summary": "드디어 출시되었습니다! 🥁 새로운 #API를 만나보세요.\n\nX API v2를 처음부터 새롭게 구축하고 있습니다… https://t.co/UeCndQGMjx",
		"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
		"postedTime": "2020-08-12T17:01:42.000Z"
	},
	"favoritesCount": 2844,
	"twitter_entities": {
		"hashtags": [{
			"text": "API",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 958,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/32VrwpGaJw",
			"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
			"expanded_status": 200,
			"expanded_url_title": "새롭게 개선된 X API 소개",
			"expanded_url_description": "새로운 X API 소개 - 개발자가 X에서 일어나는 공개 대화에 전 세계를 연결할 수 있도록 새로운 기능을 더 빠르게 제공하기 위해 처음부터 새롭게 구축되었습니다.",
		}]
	},
	"twitter_filter_level": "low"
}
리트윗 활동
{
	"id": "tag:search.x.com,2005:1229851574555508737",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-18T19:33:59.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1229851574555508737",
	"body": "RT @suhemparack: APL을 사용해 X용 Alexa 스킬을 만들어 Echo Show에서 Tweet과 트렌드를 볼 수 있도록 했습니다!\n\n여기에서 확인해 보세요…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스, 이벤트에 대한 공식 정보 출처입니다.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1229843515603144704",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-18T19:01:58.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/suhemparack/statuses/1229843515603144704",
		"body": "APL을 사용해 X용 Alexa 스킬을 만들어 Echo Show에서 Tweet과 트렌드를 볼 수 있도록 했습니다!\n\n확인해 보세요… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "APL을 사용해 X용 Alexa 스킬을 만들어 Echo Show에서 Tweet과 트렌드를 볼 수 있도록 했습니다!\n\n아래 링크에서 확인해 보세요 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"twitter_entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/XDevelopers/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:857699969263964161",
			"link": "http://www.x.com/suhemparack",
			"displayName": "Suhem Parack",
			"postedTime": "2017-04-27T20:56:22.883Z",
			"image": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"summary": "X에서 학술 연구를 담당하는 Developer Relations입니다. X 데이터를 활용한 연구에 대해 이야기해 주세요. 이전 경력: Amazon Alexa. 이 계정의 견해는 모두 개인적인 의견입니다.",
			"friendsCount": 501,
			"followersCount": 732,
			"listedCount": 12,
			"statusesCount": 458,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "suhemparack",
			"languages": [],
			"links": [{
				"href": "https://developer.x.com",
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Seattle, WA"
			},
			"favoritesCount": 358
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1229843515603144704",
			"summary": "APL을 사용해 X용 Alexa 스킬을 만들어 Echo Show에서 Tweet과 트렌드를 볼 수 있도록 했습니다!\n\n확인해 보세요… https://t.co/RP9NgltX7i",
			"link": "http://x.com/suhemparack/statuses/1229843515603144704",
			"postedTime": "2020-02-18T19:01:58.000Z"
		},
		"favoritesCount": 71,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 19,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/l5J8wq748G",
			"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
			"expanded_status": 200,
			"expanded_url_title": null,
			"expanded_url_description": null
		}]
	},
	"twitter_filter_level": "low"
}
인용 Tweet 활동
{
 	"id": "tag:search.x.com,2005:1328399838128467969",
 	"objectType": "activity",
 	"verb": "post",
 	"postedTime": "2020-11-16T18:09:36.000Z",
 	"generator": {
 		"displayName": "X 웹 앱",
 		"link": "https://mobile.x.com"
 	},
 	"provider": {
 		"objectType": "service",
 		"displayName": "X",
 		"link": "http://www.x.com"
 	},
 	"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 	"body": "계획대로 아래에 언급된 Labs v2 엔드포인트가 종료되었습니다. 질문이 있거나 도움이 필요하시면 포럼에 알려주세요… https://t.co/ahQvTYaOcZ",
 	"long_object": {
 		"body": "계획대로 아래에 언급된 Labs v2 엔드포인트가 종료되었습니다. 질문이 있거나 X API v2 관련 도움이 필요하시면 포럼에 알려주세요! https://t.co/JaxttUMmjX",
 		"display_text_range": [
 			0,
 			166
 		],
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/JaxttUMmjX",
 				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
 				"display_url": "x.com/XDevelopers/sta…",
 				"indices": [
 					167,
 					190
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		}
 	},
 	"display_text_range": [
 		0,
 		140
 	],
 	"actor": {
 		"objectType": "person",
 		"id": "id:twitter.com:2244994945",
 		"link": "http://www.x.com/XDevelopers",
 		"displayName": "X Dev",
 		"postedTime": "2013-12-14T04:35:55.036Z",
 		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"summary": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스, 이벤트에 대한 공식 소스입니다.",
 		"friendsCount": 2038,
 		"followersCount": 512292,
 		"listedCount": 1666,
 		"statusesCount": 3634,
 		"twitterTimeZone": null,
 		"verified": true,
 		"utcOffset": null,
 		"preferredUsername": "XDevelopers",
 		"languages": [],
 		"links": [{
 			"href": "https://developer.x.com/en/community",
 			"rel": "me"
 		}],
 		"location": {
 			"objectType": "place",
 			"displayName": "127.0.0.1"
 		},
 		"favoritesCount": 2147
 	},
 	"object": {
 		"objectType": "note",
 		"id": "object:search.x.com,2005:1328399838128467969",
 		"summary": "계획대로 아래에 언급된 Labs v2 엔드포인트가 종료되었습니다. 질문이 있거나 도움이 필요하시면 포럼에 알려주세요… https://t.co/ahQvTYaOcZ",
 		"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 		"postedTime": "2020-11-16T18:09:36.000Z"
 	},
 	"favoritesCount": 29,
 	"twitter_entities": {
 		"hashtags": [],
 		"urls": [{
 			"url": "https://t.co/ahQvTYaOcZ",
 			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
 			"display_url": "x.com/i/web/status/1…",
 			"indices": [
 				117,
 				140
 			]
 		}],
 		"user_mentions": [],
 		"symbols": []
 	},
 	"twitter_lang": "en",
 	"retweetCount": 7,
 	"gnip": {
 		"matching_rules": [{
 			"tag": null
 		}],
 		"urls": [{
 			"url": "https://t.co/r6z6CI7kEy",
 			"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 			"expanded_status": 200,
 			"expanded_url_title": "Labs v2 최근 검색 및 답글 숨기기 종료",
 			"expanded_url_description": "얼리 액세스 및 답글 숨기기 공지에서 말씀드린 바와 같이, 다음 X Developer Labs v2 엔드포인트는 11월 16일에 종료됩니다. Labs v2 최근 검색 Labs v2 답글 숨기기 호출 시 이러한 엔드포인트는 HTTP 410 상태로 응답하며 데이터를 반환하지 않습니다. Labs의 피드백을 바탕으로 해당 기능을 X API v2에 통합했습니다. 관련 문서는 아래 링크에서 확인할 수 있습니다. 아직 등록하지 않으셨다면 여기를 클릭하여 v2 액세스에 등록하세요..."
 		}]
 	},
 	"twitter_filter_level": "low",
 	"twitter_quoted_status": {
 		"id": "tag:search.x.com,2005:1327011423252144128",
 		"objectType": "activity",
 		"verb": "post",
 		"postedTime": "2020-11-12T22:12:32.000Z",
 		"generator": {
 			"displayName": "X 웹 앱",
 			"link": "https://mobile.x.com"
 		},
 		"provider": {
 			"objectType": "service",
 			"displayName": "X",
 			"link": "http://www.x.com"
 		},
 		"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 		"body": "👋 X Developer Labs v2 답글 숨기기 및 최근 검색이 다음 주 월요일에 종료된다는 알림입니다… https://t.co/EEWN2Q9aXh",
 		"long_object": {
 			"body": "👋 X Developer Labs v2 답글 숨기기 및 최근 검색이 다음 주 월요일인 11월 16일에 종료된다는 알림입니다! v2 #XAPI에서 현재 사용 가능한 새로운 답글 숨기기 및 최근 검색 엔드포인트로 마이그레이션하시기 바랍니다. 자세한 내용: https://t.co/r6z6CI7kEy",
 			"display_text_range": [
 				0,
 				273
 			],
 			"twitter_entities": {
 				"hashtags": [{
 					"text": "XAPI",
 					"indices": [
 						228,
 						239
 					]
 				}],
 				"urls": [{
 					"url": "https://t.co/r6z6CI7kEy",
 					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 					"display_url": "devcommunity.com/t/retiring-lab…",
 					"indices": [
 						250,
 						273
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"actor": {
 			"objectType": "person",
 			"id": "id:twitter.com:2244994945",
 			"link": "http://www.x.com/XDevelopers",
 			"displayName": "X Dev",
 			"postedTime": "2013-12-14T04:35:55.036Z",
 			"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 			"summary": "#XDevelopers 팀의 목소리이자 #XAPI 관련 업데이트, 뉴스, 이벤트에 대한 공식 소스입니다.",
 			"friendsCount": 2038,
 			"followersCount": 512292,
 			"listedCount": 1666,
 			"statusesCount": 3634,
 			"twitterTimeZone": null,
 			"verified": true,
 			"utcOffset": null,
 			"preferredUsername": "XDevelopers",
 			"languages": [],
 			"links": [{
 				"href": "https://developer.x.com/en/community",
 				"rel": "me"
 			}],
 			"location": {
 				"objectType": "place",
 				"displayName": "127.0.0.1"
 			},
 			"favoritesCount": 2147
 		},
 		"object": {
 			"objectType": "note",
 			"id": "object:search.x.com,2005:1327011423252144128",
 			"summary": "👋 X Developer Labs v2 답글 숨기기 및 최근 검색 기능이 다음 주 월요일에 종료됩니다. Nove… https://t.co/EEWN2Q9aXh",
 			"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 			"postedTime": "2020-11-12T22:12:32.000Z"
 		},
 		"favoritesCount": 33,
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/EEWN2Q9aXh",
 				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"twitter_lang": "en",
 		"twitter_filter_level": "low"
 	}
 }
리트윗된 인용 Tweet 활동
{
	"id": "tag:search.x.com,2005:1225470895902412800",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-06T17:26:44.000Z",
	"generator": {
		"displayName": "X for iPhone",
		"link": "http://x.com/download/iphone"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1225470895902412800",
	"body": "RT @AureliaSpecker: 📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that uses…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers 팀의 공식 채널이자 #XAPI 관련 업데이트, 뉴스 및 이벤트에 대한 공식 소스입니다.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1224709550214873090",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-04T15:01:25.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
		"body": "📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that u… https://t.co/cAepHunkFp",
		"long_object": {
			"body": "📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that uses X's new search endpoint 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDevelopers @API https://t.co/dXrJYvn3hY",
			"display_text_range": [
				0,
				229
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							176,
							189
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							190,
							205
						]
					}
				],
				"urls": [{
						"url": "https://t.co/87XIPZmZBJ",
						"expanded_url": "https://bit.ly/2OrnrCC",
						"display_url": "bit.ly/2OrnrCC",
						"indices": [
							151,
							174
						]
					},
					{
						"url": "https://t.co/dXrJYvn3hY",
						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
						"display_url": "x.com/AureliaSpecker…",
						"indices": [
							230,
							253
						]
					}
				],
				"user_mentions": [{
						"screen_name": "XDevelopers",
						"name": "X Dev",
						"id": 2244994945,
						"id_str": "2244994945",
						"indices": [
							206,
							217
						]
					},
					{
						"screen_name": "API",
						"name": "X API",
						"id": 6253282,
						"id_str": "6253282",
						"indices": [
							218,
							229
						]
					}
				],
				"symbols": []
			}
		},
		"display_text_range": [
			0,
			140
		],
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • 런던 거주 스위스인 • 식물 집사 • @_dormrod의 전담 미용사",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "London, UK"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1224709550214873090",
			"summary": "📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that u… https://t.co/cAepHunkFp",
			"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
			"postedTime": "2020-02-04T15:01:25.000Z"
		},
		"favoritesCount": 43,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/cAepHunkFp",
				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "AureliaSpecker",
			"name": "Aurelia Specker",
			"id": 1102321381,
			"id_str": "1102321381",
			"indices": [
				3,
				18
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 12,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
				"url": "https://t.co/87XIPZmZBJ",
				"expanded_url": "https://dev.to/XDevelopers/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			},
			{
				"url": "https://t.co/sOjXW4YhbN",
				"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			}
		]
	},
	"twitter_filter_level": "low",
	"twitter_quoted_status": {
		"id": "tag:search.x.com,2005:1195000047089389573",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2019-11-14T15:26:27.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
		"body": "I wrote a tutorial on how to get bespoke commute information using the X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"long_object": {
			"body": "I wrote a tutorial on how to get bespoke commute information using the X API🚇\n\n#DEVcommunity #Pythontutorial \n\nCheck it out here 👇\nhttps://t.co/sOjXW4YhbN",
			"display_text_range": [
				0,
				160
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							85,
							98
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							99,
							114
						]
					}
				],
				"urls": [{
					"url": "https://t.co/sOjXW4YhbN",
					"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
					"display_url": "dev.to/twitterdev/usi…",
					"indices": [
						137,
						160
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • Swiss in London • mother of houseplants • personal hairdresser to @_dormrod",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "London, UK"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1195000047089389573",
			"summary": "I wrote a tutorial on how to get bespoke commute information using the X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
			"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
			"postedTime": "2019-11-14T15:26:27.000Z"
		},
		"favoritesCount": 123,
		"twitter_entities": {
			"hashtags": [{
					"text": "DEVcommunity",
					"indices": [
						85,
						98
					]
				},
				{
					"text": "Pythontutorial",
					"indices": [
						99,
						114
					]
				}
			],
			"urls": [{
				"url": "https://t.co/pL0qJ4vhtE",
				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	}
}

Tweet 메타데이터 타임라인

이 페이지 내 바로가기 소개 핵심 개념 X 타임라인 필터링 팁 다음 단계

소개**

본질적으로 X는 공개적이고, 실시간이며, 전 세계적인 커뮤니케이션 네트워크입니다. 2006년 이후 X의 발전은 사용자 이용 패턴과 관례, 그리고 새로운 제품 기능과 개선 사항에 의해 주도되어 왔습니다. X 데이터를 활용해 역사 연구를 수행하는 경우, 이러한 발전의 타임라인을 이해하는 것은 데이터 아카이브에서 관심 있는 게시물을 찾아내는 데 중요합니다. X는 단순한 SMS 모바일 App으로 시작하여 종합적인 커뮤니케이션 플랫폼으로 성장했습니다. 완전한 API 세트를 갖춘 플랫폼입니다. API는 항상 X 네트워크의 한 축이었습니다. 첫 번째 API는 X가 출시된 직후 곧바로 공개되었습니다. 2009년에 게시물 지오태깅이 처음 도입되었을 때, 이는 Geo API를 통해 제공되었으며(이후 게시물에 ‘지오태그’를 추가하는 기능은 X.com 사용자 인터페이스에 통합되었습니다). 오늘날 X의 API는 속보와 정보 공유의 원천이 된 양방향 커뮤니케이션 네트워크를 구동하고 있습니다. 이 전 세계 실시간 커뮤니케이션 채널 위에 무언가를 구축할 수 있는 기회는 무궁무진합니다. X는 공개적으로 이용 가능한 모든 게시물에 접근할 수 있는 두 가지 히스토리컬 API, 즉 Historical PowerTrack과 Full-Archive Search API를 제공합니다. 두 API 모두 관심 있는 게시물을 쿼리하고 수집하는 데 사용되는 연산자 세트를 제공합니다. 이러한 연산자는 각 게시물과 연관된 다양한 속성에 대해 매칭을 수행하며, 게시물의 텍스트 콘텐츠, 작성자의 계정 이름, 게시물에 포함된 링크 등 수백 가지 속성이 이에 포함됩니다. 게시물과 그 속성은 일반적인 텍스트 기반 데이터 교환 형식인 JSON으로 인코딩됩니다. 따라서 새로운 기능이 도입될 때마다 새로운 JSON 속성이 등장했고, 일반적으로는 해당 속성에 대해 매칭할 수 있는 새로운 API 연산자도 함께 도입되었습니다. 사용 사례에 전 세계가 X에서 무엇을 말했는지 리스닝 해야 하는 요구가 포함되어 있다면, 연산자가 언제부터 매칭할 수 있는 JSON 메타데이터를 갖기 시작했는지를 잘 이해할수록 히스토리컬 PowerTrack 필터를 더 효과적으로 구성할 수 있습니다. 다음으로, 게시물 메타데이터의 변경 사항이 관심 있는 데이터 신호를 찾는 데 어떤 영향을 미치는지 이해하는 데 도움이 되는 몇 가지 핵심 개념을 소개하겠습니다.

핵심 개념**

사용자 관습에서 X 일급 객체

X 사용자들은 자연스럽게 새로운, 그리고 이제는 필수적인 커뮤니케이션 패턴들을 X 네트워크에 도입했습니다. 대표적인 예가 해시태그로, 이제 거의 모든 소셜 네트워크에서 사용됩니다. 해시태그는 대화와 주제를 정리하기 위한 방법으로 도입되었습니다. 하루에 수억 개의 메시지가 오가는 네트워크에서, 관심 있는 포스트를 찾기 위한 도구는 핵심이며, 해시태그는 이를 위한 기본적인 방법이 되었습니다. 해시태그 사용이 증가한 직후, 해시태그는 X로부터 공식적인 지위와 지원을 받게 되었습니다. 해시태그가 ‘일급(first-class)’ 객체 가 되었다는 것은 여러 가지 의미를 가집니다. 이는 해시태그가 X.com 사용자 인터페이스에서 클릭 및 검색이 가능해졌다는 뜻이기도 합니다. 또한 해시태그가 @멘션, 첨부 미디어, 주식 심볼, 공유 링크와 함께 X의 entities 패밀리의 구성원이 되었다는 의미이기도 합니다. 이러한 엔티티들은 미리 파싱된 JSON 배열로 편리하게 인코딩되어, 개발자가 이를 더 쉽게 처리하고, 스캔하며, 저장할 수 있도록 합니다. 리트윗은 사용자 주도의 관습이 공식 객체가 된 또 다른 예시입니다. 리트윗은 다른 사람에게 콘텐츠를 ‘포워딩’하는 방법으로 등장했습니다. 처음에는 게시물을 복사해 붙여넣고 앞에 “RT @” 패턴을 붙이는 수동 프로세스로 시작되었습니다. 이 과정은 결국 새로운 리트윗 버튼을 통해 자동화되었고, 새로운 JSON 메타데이터까지 제공하게 되었습니다. 이렇게 ‘공식’ 리트윗이 탄생했습니다. 그 밖의 예로는 ‘멘션’, 미디어 및 웹 링크 공유, 그리고 게시물에 위치를 함께 공유하는 기능 등이 있습니다. 이러한 각 사용 패턴은 새로운 x.com 사용자 인터페이스 기능, 이를 지원하는 새 JSON, 그리고 포스트와 매칭하는 새로운 방법으로 이어졌습니다. 이러한 모든 기본 게시물 속성들은 결국 이를 기준으로 매칭하기 위한 PowerTrack Operators로 이어졌습니다.

게시물 메타데이터, 가변성, 업데이트, 최신성

게시물 메시지는 정해진 최대 글자 수까지만 작성할 수 있지만, 게시물을 나타내는 JSON은 100개가 넘는 속성으로 구성됩니다. 누가 언제 게시했는지, 원본 게시물인지 리포스트인지 여부와 같은 속성뿐 아니라 해시태그, 멘션, 공유 링크와 같은 일급 객체들의 배열도 포함됩니다. 게시물을 게시한 계정에 대해서는 사용자의 프로필 및 기타 계정 메타데이터를 제공하는 다양한 속성을 가진 User(또는 Actor) 객체가 있습니다. 프로필에는 짧은 소개 문구, 거주지(자유 형식 텍스트), 선호 언어, 선택적 웹사이트 링크가 포함됩니다. 일부 계정 메타데이터는 절대 변경되지 않습니다(예: 숫자형 사용자 ID와 생성 일자). 어떤 것들은 시간이 지나면서 서서히 변경되고, 다른 속성들은 더 자주 바뀝니다. 사람들은 직장을 바꾸고 이사를 합니다. 회사는 정보를 갱신합니다. 과거 게시물을 수집할 때는, 일부 메타데이터는 게시물이 게시되었을 당시의 그대로 이고, 다른 메타데이터는 쿼리를 제출하는 시점 기준 이라는 점을 이해하는 것이 중요합니다.  모든 이력 관련 API에서, 사용자의 프로필 설명, 표시 이름, 프로필 ‘home’ 속성은 쿼리 시점의 값으로 업데이트됩니다.

“네이티브” 미디어

X.com과 X 모바일 앱에서는 버튼을 클릭해 사진 갤러리를 탐색하여 게시물에 사진과 동영상을 추가할 수 있습니다. 이제 이러한 기능이 일급 동작으로 통합되었기 때문에, 이 방식으로 공유된 동영상과 사진을 ‘네이티브’ 미디어라고 부릅니다. 많은 쿼리 Operator가 이러한 ‘네이티브’ 리소스에 대해 동작하며, 여기에는 has:videos, has:images, has:media 등이 포함됩니다. 이 Operator들은 X 기능을 통해 공유된 미디어 콘텐츠에만 일치합니다. X 플랫폼 외부에 호스팅된 다른 미디어와 일치시키려면, URL 메타데이터를 기준으로 일치하는 Operator를 사용해야 합니다. 그래서 Historical PowerTrack과 Full-Archive Search 제품의 세부 사항을 살펴보기 전에, 제품이자 플랫폼으로서 X가 시간이 지나며 어떻게 발전해 왔는지 먼저 살펴보겠습니다. X 연대표 아래에는 X의 일부 연대표 를 정리해 두었습니다. 이러한 X 업데이트 대부분은 어느 정도는 사용자 행동, 게시물 JSON 내용, 쿼리 Operator, 또는 이 세 가지 모두에 근본적인 영향을 미쳤습니다. X를 API 플랫폼으로 바라보면, 다음 이벤트들은 게시물을 인코딩하는 데 사용되는 JSON 페이로드에 어떤 식으로든 영향을 주었습니다. 그 결과 이러한 JSON 세부 정보는 X historical API가 게시물을 어떻게 매칭하는지에도 영향을 줍니다. 이 연대표 목록은 전반적으로는 정확한 편이지만, 모든 항목을 망라한 것은 아니라는 점에 유의하세요.

2006

  • 10월
    • @replies 사용 관례가 자리 잡습니다.
    • cashtags가처음등장하지만,주식티커언급에사용하는것이일반화되는것은2009년초부터입니다.cashtags가 처음 등장하지만, 주식 티커 언급에 사용하는 것이 일반화되는 것은 2009년 초부터입니다. Cashtags는 2012년 6월에 클릭할 수 있고 검색 가능한 링크가 됩니다.
  • 11월 - Favorites가 도입됩니다.

2007

  • 1월 - @reply가 in_reply_to 메타데이터를 가진 UI 답글 버튼과 함께 일급 객체가 됩니다.
  • 4월 - 리트윗이 하나의 관행으로 자리잡습니다.
  • 8월 - #해시태그가 포스트를 검색하고 정리하는 주요 도구로 등장합니다.

2009

  • 2월 - $cashtags가 주식 티커 심볼을 논의할 때 사용하는 일반적인 관례로 자리 잡습니다.
  • 5월 - 게시물 본문 앞에 “Via @”를 붙이는 Retweet ‘베타’가 도입됩니다.
  • 6월 - 인증 계정(Verified account)이 도입됩니다.
  • 8월 - “RT @” 패턴과 새로운 retweet_status 메타데이터와 함께 Retweet이 일급 객체로 도입됩니다.
  • 10월 - 리스트 기능이 출시됩니다.
  • 11월 - Post Geotagging API가 출시되어, 사용자가 서드 파티 앱을 통해 위치를 공유할 수 있는 최초의 방법을 제공합니다.

2010

  • 6월 - 포스트에 지오태그를 달 수 있는 X Places가 도입되었습니다.
  • 8월 - 웹사이트용 게시물 버튼이 출시되어 링크 공유가 더 쉬워졌습니다.

2011

  • 5월 - 웹사이트와 연결된 계정을 더 쉽게 팔로우할 수 있도록 팔로우 버튼이 도입되었습니다.
  • 8월 - 네이티브 사진 기능이 도입되었습니다.

2012

  • 6월 - $Cashtags가 클릭하거나 검색할 수 있는 링크가 됩니다.

2014

  • 3월 - 사진 태그 기능과 최대 4장의 사진 지원. 확장된 X Entities 메타데이터가 도입되었습니다.
  • 4월 - X UI에서 이모지가 기본 지원되기 시작했습니다. 이모지는 적어도 2008년부터 게시물에서 일반적으로 사용되어 왔습니다.

2015

  • 4월 - X의 ‘게시물’ 사용자 인터페이스 디자인이 변경되면서 위치 정보가 포함된 게시물 수가 줄어들었습니다.
  • 10월 - X Polls 도입. Polls는 처음에는 24시간 투표 기간으로 두 개의 선택지만 지원했습니다. 11월에는 Polls가 네 개의 선택지와 5분부터 7일(일주일)까지의 투표 기간을 지원하기 시작했습니다. Poll 메타데이터는 2017년 2월에 제공되기 시작했으며, 확장 네이티브 형식에서만 제공되었습니다.

2016

2017

  • 2월 - X Poll 메타데이터가 게시물 메타데이터에 포함됨(강화된 네이티브 형식에서만 제공).
  • 4월 - 회신 대상 계정이 140자 수에 포함되지 않는 ‘Simplified Replies’ 도입(“dmw140, part 2”).
2018
  • 5월 - GDPR 업데이트에 따라 user.time_zone이 null로 설정되고, user.utc_offset이 null로 설정되며, user.profile_background_image_url이 기본값으로 설정됨
  • 6월 - quoteTweet 서식 변경 반영
2022
  • 9월 29일 - 포스트를 수정할 수 있는 기능이 소규모 테스트 그룹에 롤아웃됨. 수정된 게시물 메타데이터가 관련되는 경우 게시물 객체에 추가됨. 여기에는 edit_history 및 edit_controls 객체가 포함됨. 이러한 메타데이터는 수정 기능이 추가되기 전에 생성된 포스트에는 반환되지 않음. 이 메타데이터와 연결된 연산자는 없음. 게시물 수정이 어떻게 작동하는지 더 알아보려면 게시물 편집 기본 사항을 참고하세요.
필터링 팁 X 타임라인에서 새로운 기능이 언제, 어떻게 추가되었는지 숙지하면 더 효과적인 쿼리를 만드는 데 도움이 됩니다. 여기서 쿼리는 X 과거용 API가 Post JSON에 매칭하기 위해 PowerTrack 연산자를 사용하여 포스트 아카이브에 적용하는 필터 또는 규칙 을 의미합니다. 예로, 특정 언어의 포스트에 매칭하는 데 사용되는 lang: 연산자가 있습니다. X는 50개가 넘는 언어를 지원하는 언어 분류 서비스를 제공하며, X API는 각 게시물에 대해 생성되는 JSON에 이 메타데이터를 제공합니다. 따라서 게시물이 스페인어로 작성되면 “lang” JSON 속성은 “es”로 설정됩니다. 따라서 lang:es 절을 사용해 필터를 구성하면 스페인어로 분류된 포스트에만 매칭됩니다. 타임라인 정보는 수신한 포스트 데이터를 더 잘 해석하는 데도 도움이 됩니다. 예를 들어, 2008년과 2012년 하계 올림픽 관련 콘텐츠 공유를 연구한다고 가정해 봅시다. 리트윗에 매칭하기 위해 is:retweet 연산자만 적용하면 2008년에는 어떤 데이터도 매칭되지 않을 것입니다. 하지만 2012년에는 수백만 개의 리트윗이 있을 수 있습니다. 이로 인해 2008년에는 리트윗이 사용자 관행이 아니었거나, 아무도 그 올림픽에 대해 리트윗하지 않았다는 잘못된 결론을 내릴 수 있습니다. 리트윗이 2009년에 일급(first-class) 객체가 되었기 때문에, 2008년의 리트윗을 식별하려면 ”RT @” 규칙 절을 추가해야 합니다. 리트윗과 포스트 언어 분류는 모두 오랜 역사와 다양한 제품 세부 정보를 가진 포스트 속성의 예입니다. 아래에서 X 데이터를 매칭하고 이해하는 데 중요한 이러한 속성과 다른 속성 클래스에 대한 더 많은 세부 정보를 설명합니다.

거짓 음성 인식하기

필터를 작성할 때 중요한 점 중 하나는, 메타데이터 연산자가 일치 여부를 판단하는 모든 메타데이터에는 각각 “생성 시점(“born on” date)”이 있다는 것입니다. 포스트가 게시된 이후에 도입된 메타데이터에 작동하는 연산자로 필터를 구성하면, 거짓 음성이 발생하게 됩니다. 예를 들어, ‘snow’를 언급하면서 동영상을 공유하는 모든 포스트에 관심이 있다고 가정해 보겠습니다. 이때 네이티브 동영상이 있는 포스트와 일치하는 has:videos 연산자로 규칙을 만들면, 그 절은 2015년 이전의 어떤 포스트와도 일치하지 않습니다. 하지만 X에서 동영상 공유는 2015년 훨씬 이전부터 일반적이었습니다. 그전에는 사용자가 다른 곳에 호스팅된 동영상으로 연결되는 링크를 공유했지만, 2015년에 X가 플랫폼에 직접 ‘동영상 공유’ 기능을 새로 구축했습니다. 이러한 과거의 관심 포스트를 찾으려면 url:”youtube.com”과 같은 규칙 절을 추가해야 합니다. 또한 Search API에서는 인덱스를 재구축하면서 일부 메타데이터를 소급 반영(‘backfill’)한 사례도 있습니다. 좋은 예가 주식 종목 기호를 논의할 때 널리 사용되기 시작한 2009년의 cashtag입니다.cashtag입니다. cashtag 연산자가 2015년에 도입된 후 Search 인덱스가 재구축되었고, 그 과정에서 심벌 엔티티가 $가 주로 속어에 사용되던 2006년 초반의 포스트까지 포함해, 모든 포스트 본문에서 추출되었습니다. 예: “I hope it nownow $oon!”.

사용 사례에 중요한 게시물 속성 식별 및 필터링

X 계정 숫자 ID와 같은 일부 메타데이터는 서비스 초기부터 존재해 왔으며(변경되지 않는 계정 메타데이터의 한 예입니다), 다른 메타데이터는 2006년에 X가 시작된 이후 상당한 시간이 지난 뒤에야 도입되었습니다. 새로 도입된 메타데이터의 예로는 리트윗 메타데이터, 게시물 위치 정보, URL 제목 및 설명, 그리고 ‘네이티브’ 미디어 등이 있습니다. 아래에는 이러한 X 플랫폼 업데이트로 인해 근본적으로 영향을 받은, 가장 일반적인 유형의 게시물 속성들을 정리해 두었습니다. 이 속성들에 대한 필터링/매칭 동작은 대부분의 경우 어떤 과거용 게시물 API(역사 데이터용 Post API)를 사용하느냐에 따라 달라집니다. 어떤 제품이 여러분의 연구 및 사용 사례에 가장 적합한지 판단하는 데 도움을 드리기 위해, 아래에 제공되는 속성 상세 정보에는 개괄적인 제품 정보도 함께 포함되어 있습니다.

X Profiles

무엇보다 X는 전 세계 실시간 커뮤니케이션 채널이기 때문에, 게시물 데이터를 활용한 연구에서는 누가 소통하고 있는지에 중점을 두는 경우가 많습니다. X 사용자가 어디를 자신의 거주지로 삼고 있는지 아는 것이 도움이 될 때가 자주 있습니다. 계정의 자기소개(bio)에 관심사와 취미에 대한 언급이 포함되어 있는지를 알면, 관심 있는 게시물을 찾는 데 도움이 될 수 있습니다. 또한 관심 있는 계정에서 나오는 포스트를 모니터링하고 싶어 하는 경우도 매우 흔합니다. 이러한 모든 사용 사례에서 프로필 속성은 핵심적인 역할을 합니다. X의 모든 계정에는 X @handle, 표시 이름(display name), 짧은 자기소개(bio), 거주지(사용자가 자유 형식으로 입력한 텍스트), 팔로워 수 등 다양한 메타데이터가 포함된 프로필이 있습니다. 숫자형 user id 및 계정 생성 시점과 같이 절대 변경되지 않는 속성도 있습니다. 반면 게시한 포스트 수, 팔로우하는 계정 수, 팔로워 수와 같이 보통 하루, 일주일, 한 달 단위로 변하는 속성도 있습니다. 표시 이름, 거주지, 자기소개와 같은 다른 계정 속성도 언제든지 변경될 수 있지만, 상대적으로 변경 빈도는 낮은 편입니다. 모든 게시물의 JSON payload에는 해당 게시물 작성자에 대한 계정 프로필 메타데이터가 포함됩니다. 해당 게시물이 리트윗(Retweet)인 경우, 원본 게시물을 올린 계정의 프로필 메타데이터도 함께 포함됩니다. 게시물의 프로필 메타데이터가 얼마나 변할 수 있는지는 사용한 과거 데이터 제품에 전적으로 달려 있습니다. Search API는 검색을 수행하는 시점의 프로필 설정을 기준으로 과거 포스트를 제공합니다. Historical PowerTrack의 경우, 2011년 이전 데이터를 제외하면 게시물이 게시된 시점의 프로필이 반영됩니다. 2011년보다 오래된 포스트에 대해서는, 프로필 메타데이터가 2011년 9월 당시의 프로필을 반영합니다.

원본 게시물과 리트윗

리트윗은 사용자 주도의 관행이 공식 객체가 된 또 다른 예입니다. 리트윗은 다른 사람에게 콘텐츠를 ‘전달’하는 방식으로 등장했습니다. 처음에는 게시물을 복사/붙여넣기하고 앞에 “RT @” 패턴을 붙이는 수동 프로세스로 시작되었습니다. 이후 이 프로세스는 새로운 리트윗 버튼으로 자동화되었고, 이에 맞춰 새로운 JSON 메타데이터도 도입되었습니다. 이렇게 ‘공식’ 리트윗이 탄생했고, 리트윗하는 행위는 일급 게시물 이벤트로 취급되기 시작했습니다. 또한 새로운 리트윗 버튼과 함께, 원본 게시물의 전체 페이로드와 같은 새로운 메타데이터도 도입되었습니다. 게시물이 원본인지 재공유된 것인지는 일반적으로 사용하는 필터링 ‘스위치’입니다. 어떤 경우에는 원본 콘텐츠만 필요합니다. 다른 경우에는 게시물 참여도가 가장 중요하므로 리트윗이 핵심이 됩니다. PowerTrack is:retweet 연산자는 사용자가 리트윗을 포함하거나 제외할 수 있도록 해줍니다. 2009년 8월 이전의 데이터를 가져오는 경우, 사용자는 리트윗 일치(또는 비일치)를 위해 두 가지 전략이 필요합니다. 2009년 8월 이전에는 게시물 텍스트 자체에서 “@RT ” 패턴이 있는지 정확한 구문 일치 방식으로 확인해야 합니다. 2009년 8월 이후 기간에 대해서는 is:retweet 연산자를 사용할 수 있습니다.

게시물 언어 분류

게시물이 어떤 언어로 작성되었는지는 많은 경우 중요한 관심 정보입니다. 게시물 언어는 게시물의 위치를 추론하는 데 도움이 되며, 분석이나 표시 목적상 특정 언어만 필요할 때가 자주 있습니다. (X 프로필에는 선호 언어 설정도 있습니다.) 게시물 언어 분류를 기준으로 필터링할 때 X의 과거용 제품들(Search API 및 Historical PowerTrack)은 서로 상당히 다릅니다. Search 아카이브를 구축할 때 모든 게시물에 X 언어 분류가 소급 적용(backfill)되었습니다. 따라서 lang: 연산자는 전체 게시물 아카이브에 대해 사용할 수 있습니다. Historical PowerTrack에서는 X의 언어 분류 메타데이터가 2013년 3월 26일부터 아카이브에 포함되어 제공됩니다. 

포스트의 지리 정보 참조

게시물이 어디에서 게시되었는지(즉, 지리 정보를 통해 참조하는 것)를 파악하는 것은 많은 사용 사례에서 중요합니다. 포스트의 지리 정보를 참조하는 주요 방법은 세 가지가 있습니다.
  • 게시물 메시지에 포함된 지리적 정보
  • 사용자가 위치 태그(지오태그)를 지정한 포스트
  • 사용자가 계정 프로필에 설정한 ‘home’ 위치
게시물 메시지의 지리적 참조
게시물 메시지의 지리적 참조를 기준으로 매칭하는 방식은 지역에 대한 지식에 의존하므로 가장 까다로운 방법인 경우가 많지만, 전체 게시물 아카이브에 사용할 수 있는 한 가지 옵션입니다. 아래는 ‘golden gate’ 필터를 사용해 2006년 샌프란시스코 지역에 대해 수행한 지리적 참조 기반 매칭 예시입니다: https://x.com/biz/statuses/28311
사용자가 지오태깅한 포스트
2009년 11월 X는 포스트를 정확한 위치와 함께 지오태깅할 수 있게 해주는 Post Geotagging API를 도입했습니다. 2010년 6월에는 장소, 동네, 도시 규모의 지리적 영역을 표현하는 X Places를 도입했습니다. 전체 포스트 중 약 1–2%가 이 두 가지 방법 중 하나를 사용해 지오태깅되어 있습니다. 사용 가능한 지오태깅 이력은 사용 중인 Historical API에 따라 달라집니다. Search APIs의 경우, 일부 Geo 연산자를 사용해 포스트를 매칭할 수 있는 기능은 2010년 3월부터 제공되었고, 다른 연산자들은 2015년 2월부터 제공되었습니다. Historical PowerTrack을 사용하는 경우, 지리 참조(geo-referencing)는 2011년 9월 1일부터 시작됩니다. Historical PowerTrack 아카이브가 구축될 때 이 날짜 이전의 모든 지오태깅 데이터는 포함되지 않았습니다.
사용자가 설정한 계정 프로필 ‘홈’ 위치
모든 X 사용자는 자신의 프로필 위치(Profile Location)를 설정해 홈 위치를 표시할 수 있습니다. 수많은 X 사용자가 이 정보를 제공하며, 이는 X Firehose 내 지리 데이터(geodata)의 양을 크게 늘립니다. 이 위치 메타데이터는 비정규화된, 사용자 생성의 자유 형식 문자열입니다. 약 30%의 계정에는 국가 수준까지 해석(매핑)할 수 있는 Profile Geo 메타데이터가 포함되어 있습니다. 게시물 geo와 마찬가지로, 매칭 방법과 사용 가능한 기간은 사용 중인 Historical API에 따라 달라집니다. Historical PowerTrack을 사용하면 이러한 자유 형식 문자열에 대해 직접 사용자 정의 매칭을 시도할 수 있습니다. 이 프로세스를 더 쉽게 하기 위해 X는 가능한 경우 지오코딩을 수행해 정규화된 메타데이터와 해당 연산자(Operator)를 제공하는 Profile Geo Enrichment도 제공합니다. Profile Geo 연산자는 Historical PowerTrack과 Search API 양쪽에서 모두 사용할 수 있습니다. Historical PowerTrack의 경우 이 Profile Geo 메타데이터는 2014년 6월부터 제공됩니다. Search API의 경우 이 메타데이터는 2015년 2월부터 제공됩니다. 웹 페이지 링크, 사진, 동영상 공유는 항상 X의 핵심 사용 사례였습니다. 초기에는 이러한 작업을 모두 게시물 메시지 자체에 URL 링크를 포함하는 방식으로 수행했습니다. 2011년에는 X가 사진 공유 기능을 사용자 인터페이스에 직접 통합했고, 2016년에는 네이티브 동영상이 추가되었습니다. 이러한 배경으로, 이 콘텐츠를 매칭하기 위해 사용되는 다양한 필터링 연산자가 존재합니다. 포스트에 공유된 링크, 사진, 동영상이 있는지 여부를 기준으로 매칭하는 연산자 집합이 있습니다. 또한 X에서 공유되는 대부분의 URL은 포스트의 문자 수를 덜 차지하도록 단축되기 때문에(예: bitly나 tinyurl 같은 서비스에서 생성된 URL), X는 매칭에 사용할 수 있는 완전한 확장 URL을 생성하는 데이터 보강 기능을 제공합니다. 예를 들어, X와 조기 경보 시스템에 대해 논의하는 링크가 포함된 포스트를 매칭하고 싶다면, ‘severe weather communication’을 참조하는 필터는 http://bit.ly/1XV1tG4 URL이 포함된 포스트와 매칭됩니다. 2012년 3월에 확장 URL 보강이 도입되었습니다. 이 시점 이전에는 게시물 페이로드에 사용자 제공 URL만 포함되었습니다. 따라서 사용자가 단축 URL을 포함한 경우, 관심 있는 (확장된) URL에 대해 매칭하기가 어려울 수 있습니다. Historical PowerTrack과 Search API들에서는 2012년 3월부터 이러한 메타데이터를 사용할 수 있습니다. 2016년 7월에는 향상된 URL 보강이 도입되었습니다. 이 향상된 버전은 웹사이트의 HTML 제목과 설명을 게시물 페이로드에 함께 제공하며, 이에 대해 매칭할 수 있는 연산자도 제공합니다. Historical PowerTrack에서는 이러한 메타데이터가 2016년 7월부터 제공됩니다. Search API들에서는 2014년 12월부터 이러한 메타데이터가 나타나기 시작합니다. 2016년 9월 X는 ‘네이티브 첨부’ 기능을 도입하여, 뒤에 오는 공유 링크가 게시물의 140자 제한에 포함되지 않도록 했습니다. 두 가지 URL 보강은 이러한 공유 링크에도 계속 적용됩니다. URL 필터링에 대한 URL 관련 제품별 기타 세부 정보는 관련 문서를 참고하십시오.