다음 비교 가이드를 확인하세요:
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 객체가 포함됩니다.
사용 가능한 데이터 형식
참고: 엔터프라이즈 데이터 API에는 Enriched Native 형식 사용을 강력히 권장합니다.엔터프라이즈 데이터 API는 두 가지 서로 다른 형식으로 데이터를 제공합니다. 표준 v1.1 native 형식과 가장 유사한 엔터프라이즈 형식은 Native Enriched입니다. 레거시 엔터프라이즈 데이터 형식은 Activity Streams로, 당시 X 및 기타 소셜 미디어 데이터 제공업체 전반에서 공통 포맷으로 사용하기 위해 Gnip이 처음 구현한 정규화 형식입니다. 이 형식은 여전히 사용할 수 있지만, X는 2017년 이후로 새로운 기능 및 개발을 Native Enriched 형식에만 투자해 왔습니다. Enriched Native 형식은 이름 그대로, native X 객체에 더해 URL 언와인딩 메타데이터, 프로필 위치 정보(profile geo), poll 메타데이터, 추가 참여(engagement) 지표 등과 같은 엔터프라이즈 데이터 제품에서 제공되는 추가 enrichment를 포함합니다.
- Enriched Native 형식에는 poll 메타데이터를 비롯해 reply_count 및 quote_count와 같은 추가 지표 등 2017년 이후 추가된 모든 신규 메타데이터가 포함됩니다.
- Activity Streams 형식은 2017년 문자 수 업데이트 이후로 새로운 메타데이터나 enrichment가 반영되지 않았습니다.
데이터 형식별 객체 비교
파싱 모범 사례
- X JSON은 UTF-8로 인코딩됩니다.
- 파서는 필드 순서의 변동을 무리 없이 허용하도록 설계해야 합니다. 게시물 JSON은 순서가 없는 데이터 해시로 제공된다고 가정해야 합니다.
- 파서는 ‘새로운’ 필드의 추가를 허용해야 합니다.
- JSON 파서는 ‘누락된’ 필드를 허용해야 합니다. 모든 필드가 모든 컨텍스트에 나타나는 것은 아니기 때문입니다.
- 일반적으로 null로 설정된 필드, 빈 집합, 필드가 없는 경우를 동일한 것으로 간주해도 안전합니다.
엔터프라이즈 네이티브 Enriched 데이터 객체
Native Enriched Tweet 객체
X API v2 형식과 Native Enriched 데이터 형식 간의 매핑 방식에 대해 더 자세히 알고 싶으신가요? 비교 가이드를 참조하세요: Native Enriched compared to X API v2
게시물 객체
id, created_at, text와 같은 기본 속성을 포함한 ‘루트 수준’ 속성이 길게 나열됩니다. 게시물 객체에는 또한 user, entities, extended_entities를 포함하는 중첩 객체도 존재합니다. 게시물 객체는 retweeted_status, quoted_status, extended_tweet와 같은 중첩 게시물 객체도 포함합니다. 네이티브 강화 포맷에는 추가로 matching_rules 객체가 포함됩니다.
X Data Dictionary
| 속성 | 유형 | 설명 |
|---|---|---|
| created_at | String | 이 게시물이 생성된 UTC 시간입니다. 예시: “created_at”: “Wed Oct 10 20:19:24 +0000 2018” |
| id | Int64 | 이 게시물의 고유 식별자를 정수로 표현한 값입니다. 이 값은 53비트보다 크며, 일부 프로그래밍 언어에서는 이를 해석하는 과정에서 어려움을 겪거나 눈에 띄지 않는 결함이 발생할 수 있습니다. 이 식별자를 저장할 때는 부호 있는 64비트 정수를 사용하는 것이 안전합니다. 이 식별자를 안전하게 가져오려면 **id_str**를 사용하십시오. 자세한 내용은 X ID를 참조하세요. 예시:“id”:1050118621198921728 |
| id_str | String | 이 게시물 고유 식별자의 문자열 표현입니다. 구현에서는 큰 정수 값인 id 대신 이 값을 사용해야 합니다. 예시:“id_str”:“1050118621198921728” |
| text | String | 게시물의 실제 UTF-8 텍스트입니다. 현재 어떤 문자가 유효한 것으로 간주되는지에 대한 자세한 내용은 X-text를 참조하세요. 예시: “text”:“더 많은 표현이 가능하도록 이제 모든 이모지를 동일하게 계산합니다. 성별 및 피부 톤이 있는 이모지도 포함됩니다… https://t.co/MkGjXf9aXm” |
| source | String | 게시물을 게시하는 데 사용된 유틸리티를 나타내는 HTML 형식의 문자열입니다. X 웹사이트에서 작성된 포스트는 source 값이 **web**입니다.예: “source”:“X Web Client” |
| truncated | Boolean | text 파라미터의 값이, 예를 들어 리트윗이 원본 게시물 텍스트 길이 제한인 140자를 초과하여 잘렸는지를 나타냅니다. 잘린 텍스트는 **...**와 같이 말줄임표로 끝납니다. 현재 X는 길이가 긴 포스트를 잘라내지 않고 거부하므로, 대부분의 포스트에서는 이 값이 false 로 설정됩니다. 네이티브 리트윗의 경우 최상위 text 프로퍼티가 축약될 수 있지만, 원본 텍스트는 retweeted_status 객체에서 확인할 수 있고, truncated 파라미터는 원본 상태의 값(대부분의 경우 false )으로 설정됩니다. 예시:“truncated”:true |
| in_reply_to_status_id | Int64 | null 허용. 해당 게시물이 답글인 경우, 이 필드에는 원래 게시물 ID의 정수 표현이 포함됩니다. 예: “in_reply_to_status_id”:1051222721923756032 |
| in_reply_to_status_id_str | String | 널 허용. 해당 게시물이 답글인 경우, 이 필드에는 원본 게시물의 ID를 문자열로 표현한 값이 포함됩니다. 예시: “in_reply_to_status_id_str”:“1051222721923756032” |
| in_reply_to_user_id | Int64 | Nullable. 표시된 게시물이 답글인 경우, 이 필드는 원본 게시물 작성자 ID의 정수형 표현을 포함합니다. 이는 해당 게시물에서 직접 언급된 사용자와 항상 일치하는 것은 아닙니다. 예시: “in_reply_to_user_id”:6253282 |
| in_reply_to_user_id_str | String | Nullable. 해당 게시물이 답글인 경우, 이 필드는 원본 게시물 작성자 ID의 문자열 표현을 포함합니다. 이는 반드시 게시물에서 직접 멘션된 사용자와 일치하는 것은 아닙니다. 예: “in_reply_to_user_id_str”:“6253282” |
| in_reply_to_screen_name | String | Nullable. 표시된 게시물이 답글인 경우, 이 필드에는 원래 게시물 작성자의 스크린 이름이 포함됩니다. 예시: “in_reply_to_screen_name”:“xapi” |
| user | User 객체 | 이 게시물을 작성한 사용자입니다. 전체 속성 목록은 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_images/942858479592554497/BbazLO9L_normal.jpg”, “profile_banner_url”: “https://pbs.twimg.com/profile_banners/6253282/1497491515”, “default_profile”: false, “default_profile_image”: false, “following”: null, “follow_request_sent”: null, “notifications”: null } } |
| coordinates | Coordinates | null 허용. 사용자 또는 클라이언트 애플리케이션에서 보고한 이 게시물의 지리적 위치를 나타냅니다. 내부 coordinates 배열은 geoJSON 형식으로, 경도가 먼저이고 그다음이 위도입니다. 예시:“coordinates”: <br/> “coordinates”: [ -75.14310264, 40.05701649 ], “type”:“Point” } |
| place | Places | Nullable 값이 존재하는 경우, 게시물이 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_id | Int64 | 이 필드는 해당 게시물이 인용 Tweet일 때에만 노출됩니다. 이 필드에는 인용된 Tweet의 게시물 ID를 나타내는 정수 값이 포함됩니다. 예시: “quoted_status_id”:1050119905717055488 |
| quoted_status_id_str | String | 이 필드는 게시물이 인용 Tweet인 경우에만 노출됩니다. 이는 인용된 Tweet의 게시물 ID를 문자열로 표현한 값입니다. 예시: “quoted_status_id_str”:“1050119905717055488” |
| is_quote_status | Boolean | 해당 게시물이 인용 Tweet인지 여부를 나타냅니다. 예: “is_quote_status”:false |
| quoted_status | Post | 이 필드는 이 게시물이 인용 Tweet일 때에만 노출됩니다. 이 속성에는 인용된 원본 게시물의 Post 객체가 포함됩니다. |
| retweeted_status | 리트윗된 게시물 | 사용자는 다른 사용자가 작성한 포스트를 리트윗하여 노출을 확대할 수 있습니다. 리트윗은 retweeted_status 속성의 존재 여부로 일반 포스트와 구분할 수 있습니다. 이 속성에는 리트윗된 원본 게시물의 표현이 포함됩니다. 리트윗을 다시 리트윗한 경우, 중간 리트윗의 표현은 포함되지 않고 원본 게시물만 표시된다는 점에 유의하세요. (사용자는 자신이 생성한 리트윗을 삭제하여 해당 리트윗을 취소할 수도 있습니다.) |
| quote_count | Integer | null 허용. X 사용자가 이 게시물을 인용한 대략적인 횟수를 나타냅니다. 예: “quote_count”:33 참고: 이 객체는 Premium 및 Enterprise 티어 제품에서만 사용할 수 있습니다. |
| reply_count | Int | 이 게시물에 대한 답글 수입니다. 예: “reply_count”:30 참고: 이 객체는 Premium 및 Enterprise 티어 제품에서만 제공됩니다. |
| retweet_count | Int | 이 게시물이 리트윗된 횟수입니다. 예: “retweet_count”:160 |
| favorite_count | Integer | null 가능. X 사용자들이 이 게시물에 좋아요를 누른 대략적인 횟수를 나타냅니다. 예시: “favorite_count”:295 |
| entities | Entities | 게시물 텍스트에서 추출된 엔터티입니다. 자세한 내용은 X 객체의 Entities도 참조하세요. 예시: “entities”: <br/> “hashtags”:[], “urls”:[], “user_mentions”:[], “media”:[], “symbols”:[] “polls”:[] } |
| extended_entities | Extended Entities | 게시물에 네이티브 사진 1~4개 또는 동영상 1개 또는 애니메이션 GIF 1개가 포함된 경우, ‘media’ 메타데이터 배열을 포함합니다. 이는 인용 Tweet 에도 제공됩니다. 자세한 내용은 Entities in X Objects를 참조하세요. 예: “entities”: <br/> “media”:[] } |
| favorited | Boolean | Nullable. 인증된 사용자가 이 게시물을 좋아요를 눌렀는지 여부를 나타냅니다. 예시: “favorited”:true |
| retweeted | Boolean | 이 게시물이 인증된 사용자가 리트윗했는지 여부를 나타냅니다. 예시: “retweeted”:false |
| possibly_sensitive | Boolean | Nullable. 이 필드는 콘텐츠가 민감한 것으로 인식될 수 있음을 나타냅니다. 게시물 작성자는 자신의 계정 환경설정에서 “게시하는 미디어를 잠재적으로 민감한 콘텐츠로 표시” 옵션을 선택할 수 있으며, 이후 생성되는 각 게시물에는 이 플래그가 설정됩니다. 또한 내부 X 지원 담당자가 이를 검토해 라벨을 부여할 수도 있습니다. ”possibly_sensitive”:false |
| filter_level | String | 이 게시물을 스트리밍할 수 있는 filter_level 매개변수의 최대 값을 나타냅니다. 따라서 값이 **medium**인 경우 none, low, medium 스트림에서 모두 스트리밍됩니다.예시: “filter_level”: “low” |
| lang | String | 널 허용. 값이 존재하면 자동으로 감지된 게시물 텍스트의 언어에 해당하는 BCP 47 언어 식별자를 나타내며, 언어를 감지할 수 없으면 **und**로 설정됩니다. 예시: “lang”: “en” |
| edit_history | Object | 게시물의 모든 버전을 나타내는 고유 식별자입니다. 편집 내역이 없는 포스트의 경우 ID가 하나만 존재합니다. 편집 기록이 있는 포스트의 경우 여러 개의 ID가 있으며, 편집 순서를 반영해 오름차순으로 정렬되고, 배열의 마지막 위치에 가장 최신 버전이 위치합니다. 해당 게시물 ID는 hydrate 작업과 이전 버전 게시물 조회에 사용할 수 있습니다. 예: edit_history”: <br/> “initial_tweet_id”: “1283764123” “edit_tweet_ids”: [“1283764123”, “1394263866”] } |
| edit_controls | Object | 존재하는 경우, 게시물이 얼마나 더 수정 가능한지와 남은 수정 횟수를 나타냅니다. 포스트는 생성 후 처음 30분 동안만 수정할 수 있으며, 최대 다섯 번까지 수정할 수 있습니다. 게시물 ID는 게시물의 이전 버전을 복원하고 조회하는 데 사용할 수 있습니다. 예시: “edit_controls”: <br/> “editable_until_ms”: 123 “edits_remaining”: 3 } |
| editable | Boolean | 존재하는 경우, 게시물이 게시될 당시 수정 가능했는지를 나타냅니다. 이 필드는 동적으로 변경되지 않으며, 게시물이 수정 가능 시간 한도나 최대 수정 횟수에 도달하더라도 True에서 False로 전환되지 않습니다. 다음과 같은 게시물 특성이 있는 경우 이 필드는 False로 설정됩니다: * 게시물이 프로모션(광고)된 경우 * 게시물에 투표가 포함된 경우 * 게시물이 자신이 시작한 스레드가 아닌 답글인 경우 * 게시물이 리트윗인 경우(인용 Tweet은 수정 가능합니다) * 게시물이 널캐스트(nullcast)인 경우 * 커뮤니티 게시물인 경우 * 슈퍼 팔로우 게시물인 경우 * 공동 게시물인 경우 |
| matching_rules | 규칙 객체의 배열 | X Search 및 PowerTrack와 같은 filtered 제품에서 사용됩니다. 게시물과 일치한 규칙과 연결된 id 및 tag를 제공합니다. 일치 규칙에 대한 자세한 내용은 여기를 참조하세요. PowerTrack의 경우 하나의 게시물에 둘 이상의 규칙이 일치할 수 있습니다. 예시: “matching_rules”: ” [<br/> “tag”: “xapi emojis”, “id”: 1050118621198921728, “id_str”: “1050118621198921728” }]“ |
추가 게시물 속성
| Attribute | Type | Description |
|---|---|---|
| current_user_retweet | Object | Perspectival include_my_retweet 매개변수를 지원하고 해당 값이 true로 설정된 메서드에서만 제공됩니다. 이 게시물에 대해 사용자가 한 리트윗(존재하는 경우)의 게시물 ID를 나타냅니다. 예시:“current_user_retweet”: <br/> “id”: 6253282, “id_str”: “6253282” } |
| scopes | Object | 포함된 게시물을 어떤 컨텍스트에서 전달할지 나타내는 키-값 쌍의 집합입니다. 현재 X의 Promoted Products에서 사용됩니다. 예시: “scopes”:{“followers”:false} |
| withheld_copyright | Boolean | 존재하며 값이 “true”인 경우, 이 콘텐츠가 DMCA complaint로 인해 제공이 제한되었음을 나타냅니다. 예시: “withheld_copyright”: true |
| withheld_in_countries | Array of String | 존재하는 경우, 이 콘텐츠가 차단된 대문자 두 글자 국가 코드 목록을 나타냅니다. X는 이 필드에 대해 다음과 같은 비(非) 국가 값을 지원합니다: “XX” - 콘텐츠가 모든 국가에서 보류됨 ”XY” - 콘텐츠가 DMCA 요청으로 인해 보류됨. 예시: “withheld_in_countries”: [“GR”, “HK”, “MY”] |
| withheld_scope | String | 존재하는 경우, 보류 중인 콘텐츠가 “status”인지 “user”인지를 나타냅니다. 예시: “withheld_scope”: “status” |
사용 중단된 속성
| Field | Type | Description |
| geo | Object | 사용 중단됨. Null 가능. 대신 coordinates 필드를 사용하세요. 이 사용 중단된 속성에서는 좌표가 [lat, long] 형태로 표현되며, 다른 모든 게시물의 geo는 [long, lat] 형태로 표현됩니다. |
중첩된 게시물 객체
인용 Tweet
확장 게시물
네이티브 Enriched 사용자 객체
User 객체에는 참조된 X 사용자를 설명하는 X 사용자 계정 메타데이터가 포함됩니다.
사용자 데이터 딕셔너리
| 속성 | 타입 | 설명 |
|---|---|---|
| id | Int64 | 이 User에 대한 고유 식별자의 정수 표현입니다. 이 수는 53비트보다 크기 때문에 일부 프로그래밍 언어에서는 이를 해석하는 과정에서 어려움이 있거나, 해석 시 눈에 띄지 않는 오류가 발생할 수 있습니다. 이 식별자를 저장할 때는 부호 있는 64비트 정수를 사용하는 것이 안전합니다. 식별자를 안전하게 가져오려면 id_str을(를) 사용하세요. 자세한 내용은 X IDs를 참조하세요. 예시:“id”: 6253282 |
| id_str | String | 이 User에 대한 고유 식별자의 문자열 표현입니다. 구현 시에는 id의 매우 크고 일부 환경에서는 처리할 수 없을 수 있는 정수 대신 이 값을 사용해야 합니다. 예시:“id_str”: “6253282” |
| name | String | 사용자가 설정한 이름입니다. 반드시 사람 이름일 필요는 없습니다. 일반적으로 최대 50자로 제한되지만, 변경될 수 있습니다. 예: “name”: “API” |
| screen_name | String | 이 사용자가 자신을 식별하는 데 사용하는 스크린 이름(screen name), 핸들(handle) 또는 별칭(alias)입니다. screen_name은 고유하지만 변경될 수 있습니다. 가능하면 id_str를 사용자 식별자로 사용하세요. 일반적으로 최대 15자까지 허용되지만, 일부 예전 계정은 더 긴 이름을 가지고 있을 수 있습니다. 예시:“screen_name”: “api” |
| location | String | Nullable . 이 계정 프로필에 대해 사용자가 지정한 위치입니다. 실제 위치일 필요도 없으며, 기계가 파싱할 수 있는 형식일 필요도 없습니다. 이 필드는 때때로 Search 서비스에서 대략적으로 해석될 수 있습니다. 예: “location”: “San Francisco, CA” |
| derived | Enrichment 객체의 배열 | Enterprise API에서만 사용할 수 있습니다. 사용자에 대해 파생된 Enrichment 메타데이터의 컬렉션입니다. Profile Geo Enrichment 메타데이터를 제공합니다. JSON 데이터 사전 등을 포함한 자세한 내용은 참조 문서를 확인하세요. 예시: “derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”] |
| url | String | null 허용. 사용자가 자신의 프로필에 연결해 제공한 URL입니다. 예시: “url”: “https://developer.x.com” |
| description | String | Nullable . 사용자가 자신의 계정을 설명하기 위해 직접 정의한 UTF-8 문자열입니다. 예시: “description”: “The Real X API.” |
| protected | Boolean | true인 경우 이 사용자가 자신의 포스트를 비공개로 설정했음을 나타냅니다. 공개 및 비공개 포스트에 대하여를 참조하세요. 예: “protected”: true |
| verified | Boolean | true인 경우, 해당 사용자의 계정이 인증 계정임을 나타냅니다. Verified Accounts를 참고하세요. 예: “verified”: false |
| followers_count | Int | 이 계정이 현재 보유한 팔로워 수입니다. 특정 장애나 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예: “followers_count”: 21 |
| friends_count | Int | 이 계정이 팔로우하고 있는 사용자 수(‘팔로잉 수’라고도 함)입니다. 특정 비정상 상황에서는 이 필드가 일시적으로 “0”으로 표시될 수 있습니다. 예: “friends_count”: 32 |
| listed_count | Int | 이 사용자가 속해 있는 공개 리스트의 수입니다. 예시: “listed_count”: 9274 |
| favourites_count | Int | 이 사용자가 계정이 존재한 전체 기간 동안 좋아요를 누른 포스트 수입니다. 필드 이름에는 역사적인 이유로 영국식 철자를 사용합니다. 예시: “favourites_count”: 13 |
| statuses_count | Int | 사용자가 작성한 포스트 수(리트윗 포함)입니다. 예시: “statuses_count”: 42 |
| created_at | String | X에서 사용자 계정이 생성된 UTC 기준 날짜 및 시간. 예제: “created_at”: “Mon Nov 29 21:18:15 +0000 2010” |
| profile_banner_url | String | 사용자가 업로드한 프로필 배너의 웹 상 표준 표현을 가리키는 HTTPS 기반 URL입니다. URL에 마지막 경로 요소를 추가하면 특정 디스플레이에 최적화된 서로 다른 이미지 크기를 얻을 수 있습니다. 크기별 변형에 대해서는 User Profile Images and Banners를 참조하세요. 예시: “profile_banner_url”: “https://si0.twimg.com/profile_banners/819797/1348102824” |
| profile_image_url_https | String | 사용자의 프로필 이미지를 가리키는 HTTPS 기반의 URL입니다. 예: “profile_image_url_https”: “https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png” |
| default_profile | 불리언 | true인 경우 사용자가 사용자 프로필의 테마 또는 배경을 변경하지 않았음을 나타냅니다. 예: “default_profile”: false |
| default_profile_image | 불리언 | true인 경우, 사용자가 자신의 프로필 이미지를 업로드하지 않았고 기본 이미지가 사용되고 있음을 나타냅니다. 예시: “default_profile_image”: false |
더 이상 지원되지 않는(사용 중단됨) 속성
| Field | Type | Description |
|---|---|---|
| utc_offset | null | 값은 null로 설정됩니다. 여전히 GET account/settings를 통해 사용 가능합니다. |
| time_zone | null | 값은 null로 설정됩니다. 여전히 GET account/settings에서 tzinfo_name으로 사용 가능합니다. |
| lang | null | 값은 null로 설정됩니다. 여전히 GET account/settings에서 language로 사용 가능합니다. |
| geo_enabled | null | 값은 null로 설정됩니다. 여전히 GET account/settings를 통해 사용 가능합니다. 이 필드는 현재 사용자가 POST statuses / update를 사용할 때 지리적 데이터를 첨부하려면 true여야 합니다. |
| following | null | 값은 null로 설정됩니다. 여전히 GET friendships/lookup를 통해 사용 가능합니다. |
| follow_request_sent | null | 값은 null로 설정됩니다. 여전히 GET friendships/lookup를 통해 사용 가능합니다. |
| has_extended_profile | null | 사용 중단됨. 값은 null로 설정됩니다. |
| notifications | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_location | null | 사용 중단됨. 값은 null로 설정됩니다. |
| contributors_enabled | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_image_url | null | 사용 중단됨. 값은 null로 설정됩니다. 참고: 프로필 이미지는 profile_image_url_https 필드를 통해서만 사용할 수 있습니다. |
| profile_background_color | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_background_image_url | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_background_image_url_https | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_background_tile | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_link_color | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_sidebar_border_color | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_sidebar_fill_color | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_text_color | null | 사용 중단됨. 값은 null로 설정됩니다. |
| profile_use_background_image | null | 사용 중단됨. 값은 null로 설정됩니다. |
| is_translator | null | 사용 중단됨. 값은 null로 설정됩니다. |
| is_translation_enabled | null | 사용 중단됨. 값은 null로 설정됩니다. |
| translator_type | null | 사용 중단됨. 값은 null로 설정됩니다. |
예시 사용자 객체:
네이티브 Enriched Geo 객체
place 객체는 게시물이 Place로 지오태그될 때마다 항상 존재합니다. Place는 해당 지리 좌표가 있는 특정 이름의 위치를 의미합니다. 사용자가 자신의 게시물에 위치를 지정하기로 선택하면, 후보 X Place 목록이 사용자에게 제시됩니다. API를 사용하여 게시물을 작성할 때는 게시 시 place_id를 지정하여 X Place를 첨부할 수 있습니다. Place와 연결된 포스트는 반드시 해당 위치에서 발행된 것일 필요는 없으며, 해당 위치에 관한 포스트일 수도 있습니다.
geo 및 coordinates 객체는 게시물에 정확한 위치 가 지정된 경우에만 (null이 아닌 상태로) 존재합니다. 정확한 위치가 제공되면 coordinates 객체는 지리 좌표가 담긴 [long, lat] 배열을 제공하고, 해당 위치에 대응되는 X Place가 지정됩니다.
장소 데이터 사전
| Field | Type | Description |
|---|---|---|
| id | String | 이 장소를 나타내는 ID입니다. 정수가 아니라 문자열로 표현됩니다. 예: “id”:“01a9a39529b27f36” |
| url | String | 이 장소에 대한 추가 장소 메타데이터의 위치를 나타내는 URL입니다. 예: “url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json” |
| place_type | String | 이 장소가 나타내는 위치의 유형입니다. 예: “place_type”:“city” |
| name | String | 이 장소의 이름을 사람이 읽기 쉬운 짧은 형태로 표현한 값입니다. 예: “name”:“Manhattan” |
| full_name | String | 이 장소의 이름을 사람이 읽기 쉬운 전체 형태로 표현한 값입니다. 예: “full_name”:“Manhattan, NY” |
| country_code | String | 이 장소가 속한 국가를 나타내는 축약된 국가 코드입니다. 예: “country_code”:“US” |
| country | String | 이 장소가 속한 국가의 이름입니다. 예: “country”:“United States” |
| bounding_box | Object | 이 장소를 둘러싸는 좌표들의 바운딩 박스입니다. 예: “bounding_box”: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ], “type”: “Polygon” |
| attributes | Object | PowerTrack, 30-Day 및 Full-Archive Search API, Volume Streams를 사용할 때 이 해시는 null입니다. 예: “attributes”: |
| Field | Type | Description |
| coordinates | Array 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 ] ] ] |
| type | String | coordinates 속성에 인코딩된 데이터의 type입니다. 경계 상자에는 “Polygon”이, 정확한 좌표를 가진 포스트에는 “Point”가 사용됩니다. 예시:“type”:“Polygon” |
Geo object 데이터 사전
| Field | Type | Description |
| coordinates | Float 컬렉션 | 게시물의 위치에 대한 경도와 위도 값으로, [latitude, longitude] 형식의 컬렉션입니다. 예시: ** “geo”: “type”:** “Point”, ** “coordinates”: [ 54.27784, -0.41068 ] ** |
| type | String | coordinates 속성에 인코딩된 데이터의 유형입니다. 게시물 좌표 필드에서는 항상 “Point”입니다. 예시:“type”: “Point” |
| Field | Type | Description |
| coordinates | Float 컬렉션 | 게시물의 위치에 대한 경도와 위도 값으로, [longitude, latitude] 형식의 컬렉션입니다. 예시: ** “coordinates”: “type”:** “Point”, ** “coordinates”: [ -0.41068, 54.27784 ] ** |
| type | String | coordinates 속성에 인코딩된 데이터의 유형입니다. 게시물 좌표 필드에서는 항상 “Point”입니다. 예시:“type”: “Point” |
파생 위치
| 필드 | type | 설명 |
| derived | locations 객체 | 프로필 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” ** ] ** |
예제:
X 엔티티
소개
엔티티(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에 포함되어 있습니다:
- media 및 polls 엔티티는 해당 유형의 콘텐츠가 게시물에 포함된 경우에만 표시됩니다.
- 네이티브 media(사진, 동영상 또는 GIF)로 작업하는 경우 Extended Entities object를 사용해야 합니다.
Entities object
entities 및 extended_entities 섹션은 모두 엔티티 object 배열로 구성됩니다. 아래에서 각 엔티티 object에 대한 설명과 함께, object의 속성 이름, type, 간단한 설명을 담은 데이터 딕셔너리를 확인할 수 있습니다. 또한 이러한 속성과 매칭되는 PowerTrack Operator를 표시하고, 일부 JSON 페이로드 예시도 포함합니다.
포스트에서 공통적으로 발견되는 엔티티(해시태그, 링크, 사용자 멘션 등)의 모음입니다. 이 entities object에는 media 속성이 포함되어 있지만, entiites 섹션에서의 구현은 단일 사진이 있는 포스트에 대해서만 완전히 정확합니다. 둘 이상의 사진, 동영상 또는 애니메이션 GIF가 포함된 모든 포스트에 대해서는 extended_entities 섹션을 참고해야 합니다.
엔티티 데이터 사전
entities 객체는 다른 엔티티 하위 객체 배열을 담는 컨테이너입니다. entities 구조를 먼저 설명한 뒤, 이 하위 객체들에 대한 데이터 사전과 이에 매칭되는 연산자들이 제공됩니다.
| 필드 | type | 설명 |
|---|---|---|
| hashtags | Hashtag 객체의 배열 | 게시물 텍스트에서 파싱된 해시태그를 나타냅니다. 예시: “hashtags”: [ “indices”: [ 32, 38 ], “text”: “nodejs” ] |
| media | Media 객체 배열 | 게시물과 함께 업로드된 미디어를 나타냅니다. 예시: “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”, ] |
| urls | URL 객체 배열 | 게시물의 텍스트에 포함된 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_mentions | User Mention 객체 배열 | 게시물 텍스트에 언급된 다른 X 사용자를 나타냅니다. 예시: “user_mentions”: [ “name”: “X API”, “indices”: [ 4, 15 ], “screen_name”: “xapi”, “id”: 6253282, “id_str”: “6253282” ] |
| symbols | Symbol 객체 배열(Symbol Objects) | 게시물 텍스트에 포함된 기호(예: $cashtag)를 나타냅니다. 예: “symbols”: [ “indices”: [ 12, 17 ], “text”: “twtr” ] |
| polls | Poll 객체 배열 | 게시물에 포함된 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 연산자는 배열에 최소 하나의 항목이 있으면 매칭됩니다.
| Field | Type | Description |
| indices | Array of Int | 게시물 텍스트 내에서 해시태그가 시작되고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 게시물 텍스트 문자열에서 # 문자의 위치를 나타냅니다. 두 번째 정수는 해시태그 다음 첫 번째 문자의 위치를 나타냅니다. 따라서 두 숫자의 차이는 해시태그 이름의 길이에 1(‘#’ 문자)을 더한 값이 됩니다. 예시:“indices”:[32,38] |
| text | String | 앞에 오는 ‘#’ 문자를 제외한 해시태그의 이름입니다. 예시: “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” |
| id | Int64 | 미디어의 식별자를 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_url은 media_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을 참조하세요. |
| sizes | 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 } } } 사용 가능한 sizes를 기준으로 media_url_https와 같은 사진의 URL을 포맷하는 방법은 Photo Media URL formatting을 참고하세요. |
| source_status_id | Int64 | Null 허용. 원래 다른 게시물에 연결되어 있던 미디어를 포함하는 포스트의 경우, 이 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” |
미디어 크기 객체
Sizes object
| Field | Type | Description |
| thumb | Size Object | 미디어의 썸네일 크기 버전에 대한 정보입니다. 예시: “thumb”:“h”:150, “resize”:“crop”, “w”:150} 썸네일 크기 사진 미디어는 150x150 경계 영역을 fill 방식으로 채우도록 제한되며, 잘려서(crop) 표시됩니다. |
| large | Size Object | 미디어의 large 크기 버전에 대한 정보입니다. 예시: “large”:“h”:454, “resize”:“fit”, “w”:680} small 크기 사진 미디어는 680x680 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다. |
| medium | Size Object | 미디어의 medium 크기 버전에 대한 정보입니다. 예시: “medium”:“h”:800, “resize”:“fit”, “w”:1200} medium 크기 사진 미디어는 1200x1200 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다. |
| small | Size Object | 미디어의 small 크기 버전에 대한 정보입니다. 예시: “small”:“h”:1366, “resize”:“fit”, “w”:2048} large 크기 사진 미디어는 2048x2048 경계 영역 안에 fit 방식으로 맞추도록 제한됩니다. |
Size 객체
| Field | Type | Description |
| w | Int | 이 크기의 너비(픽셀 단위). 예: “w”:150 |
| h | Int | 이 크기의 높이(픽셀 단위). 예: “h”:150 |
| resize | String | 이 크기를 얻기 위해 사용된 크기 조정 방식. 값이 _fit_이면 미디어의 원본 종횡비를 유지한 채 한 변에 맞도록 크기를 조정했음을 의미합니다. 값이 _crop_이면 특정 해상도에 맞추기 위해 미디어를 잘라냈음을 의미합니다. 예: “resize”:“crop” |
사진 미디어 URL 포맷팅
media_url 또는 media_url_https만 단독으로 로드할 수도 있으며, 이 경우 기본적으로 medium 변형이 로드됩니다. 하지만 가능하다면 완전한 형식으로 구성된 사진 미디어 URL을 제공하는 것이 바람직합니다.
사진 미디어 URL은 세 부분으로 구성됩니다:
| Base URL | Base URL은 파일 확장자를 제외한 media URL입니다. 예를 들어: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, 이때 Base URL은 다음과 같습니다. https://pbs.twimg.com/media/DOhM30VVwAEpIHq |
| Format | Format은 이미지가 어떤 형식의 사진으로 포맷되어 있는지를 나타냅니다. 가능한 형식은 jpg 또는 _png_이며, media URL의 확장자로 제공됩니다. 예를 들어: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, 이때 Format은: jpg 입니다. |
| Name | Name은 로드할 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 가 됩니다. |
| 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&name=large 참고: 사진 미디어 URL의 쿼리 문자열에 있는 항목은 알파벳 순으로 배치되어 있습니다. 미디어 로드에 추가적인 쿼리 항목이 추가되더라도 알파벳 순서는 계속 유지되어야 합니다. 예를 들어, _preferred_format_이라는 가상의 새 쿼리 항목이 있다면, 쿼리 문자열에서 format 및 name 뒤에 와야 합니다. |
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.title 및 unwound.description 속성을 기준으로 매치하는 데 사용됩니다.
| Field | Type | Description |
| display_url | String | Post에 붙여넣거나 입력한 URL. 예: “display_url”:“bit.ly/2so49n2” |
| expanded_url | String | display_url의 확장 버전. 예:“expanded_url”:“http://bit.ly/2so49n2” |
| indices | Array of Int | URL이 Post 텍스트 내에서 시작하고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 Post 텍스트에서 URL의 첫 글자가 위치한 곳을 나타냅니다. 두 번째 정수은 URL 끝 이후의 첫 URL이 아닌 문자가 위치한 곳을 나타냅니다. 예: “indices”:[30,53] |
| url | String | 래핑된 URL로, 원시 Post 텍스트에 직접 포함된 값이며 indices 매개변수의 값에 해당합니다. 예: “url”:“https://t.co/yzocNFvJuL” |
unwound 속성 아래에서 제공됩니다:
| Field | Type | Description |
| url | String | Post에 포함된 링크의 완전히 풀어낸 버전입니다. 예: “url”:“https://blog.x.com/en_us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html” |
| status | Int | 언와인딩 프로세스의 최종 HTTP 상태 코드이며, ‘200’은 성공을 나타냅니다. 예: 200 |
| title | String | 링크의 HTML title입니다. 예: “title”:“Using X as a ‘go-to’ communication channel during severe weather” |
| description | String | 링크의 HTML description입니다. 예: “description”:“Using X as a ‘go-to’ communication channel during severe weather” |
사용자 멘션 객체
entities 섹션에는 게시물 본문에 포함된 각 사용자 멘션마다 하나의 객체를 담은 user_mentions 배열이 포함되며, 사용자 멘션이 없으면 빈 배열이 포함됩니다.
PowerTrack @ 연산자는 screen_name 속성 값을 기준으로 매칭하는 데 사용됩니다. has:mentions 연산자는 배열에 최소 한 개의 항목이 있을 경우 매칭됩니다.
| Field | Type | Description |
| id | Int64 | 멘션된 사용자의 id를 나타내는 정수입니다. 예: “id”:6253282 |
| id_str | String | 멘션된 사용자의 id를 나타내는 문자열입니다. 예: “id_str”:“6253282” |
| indices | Array of Int | 사용자 참조가 게시물 텍스트 내에서 시작되고 끝나는 위치 오프셋을 나타내는 정수 배열입니다. 첫 번째 정수는 사용자 멘션의 ‘@’ 문자 위치를 나타냅니다. 두 번째 정수는 사용자 멘션 뒤에 오는, 해당 screen_name에 속하지 않는 첫 번째 문자의 위치를 나타냅니다. 예: “indices”:[4,15] |
| name | String | 참조된 사용자의 표시 이름입니다. 예: “name”:“API” |
| screen_name | String | 참조된 사용자의 screen_name입니다. 예: “screen_name”:“api” |
Symbol object
entities 섹션에는 게시물 본문에 포함된 모든 $cashtag마다 하나의 객체를 담은 symbols 배열이 포함되며, 심볼이 없으면 빈 배열이 포함됩니다.
PowerTrack $ 연산자는 text 속성 값을 기준으로 매치하는 데 사용됩니다. has:symbols 연산자는 배열에 최소 한 개의 항목이 있을 경우 매치됩니다.
| Field | Type | Description |
| indices | Array of Int | 심볼/cashtag가 게시물 텍스트 내에서 시작하고 끝나는 위치를 나타내는 정수 배열입니다. 첫 번째 정수는 게시물 텍스트 문자열에서 ’ 문자)을 더한 값이 됩니다. 예시: “indices”:[12,17] |
| text | String | 앞부분의 ‘$’ 문자를 제외한 cashtag의 이름입니다. 예시: “text”:“twtr” |
Poll 객체
entities 섹션에 단일 poll 객체를 담은 polls 배열이 생성됩니다. 투표가 포함되지 않은 경우 entities 섹션에 polls 배열이 존재하지 않습니다.
이 Poll 메타데이터는 다음 Enterprise API에서만 제공됩니다:
- Volume streams (Decahose )
- Real-time PowerTrack
- X Search API (Full-Archive Search 및 30-Day Search)
| 필드 | type | 설명 |
| options | Option 객체 배열 | 각 옵션이 투표 위치와 해당 위치의 텍스트를 가지는 옵션 배열입니다. 예시: “options”: [ “position”: 1, “text”: “I read documentation once.” } ] } |
| end_datetime | String | 투표가 종료되는 시점의 타임스탬프(UTC)입니다. 예시: “end_datetime”: “Thu May 25 22:20:27 +0000 2017” |
| duration_minutes | String | 투표 진행 시간(분)입니다. 예시: “duration_minutes”: 60 |
Retweet and Quote Tweet 세부 정보
Retweets
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
url 및 description이 제공됩니다.
이 예시에서 사용자 url 필드는 응답의 entities/url/urls[0] 노드 안에 완전히 확장된 형태의 t.co 링크를 포함합니다. 이 사용자의 설명(description)에는 래핑된 URL이 포함되어 있지 않습니다.
JSON 예시
X 확장 엔티티
소개
게시물에 네이티브 미디어(외부 링크가 아니라 게시물 UI를 통해 공유된 미디어)가 포함되어 있으면extended_entities 섹션도 존재합니다. 네이티브 미디어(사진, 동영상, GIF)의 경우 여러 가지 이유로 extended_entities가 선호되는 메타데이터 소스입니다. 현재 하나의 게시물에는 최대 네 장의 사진을 첨부할 수 있습니다. entities 메타데이터에는 첫 번째 사진만 포함되지만(2014년까지는 사진을 한 장만 포함할 수 있었습니다) extended_entities 섹션에는 첨부된 모든 사진이 포함됩니다. 네이티브 미디어에서 entities.media 메타데이터의 또 다른 한계점은, 첨부된 미디어가 동영상이거나 애니메이션 GIF인 경우에도 미디어 type이 항상 ‘photo’로 표시된다는 점입니다. 실제 미디어 유형은 extended_entities.media[].type 속성에 지정되며, photo, video, animated_gif 중 하나로 설정됩니다. 이러한 이유로 네이티브 미디어를 다루는 경우에는 extended_entities 메타데이터를 사용하는 것이 가장 좋습니다.
사진, 동영상, 애니메이션 GIF가 첨부된 모든 포스트에는 extended_entities JSON 객체가 포함됩니다. extended_entities 객체에는 media 객체들로 이루어진 단일 media 배열이 포함됩니다(데이터 사전은 entities 섹션을 참조). 해시태그나 링크와 같은 다른 엔티티 type은 extended_entities 섹션에는 포함되지 않습니다. extended_entities 섹션의 media 객체는 entities 섹션에 포함된 것과 구조가 동일합니다.
게시물에는 한 종류의 미디어만 첨부할 수 있습니다. 사진의 경우 최대 네 장까지 첨부할 수 있고, 동영상 및 GIF는 하나만 첨부할 수 있습니다. extended_entities 섹션의 미디어 type 메타데이터는 미디어 유형(‘photo’, ‘video’, ‘animated_gif’)을 정확히 나타내며 최대 4장의 사진을 지원하므로, 네이티브 미디어에 대해서는 우선적으로 사용해야 하는 메타데이터 소스입니다.
포스트 예시와 JSON 페이로드
이 포스트에 대한
entities 섹션은 다음과 같습니다:
extented_entities 섹션은 다음과 같습니다:
네이티브 동영상이 포함된 게시물
video_info 객체는 additional_media_info 객체로 대체됩니다.
additional_media_info에는 게시자가 제공한 title, description, embeddable flag 등 추가 미디어 정보가 포함됩니다. embeddable=false인 경우 동영상 콘텐츠는 X의 공식 클라이언트에서만 이용할 수 있습니다. 이때 페이로드에 포함된 모든 동영상 URL은 X 기반이므로, 사용자는 링크를 클릭해 X 소유 자산에서 동영상을 열 수 있습니다.
이러한 상황에서 extended entities 객체가 어떻게 표시되는지에 대한 예시는 다음과 같습니다:
type이 ‘photo’로 잘못 설정된 entities 섹션입니다. 다시 한 번, ‘video’와 ‘animated_gif’을 포함한 모든 네이티브 미디어 타입에는 extended_entities 섹션을 사용하는 것이 권장됩니다.
애니메이션 GIF가 포함된 게시물
아래는 이 애니메이션 GIF 게시물의 extended entities 메타데이터입니다.
Native Enriched 예시 페이로드
게시물
답글 게시물
확장 게시물
extended_entitites 필드가 포함된 게시물
리트윗
인용 Tweet
리트윗된 인용 Tweet
Enterprise Activity Streams 데이터 객체
Activity Streams 데이터 형식이 X API v2 형식에 어떻게 매핑되는지 더 알아보고 싶으신가요?
주의: 엔터프라이즈 데이터 API에는 Enriched Native 형식을 사용하는 것을 강력히 권장합니다.
Activity Object
데이터 사전
| 속성 | 타입 | 설명 |
| id | string | 게시물에 대한 고유한 IRI입니다. 좀 더 자세히 말하면, “tag”는 스킴이고, “search.x.com”은 해당 스킴의 도메인을 나타내며, 2005는 이 스킴이 정의된 시점입니다. 포스트를 저장할 때는 이를 고유 식별자 또는 기본 키로 사용해야 합니다. “id”: “tag:search.x.com,2005:1050118621198921728” |
| objectType | string | 객체 type이며, 값은 항상 “activity”입니다 “objectType”: “activity” |
| object | object | 게시되었거나 공유된 게시물을 나타내는 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_object | object | 게시물 텍스트가 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_range | array | 게시물 본문이 140자를 초과하는 경우. “display_text_range”: [ 0, 142 ] |
| verb | string | 사용자가 수행하는 작업의 type입니다. 포스트, “post” 리트윗, “share” 삭제된 포스트, “delete” 이 동사(verb)는 Tweet과 실제 Retweet을 구분하는 올바른 방법입니다. 다만, 이는 실제 리트윗에만 적용되며, X 리트윗 기능을 사용하지 않는 수정되거나 인용된 Tweet에는 적용되지 않습니다. AS 동사에 대한 설명은 여기를 참고하세요. 삭제(Deletes)의 경우, 아래 샘플 페이로드에 표시된 것처럼 제한된 수의 필드만 포함된다는 점에 유의하세요. “verb”: “post” |
| postedTime | 날짜 (ISO 8601) | 동작이 발생한 시간입니다. 예를 들어, 게시물이 게시된 시각입니다. “postedTime”: “2018-10-10T20:19:24.000Z” |
| generator | object | 게시물을 게시하는 데 사용된 도구를 나타내는 객체입니다. 여기에는 게시물을 생성한 소스 애플리케이션의 이름(“displayName”)과 링크(“link”)가 포함됩니다. “generator”: “displayName”: “X Web Client”, “link”: “http://x.com” |
| provider | object | 활동 제공자를 나타내는 JSON 객체입니다. 이 객체에는 objectType(“service”), 제공자 이름(“displayName”), 제공자 웹사이트 링크(“link”)가 포함됩니다. “provider”: “objectType”: “service”, “displayName”: “X”, “link”: “http://www.x.com” |
| link | string | 게시물의 퍼머링크입니다. “link”: “http://x.com/API/statuses/1050118621198921728” |
| body | string | 게시물의 텍스트입니다. 리트윗의 경우, 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_range | array | 본문 텍스트 내에서 실제로 화면에 표시되는 게시물 구간을 나타내는 문자 범위를 설명합니다. 앞부분에 @멘션이 있는 포스트는 시작 값이 0보다 크고, 미디어가 첨부된 포스트나 140자를 초과하는 포스트는 long_object 안의 display_text_range로 제공됩니다. “display_text_range”: [ 14, 42 ] or “long_object”: “display_text_range”: [ 0, 277 ]… |
| actor | object | 게시물을 작성한 X 사용자를 나타내는 객체입니다. Actor Object는 X 사용자(X User)를 가리키며, 해당 사용자와 관련된 모든 메타데이터를 포함합니다. 자세한 내용은 Actor Object 세부 정보 |
| inReplyTo | object | 해당되는 경우, 답글을 단 게시물을 참조하는 JSON 객체입니다. 게시물에 대한 링크를 포함합니다. “inReplyTo”: “link”: “http://x.com/GOP/statuses/349573991561838593” |
| location | object | X의 “Place”로, 게시물이 생성된 위치를 나타내는 JSON 객체입니다. 이 객체는 X 플랫폼에서 그대로 전달되는 객체입니다. 자세한 내용은 location object를 참조하세요 |
| twitter_entities | object | X의 데이터 형식에서 urls, 멘션, 해시태그 리스트를 포함하는 entities 객체입니다. Entities에 대해서는 여기에서 X 문서를 참고하세요. 리트윗의 경우, X가 루트 수준에서 추출한 entities 값들을 잘라낼 수 있습니다. 따라서 리트윗에서는 잘린 값이 아닌 전체 값을 사용하고 있는지 확인하기 위해 App에서 object.twitter_entities를 참조해야 합니다. twitter_entities 객체 세부 정보를 참조하세요 |
| twitter_extended_entities | object | X의 네이티브 데이터 형식에서 “media”를 포함하는 객체입니다. twitter_entities 객체의 “media” 필드에 데이터가 있는 모든 게시물에 이 객체가 포함되며, 게시물에 여러 장의 사진이 있을 경우 그 사진들을 모두 포함합니다. 여러 장의 사진이 포함된 게시물의 미디어 정보를 가져오려면 이 위치를 사용하는 것이 올바른 방법입니다. 여러 장의 사진은 “media” 배열 내에서 쉼표로 구분된 JSON 객체들로 표현됩니다. twitter_extended_entities 객체 상세 정보를 참조하세요. |
| gnip | object | 스트림이나 제품에서 활성화된 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 게시물인 경우 * 공동 작성 게시물인 경우 |
추가 게시물 속성
| Attribute | Type | Description |
|---|---|---|
| twitter_lang | string | |
| favoritesCount | int | Nullable. 이 게시물이 X 사용자에게 좋아요를 받은 대략적인 횟수를 나타냅니다. “favoritesCount”:298 |
| retweetCount | int | 이 게시물이 리트윗된 횟수입니다. 예: “retweetCount”:153 |
사용 중단된 속성
| Field | Type | Description |
| geo | object | 게시물이 생성된 지리적 포인트 위치입니다. |
| twitter_filter_level | string | 하위 호환성을 유지하기 위해 남겨 둔 사용 중단 필드입니다. |
중첩된 게시물 활동 객체
{ "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:
Long object
Actor 객체
데이터 사전
| Attribute | Type | Description |
|---|---|---|
| objectType | string | ”objectType”: “person” |
| id | string | 이 작성자의 고유 식별자를 나타내는 문자열입니다. 예: “id:x.com:2244994945” |
| link | ”http://www.x.com/XDeveloeprs | |
| displayName | String | 사용자가 지정한 이름입니다. 반드시 실제 사람의 이름일 필요는 없습니다. 일반적으로 50자까지로 제한되지만, 변경될 수 있습니다. 예: “displayName”: “XDevelopers” |
| preferredUsername | string | 이 사용자가 자신을 나타내는 화면 이름, 핸들, 또는 별칭입니다. 고유하지만 변경될 수 있습니다. 가능한 경우 항상 id를 사용자 식별자로 사용하세요. 일반적으로 최대 15자이지만, 더 긴 이름을 가진 과거 계정도 있을 수 있습니다. 예:“preferredUsername”: “XDevelopers” |
| location | object | ** “location”: “objectType”:** “place”, “displayName”: “127.0.0.1” ** }** |
| links | array | Nullable. 사용자 프로필과 연관해 사용자가 제공한 URL입니다. 예: ** “links”: [ { “href”:** “https://developer.x.com/en/community”, “rel”: “me” ** } ]** |
| summary | string | Nullable. 계정을 설명하는, 사용자가 정의한 UTF-8 문자열입니다. 예: “summary”: “The voice of the #XDevelopers team…“ |
| protected | Boolean | true인 경우, 이 사용자가 자신의 게시물을 보호하도록 선택했음을 나타냅니다. 공개 게시물 및 보호된 게시물에 대해를 참조하세요. 예: “protected”: true |
| verified | Boolean | true인 경우, 사용자가 인증된 계정임을 나타냅니다. 인증된 계정을 참조하세요. 예: “verified”: false |
| followersCount | Int | 이 계정이 현재 보유한 팔로워 수입니다. 일부 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예: “followers_count”: 21 |
| friendsCount | Int | 이 계정이 팔로우하는 사용자 수입니다(“팔로잉”이라고도 함). 일부 과부하 상황에서는 이 필드가 일시적으로 “0”을 나타낼 수 있습니다. 예: “friends_count”: 32 |
| listedCount | Int | 이 사용자가 멤버로 포함된 공개 리스트 수입니다. 예: “listed_count”: 9274 |
| favoritesCount | Int | 이 사용자가 계정 사용 기간 동안 좋아요 표시한 게시물 수입니다. 필드 이름에는 역사적인 이유로 영국식 철자가 사용됩니다. 예: “favourites_count”: 13 |
| statusesCount | Int | 사용자가 발행한 게시물(리트윗 포함) 수입니다. 예: “statuses_count”: 42 |
| postedTime | date | X에서 이 사용자 계정이 생성된 UTC 날짜 및 시간입니다. 예: “postedTime”: “2013-12-14T04:35:55.036Z” |
| image | string | 사용자의 프로필 이미지를 가리키는 HTTPS 기반 URL입니다. 예: “image”: “https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg” |
더 이상 지원되지 않는(사용 중단된) 속성
| Field | Type | Description |
|---|---|---|
| utcOffset | null | 값은 null로 설정됩니다. 여전히 GET account/settings을 통해 사용할 수 있습니다. |
| twitterTimeZone | null | 값은 null로 설정됩니다. 여전히 GET account/settings에서 tzinfo_name 필드로 사용할 수 있습니다. |
| languages | null | 값은 null로 설정됩니다. 여전히 GET account/settings에서 language 필드로 사용할 수 있습니다. |
예시:
Location Object
Location 데이터 사전
| Field | Type | Description |
|---|---|---|
| objectType | string | 더 자세한 정보는 여기를 참조하세요. 예: “objectType”: “place” |
| displayName | string | 위치의 전체 이름입니다. ****“displayName”: “United States” |
| name | string | X의 place JSON 형식에 정의된 위치 이름입니다. |
| link | string | place에 대한 전체 X JSON 표현을 가리키는 링크입니다. “link”: “https://api.x.com/1.1/geo/id/27c45d804c777999.json” |
| geo | object | X에서 제공하는 지리 좌표(geo) 객체입니다. 폴리곤 또는 포인트일 수 있습니다. geo를 참조하세요. |
| countryCode | String | 이 place가 속한 국가를 나타내는 축약형 국가 코드입니다. 예: “countryCode”: “US |
| country | String | 이 place가 속한 국가의 이름입니다. 예: **“country”: **“United States” |
profileLocations 파생 객체
| Field | Type | Description |
| address | object | gnip object 내 profileLocation location 객체에 포함됩니다. profile geo enrichement에 의해 파생된 위치의 주소입니다. 세부 수준(정밀도)은 달라질 수 있습니다. “address”: { ** “country”: “United States”, “countryCode”: “US”, “locality”: “Providence”, “region”: “Rhode Island”, “subRegion”: “Providence County” }** |
| geo | object | gnip object 내 profileLocation location 객체에 포함됩니다. profile geo enrichement에 의해 파생된 위치의 중심점 좌표입니다. ”geo”: { ** “coordinates”: [ -98.5, 39.76 ], “type”: “point” }** |
X 엔티티 객체
twitter_entities는 네이티브 확장 형식의 엔티티 객체와 동일한 형식과 데이터 사전을 갖습니다.
예시:
X extended entities object
twitter_extended_entities는 네이티브 enriched 형식에서 extended_entities 객체에 표시된 것과 동일한 형식과 데이터 사전을 따릅니다.
예시:
Gnip object
gnip 객체는 활성화된 enrichment 기능에 의해 추가된 메타데이터와 해당 activity에 매칭된 규칙 정보를 포함합니다.
데이터 사전
| Field | Type | Description |
| matching_rules | array | 활동이 어떤 규칙과 일치하는지를 나타내는 매칭 규칙 객체의 배열입니다. “matching_rules”: [ ** { “tag”: null, “id”:** 1026514022567358500**, “id_str”:** “1026514022567358464” ** } ]** |
| urls | array | 활동에 포함된 링크들의 배열과 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” ** } ]** |
| profileLocations | array of location objects | Profile 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” ** } ] }** |
예시:
Activity Streams 페이로드 예시
twitter_extended_entities를 포함한 게시물 activity
Tweet 메타데이터 타임라인
소개**
본질적으로 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 일급 객체 로
게시물 메타데이터, 가변성, 업데이트, 최신성
“네이티브” 미디어
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는 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
- 2월 - 게시물 작성 화면에 기본 제공되는 GIF 검색 기능.
- 5월 - “140자로 더 많은 것을 표현하기” (dmw140)가 발표되었으며, 게시물의 140자 길이 제한과 관련해 답글과 첨부 미디어를 처리하는 새로운 방식을 도입할 계획이 제시됨.
- 6월 - 네이티브 동영상 지원.
- 6월 - 인용 리트윗 일반 공개.
- 6월 - 사진에 추가할 수 있는 스티커 도입.
- 9월 - ‘네이티브 첨부(Native attachment)’ 도입으로, 게시물 끝에 오는 URL은 140자 수에 포함되지 않음(“dmw140, part 1”).
2017
- 2월 - X Poll 메타데이터가 게시물 메타데이터에 포함됨(강화된 네이티브 형식에서만 제공).
- 4월 - 회신 대상 계정이 140자 수에 포함되지 않는 ‘Simplified Replies’ 도입(“dmw140, part 2”).
- 5월 - GDPR 업데이트에 따라 user.time_zone이 null로 설정되고, user.utc_offset이 null로 설정되며, user.profile_background_image_url이 기본값으로 설정됨
- 6월 - quoteTweet 서식 변경 반영
- 9월 29일 - 포스트를 수정할 수 있는 기능이 소규모 테스트 그룹에 롤아웃됨. 수정된 게시물 메타데이터가 관련되는 경우 게시물 객체에 추가됨. 여기에는 edit_history 및 edit_controls 객체가 포함됨. 이러한 메타데이터는 수정 기능이 추가되기 전에 생성된 포스트에는 반환되지 않음. 이 메타데이터와 연결된 연산자는 없음. 게시물 수정이 어떻게 작동하는지 더 알아보려면 게시물 편집 기본 사항을 참고하세요.
lang: 연산자가 있습니다. X는 50개가 넘는 언어를 지원하는 언어 분류 서비스를 제공하며, X API는 각 게시물에 대해 생성되는 JSON에 이 메타데이터를 제공합니다. 따라서 게시물이 스페인어로 작성되면 “lang” JSON 속성은 “es”로 설정됩니다. 따라서 lang:es 절을 사용해 필터를 구성하면 스페인어로 분류된 포스트에만 매칭됩니다.
타임라인 정보는 수신한 포스트 데이터를 더 잘 해석하는 데도 도움이 됩니다. 예를 들어, 2008년과 2012년 하계 올림픽 관련 콘텐츠 공유를 연구한다고 가정해 봅시다. 리트윗에 매칭하기 위해 is:retweet 연산자만 적용하면 2008년에는 어떤 데이터도 매칭되지 않을 것입니다. 하지만 2012년에는 수백만 개의 리트윗이 있을 수 있습니다. 이로 인해 2008년에는 리트윗이 사용자 관행이 아니었거나, 아무도 그 올림픽에 대해 리트윗하지 않았다는 잘못된 결론을 내릴 수 있습니다. 리트윗이 2009년에 일급(first-class) 객체가 되었기 때문에, 2008년의 리트윗을 식별하려면 ”RT @” 규칙 절을 추가해야 합니다.
리트윗과 포스트 언어 분류는 모두 오랜 역사와 다양한 제품 세부 정보를 가진 포스트 속성의 예입니다. 아래에서 X 데이터를 매칭하고 이해하는 데 중요한 이러한 속성과 다른 속성 클래스에 대한 더 많은 세부 정보를 설명합니다.
거짓 음성 인식하기
has:videos 연산자로 규칙을 만들면, 그 절은 2015년 이전의 어떤 포스트와도 일치하지 않습니다.
하지만 X에서 동영상 공유는 2015년 훨씬 이전부터 일반적이었습니다. 그전에는 사용자가 다른 곳에 호스팅된 동영상으로 연결되는 링크를 공유했지만, 2015년에 X가 플랫폼에 직접 ‘동영상 공유’ 기능을 새로 구축했습니다. 이러한 과거의 관심 포스트를 찾으려면 url:”youtube.com”과 같은 규칙 절을 추가해야 합니다.
또한 Search API에서는 인덱스를 재구축하면서 일부 메타데이터를 소급 반영(‘backfill’)한 사례도 있습니다. 좋은 예가 주식 종목 기호를 논의할 때 널리 사용되기 시작한 2009년의 cashtag 연산자가 2015년에 도입된 후 Search 인덱스가 재구축되었고, 그 과정에서 심벌 엔티티가 $가 주로 속어에 사용되던 2006년 초반의 포스트까지 포함해, 모든 포스트 본문에서 추출되었습니다. 예: “I hope it $oon!”.
사용 사례에 중요한 게시물 속성 식별 및 필터링
X Profiles
원본 게시물과 리트윗
is:retweet 연산자는 사용자가 리트윗을 포함하거나 제외할 수 있도록 해줍니다. 2009년 8월 이전의 데이터를 가져오는 경우, 사용자는 리트윗 일치(또는 비일치)를 위해 두 가지 전략이 필요합니다. 2009년 8월 이전에는 게시물 텍스트 자체에서 “@RT ” 패턴이 있는지 정확한 구문 일치 방식으로 확인해야 합니다. 2009년 8월 이후 기간에 대해서는 is:retweet 연산자를 사용할 수 있습니다.
게시물 언어 분류
lang: 연산자는 전체 게시물 아카이브에 대해 사용할 수 있습니다. Historical PowerTrack에서는 X의 언어 분류 메타데이터가 2013년 3월 26일부터 아카이브에 포함되어 제공됩니다.
포스트의 지리 정보 참조
- 게시물 메시지에 포함된 지리적 정보
- 사용자가 위치 태그(지오태그)를 지정한 포스트
- 사용자가 계정 프로필에 설정한 ‘home’ 위치