メインコンテンツへスキップ
以下の比較ガイドも参照してください:

X API: エンタープライズ データディクショナリ

はじめに

Enterprise 投稿は、X に関するあらゆるものの最小単位となる基本的な構成要素です。投稿を返すすべての X API は、そのデータを JavaScript Object Notation (JSON) を用いてエンコードして提供します。JSON は、名前付き属性とそれに関連付けられた値からなるキーと値のペアに基づいています。API から取得されるポストオブジェクトには X ユーザーの「ステータス更新」が含まれますが、リツイート、返信、引用ツイートもすべてポストオブジェクトです。あるポストが別のポストとリツイート、返信、引用ツイートとして関連している場合、それぞれはポストオブジェクト内で識別されるか、埋め込まれます。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": "What did the developer write in their Valentine's card?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

利用可能なデータ形式

ご注意:エンタープライズデータ API では、Enriched Native 形式の利用を強く推奨します。 
  • Enriched Native 形式には、poll metadata など 2017 年以降に追加されたすべての新しいメタデータや、reply_count・quote_count などの追加メトリクスが含まれます。
  • Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントは追加されていません。
エンタープライズデータ API は 2 種類の形式でデータを提供します。エンタープライズ形式のうち、標準 v1.1 のネイティブ形式に最も近いのが Enriched Native です。レガシーのエンタープライズデータ形式が Activity Streams で、当時 X および他のソーシャルメディアデータプロバイダー全体で正規化された形式として、もともと Gnip によって実装・利用されていました。この形式は現在も利用可能ですが、X は 2017 年以降、新機能や開発投資を Enriched Native 形式のみに行ってきました。 Enriched Native 形式は名前のとおり、ネイティブな X オブジェクトに加えて、URL アンワインドのメタデータ、profile geo、poll metadata、追加のエンゲージメントメトリクスなど、エンタープライズデータ製品で利用可能な追加エンリッチメントを含みます。  

データ形式ごとのオブジェクト比較

どのような X のユースケースであっても、これらの JSON でエンコードされたポストオブジェクトと属性が何を_表しているか_を理解することは、関心のあるデータシグナルを見つけるうえで極めて重要です。その一助として、各データ形式内の各オブジェクトに特化したページ群が用意されています。 上記の JSON 階層を反映して、各オブジェクトへのリンクは次のとおりです。
Native EnrichedActivity Streams
Link ポストオブジェクトLink アクティビティオブジェクト
Link ユーザーオブジェクトLink アクターオブジェクト
Link Entities オブジェクトLink X entities オブジェクト
Link Extended entities オブジェクト[Link]/x-api/enterprise-gnip-2.0/fundamentals/data-dictionary#x-extended-entities X extended entities オブジェクト
Link Geo オブジェクトLink Location オブジェクト
n/aLink Gnip オブジェクト

パースに関するベストプラクティス

  • X の JSON は UTF-8 文字でエンコードされています。
  • パーサーはフィールドの並び順の違いを柔軟に扱えるようにすべきです。ポストの JSON は順序を持たないハッシュデータとして提供されると想定してください。
  • パーサーは「新しい」フィールドが追加されても問題なく処理できるべきです。
  • JSON パーサーは「欠落している」フィールドに対しても寛容でなければなりません。すべてのコンテキストで、すべてのフィールドが必ずしも出現するとは限らないためです。
  • null が設定されたフィールド、空の集合、フィールドが存在しない状態は、一般的には同一のものとみなして問題ありません。

Enterprise Native Enriched データオブジェクト

Native Enriched ツイートオブジェクト

Native Enriched データ形式が X API v2 形式にどのようにマッピングされるか、さらに詳しく知りたい方は、 比較ガイドをご覧ください: Native Enriched と X API v2 の比較

ポストオブジェクト

エンタープライズ向けデータ製品を利用する場合、データディクショナリの多くはポストデータのネイティブ形式とよく似ていますが、そこに追加のエンリッチされたメタデータが含まれます。ネイティブエンリッチ形式のベースレベルでは、X API v1.1 データ形式 と多くの同じオブジェクト名を共有しています。ポストオブジェクトには、idcreated_attext などの基本的な属性を含む、多数の「ルートレベル」属性があります。ポストオブジェクトには、userentitiesextended_entities といった情報を保持するネストされたオブジェクトも含まれます。ポストオブジェクトには、retweeted_status、quoted_status、extended_tweet など、その他のネストされたポストオブジェクト も含まれます。さらに、ネイティブエンリッチ形式には matching_rules オブジェクトが追加されます。
X データディクショナリ
以下に、これらの「ルートレベル」属性のデータディクショナリと、その子オブジェクトのデータディクショナリへのリンクを示します。
属性説明
created_atStringこのポストが作成された日時 (UTC)。例:

“created_at”: “Wed Oct 10 20:19:24 +0000 2018”
idInt64このポストの一意の識別子を表す整数です。この数値は 53 ビットを超えるため、一部のプログラミング言語では解釈時に問題が発生したり、気づきにくい不具合が生じる可能性があります。この識別子を保存するには、符号付き 64 ビット整数型を使用するのが安全です。安全に識別子を取得するには id_str を使用してください。詳細は X IDs を参照してください。例:

“id”:1050118621198921728
id_strStringこのポストの一意な識別子の文字列表現です。実装では、大きな整数値である id ではなく、こちらを使用する必要があります。例:

“id_str”:“1050118621198921728”
textStringステータスアップデートの実際の UTF-8 テキストです。現在有効と見なされている文字の詳細については、X-text を参照してください。例:

“text”:“表現の幅を広げるため、今後はすべての絵文字を同等にカウントします ― 性別や肌の色のバリエーションを含むものも同様です t… 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_strStringNullable. このオブジェクトが表すポストが返信である場合、このフィールドには元のポストの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_strStringNull 許容。 対象のポストが返信である場合、このフィールドには元のポストの投稿者 ID の文字列表現が含まれます。これは必ずしもポスト内で直接メンションされているユーザーとは限りません。例:

“in_reply_to_user_id_str”:“6253282”
in_reply_to_screen_nameStringNull 許容。 このポストが返信である場合、このフィールドには元のポスト作成者のスクリーンネームが含まれます。例:

“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
}
}
coordinatesCoordinates オブジェクトNull 許容。 ユーザーまたはクライアントアプリケーションが報告した、このポストの地理的位置を表します。内部の座標配列は GeoJSON 形式 (経度が先、その後に緯度) で表現されます。例:

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlace オブジェクト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_idInt64このフィールドは、ポストが引用ツイートの場合にのみ出現します。このフィールドには、引用されたツイートのポストID (整数値) が含まれます。例:

“quoted_status_id”:1050119905717055488
quoted_status_id_strStringこのフィールドは、ポストが引用ツイートである場合にのみ表示されます。これは、引用ツイートのポストIDを文字列として表したものです。例:

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBoolean引用ツイートであるかどうかを示します。例:

“is_quote_status”:false
quoted_statusポストこのフィールドは、そのポストが引用ツイートである場合にのみ含まれます。引用された元のポストを表すポストオブジェクトが格納されます。
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_countIntegerNullable. このポストがXユーザーから「いいね」されたおおよその回数を示します。例:

“favorite_count”:295
entitiesEntitiesポストのテキストから抽出されたエンティティです。詳細は X オブジェクト内のエンティティ も参照してください。例:

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended Entities1 つ以上 4 つ以下のネイティブ写真、または 1 つの動画、または 1 つのアニメーション GIF がポスト内に含まれている場合、そのメディアのメタデータを格納する配列 ‘media’ を含みます。これは引用ツイートにも含まれます。併せて Entities in X Objects も参照してください。例:

“entities”:
<br/> “media”:[]
}
favoritedBooleannull 許容。 このポストが認証済みユーザーによって「いいね」されているかどうかを示します。例:

“favorited”:true
retweetedBooleanこのポストが認証ユーザーによってリツイートされているかどうかを示します。例:

“retweeted”:false
possibly_sensitiveBooleanNullable. このフィールドは、コンテンツがセンシティブとして認識される可能性があることを示します。ポストの投稿者は自身のアカウント設定で「投稿するメディアをセンシティブな内容を含む可能性があるものとしてマークする」を選択でき、その後に作成される各ポストにはこのフラグが設定されます。

これは、X の社内サポート担当者によって判断され、ラベル付けされる場合もあります。

“possibly_sensitive”:false
filter_levelStringこのフィールドは、このポストをストリーミングする際に使用できる filter&#95;level パラメーターの最大値を示します。したがって、値が medium の場合、このポストは nonelowmedium の各ストリームで配信されます。

例:

“filter_level”: “low”
langStringNULL 可能。 存在する場合、ポスト本文の機械的に検出された言語に対応する BCP 47 言語識別子を表し、言語を検出できなかった場合は und になります。 

 例:

“lang”: “en”
edit_historyObjectポストのすべてのバージョンを示す一意の識別子です。編集されていないポストの場合は ID が 1 つだけ存在します。編集履歴のあるポストの場合は、編集の順序を反映するよう昇順に並んだ複数の ID が含まれ、配列の最後の要素が最新バージョンになります。 

ポスト ID を使用して、ポストの以前のバージョンをハイドレートして取得および表示できます。

Example:

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObjectこのフィールドが存在する場合、ポストをあとどのくらいの時間編集できるかと、残りの編集回数を示します。ポストは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。

ポストのIDを使用して、ポストの以前のバージョンをハイドレートして表示できます。

Example:

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBooleanこのフィールドが存在する場合、ポストが公開された時点で編集対象だったかどうかを示します。このフィールドは動的ではなく、ポストが編集可能な時間制限や編集回数の上限に達しても、True から False に切り替わることはありません。次のようなポストの特性がある場合、このフィールドは false になります:

* ポストがプロモーションされている
* ポストに投票 (poll) が含まれている
* ポストが自分自身のスレッドではない投稿への返信である
* ポストがリツイートである (引用ツイートは編集可能である点に注意)
* ポストが nullcast である
* コミュニティポストである
* Superfollow ポストである
* コラボレーションポストである
matching_rulesルールオブジェクトの配列X Search や PowerTrack などの フィルタリング対応 プロダクトに存在します。Post にマッチしたルールに関連付けられた idtag を示します。マッチングルールの詳細はこちらを参照してください。PowerTrack では、1つの Post に複数のルールがマッチする場合があります。 

例:

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
追加のポスト属性
ポストを返す X API (例: GET statuses/lookup エンドポイント) は、これらの追加のポスト属性を含む場合があります。
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存在する場合、このコンテンツが差し止められている、アルファベット大文字の 2 文字の国コード のリストを示します。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 ペイロードには複数のポストオブジェクトが含まれ、それぞれのポストオブジェクトが独自のオブジェクトを持つことがあります。ルートレベルのオブジェクトには、どの種類のアクションが行われたか、つまりリツイートなのか引用ツイートなのかといった情報が含まれ、共有されている「オリジナル」のポストを表すオブジェクトを含むこともあります。拡張ポストには、140 文字を超える拡張オブジェクトがネストされており、これは 2017 年のアップデート時に破壊的変更を避けるために使用されました。各ネストされたオブジェクトのディクショナリについて、以下で説明します。 リツイート リツイートには常に 2 つのポストオブジェクトが含まれます。リツイートされる「オリジナル」のポストは、“retweeted_status” オブジェクト内に含まれます。ルートレベルのオブジェクトはリツイート自体をカプセル化しており、リツイートアクションを行ったアカウントの User オブジェクトと、リツイート時刻を含みます。リツイートは、ポストをフォロワーと共有するためのアクションであり、新しいコンテンツを追加することはできません。また、リツイートに (新たな) 位置情報を付与することもできません。「オリジナル」のポストにジオタグが付与されている場合でも、リツイート側の “geo” および “place” オブジェクトは常に null になります。 拡張ポストの導入以前から、ルートレベルの “entities” オブジェクトは、場合によっては “RT @username ” という文字列がリツイートされるポストメッセージに付加されることにより、切り詰められて不完全になることがありました。また、あるリツイートがさらにリツイートされた場合でも、“retweet_status” はオリジナルのポストを指し続け、中間のリツイートは含まれないことに注意してください。x.com を使ってリツイートを「表示」する場合にも同様の挙動が見られます。リツイート「アクション」に割り当てられた一意の 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": {}
}
引用ツイート
引用ツイートはリツイートとよく似ていますが、新しいポストメッセージが含まれる点が異なります。これらの新しいメッセージには、独自のハッシュタグ、リンク、およびその他の “entities” メタデータを含めることができます。引用ツイートには、投稿したユーザーが共有した位置情報や、GIF、動画、写真などのメディアを含めることもできます。 引用ツイートには、少なくとも 2 つのポストオブジェクトが含まれ、多い場合は 3 つ含まれます。引用されているポスト (それ自体が引用ツイートである場合もあります) は、“quoted_status” オブジェクト内で提供されます。ルートレベルのオブジェクトは引用ツイート自体をカプセル化しており、共有アクションを行っているアカウントの User オブジェクトと、引用ツイートの時刻を含みます。 引用ツイートには、‘Post’ ユーザーインターフェースを使用して、写真、GIF、または動画を追加できるようになったことに注意してください。外部ホストのメディアへのリンクが引用ツイートメッセージに含まれている場合、それらはルートレベルの “entities.urls” で記述されます。引用ツイートに添付されたメディアは、ルートレベルの “extended_entities” メタデータに格納されます。 引用ツイートが最初に提供開始された際には、短縮リンク (t.co URL) が「元の」ポストメッセージの末尾に追加され、ルートレベルの “text” フィールドに含まれていました。さらに、その t.co URL のメタデータは、ルートレベルの ‘entities.urls’ 配列に含まれていました。2018 年 5 月に、これを変更し、引用されたツイートへの短縮 t.co URL はルートレベルの “text” フィールドには含まれないようにしました。次に、引用されたツイートのメタデータ も “entities.urls” メタデータには含まれないようにしました。その代わりに、引用されたツイートの URL メタデータは、ルートレベル (またはトップレベル) の新しい “quoted_status_permalink” オブジェクト内に配置され、“quoted_status” オブジェクトと同じ階層レベルになります。 以下に、この元のフォーマットを使用した引用ツイートの構造例を示します。
{
	"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
Extended Posts を記述する JSON は、2017 年 11 月に 280 文字の投稿が導入された際に追加されました。投稿 JSON は、これらのより長いメッセージを扱えるように拡張されましたが、同時に、これらの基本的な X オブジェクトをパースしている既存の何千ものアプリケーションに影響を与えないよう配慮されています。完全な後方互換性を提供するために、元の 140 文字の ‘text’ フィールドと、そこからパースされる entities オブジェクトは保持されました。140 文字を超える投稿の場合、ルートレベルの ‘text’ フィールドは切り詰められ、不完全になります。ルートレベルの ‘entities’ オブジェクトには、含まれているハッシュタグやリンクなど、‘text’ メッセージからパースされた主要なメタデータの配列が含まれるため、これらの配列も不完全になります。例えば、投稿メッセージが 200 文字であり、その末尾にハッシュタグが含まれている場合、従来のルートレベルの ‘entities.hashtags’ 配列にはそれが含まれません。 より長い投稿メッセージと完全な entities メタデータを保持するために、新たに ‘extended_tweet’ フィールドが導入されました。“extended_tweet” オブジェクトは、140 文字を超える場合に完全で切り詰められていない投稿メッセージを含む “full_text” フィールドを提供します。“extended_tweet” オブジェクトには、ハッシュタグ、リンク、メンションなどの完全な配列を持つ “entities” オブジェクトも含まれます。 Extended Posts は、ルートレベルにある “truncated” ブール値で識別されます。true (“truncated”: true) の場合、ルートレベルのフィールドの代わりに “extended_tweet” のフィールドをパースする必要があります。 下の JSON 例では、ルートレベルの “text” フィールドが切り詰められており、投稿メッセージに 3 つのハッシュタグが含まれているにもかかわらず、ルートレベルの “entities.hashtags” 配列が空であることに注意してください。これは Extended Post であるため、“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 オブジェクト

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 は一意ですが、変更される可能性があります。可能な限りユーザー識別子として 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”]
urlStringNullable . ユーザーが自分のプロフィールに関連付けて指定した 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_atStringユーザーアカウントが X 上で作成された日時 (UTC) 。例:

“created_at”: “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlStringユーザーがアップロードしたプロフィールバナーの標準的な Web 表示用の 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
	}

ネイティブ拡張ジオオブジェクト

投稿には位置情報を関連付けることができ、その結果「ジオタグ付き」のポストが生成されます。ポストの位置情報は、X のユーザーインターフェースを使用するか、API を使用してポストを投稿する際に割り当てることができます。ポストの位置情報は、正確な「ポイント」位置である場合も、会場から地域全体までの広い範囲を示す「バウンディングボックス」を持つ X Place である場合もあります。 ポストに関連付けられた位置情報を記述するために使用される「ルートレベル」の JSON オブジェクトは 3 種類あります: placegeo、および coordinates です。  さらに、ネイティブ拡張フォーマットには、ユーザーオブジェクト内に profile geo enrichmentderived location が含まれます。 place オブジェクトは、ポストが Place でジオタグ付けされている場合には必ず存在します。Place は、対応する地理座標を持つ、特定の名前付き位置情報です。ユーザーが自分のポストに位置情報を割り当てることを選択すると、候補となる X Place のリストが提示されます。API を使用して投稿する場合は、投稿時に place_id を指定することで X Place を添付できます。Place に関連付けられたポストは、必ずしもその場所から発信されているとは限らず、その場所「について」のポストである可能性もあります。 geo および coordinates オブジェクトは、ポストに 正確な位置 が割り当てられている場合にのみ (null ではなく) 存在します。正確な位置が指定されている場合、coordinates オブジェクトはその地理座標を表す [long, lat] 配列を提供し、その位置に対応する X Place が割り当てられます。

Place データディクショナリ

FieldTypeDescription
idStringこの場所を表す ID。整数ではなく文字列として表現される点に注意してください。例:

“id”:“01a9a39529b27f36”
urlStringこの place に関する追加メタデータが配置されている場所を表す URL。例:

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeStringこの place が表す位置の種類。例:

“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] 形式の配列です。点は境界ボックスごとに 1 つの配列にグループ化されます。境界ボックスの配列は、ポリゴン表記との互換性を保つために、さらに 1 つの配列でラップされます。例:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringcoordinates プロパティに格納されているデータの type。境界ボックスの場合は「Polygon」、正確な座標を持つポストの場合は「Point」になります。例:

“type”:“Polygon”

Geo オブジェクト データディクショナリ

FieldTypeDescription
coordinatesCollection of Floatポストの位置の経度と緯度を、[latitude, longitude] という形式のコレクションで表したものです。例:

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringcoordinates プロパティに格納されているデータの type です。ポストの座標フィールドの場合は「Point」になります。例:

“type”: “Point”
Coordinates オブジェクト データディクショナリ
FieldTypeDescription
coordinatesCollection of Floatポストの位置の経度と緯度を、[longitude, latitude] という形式のコレクションで表したものです。例:

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringcoordinates プロパティに格納されているデータの type です。ポストの座標フィールドの場合は「Point」になります。例:

“type”: “Point”

導出された位置情報

FieldTypeDescription
derivedlocations objectプロフィールの geo エンリッチメントから導出された位置情報

“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": {

    }
  }
}
データディクショナリ:エンタープライズ

X エンティティ

このページ内の項目 イントロダクション Entities オブジェクト   - Hashtag オブジェクト   - Media オブジェクト   - Media size オブジェクト   - URL オブジェクト   - User mention オブジェクト   - Symbol オブジェクト   - Poll オブジェクト リツイートと引用ツイートの詳細 ユーザーオブジェクト内の Entities ダイレクトメッセージ内の Entities 次のステップ

はじめに

entities は、X 上にポストされたコンテンツに関するメタデータおよび追加的なコンテキスト情報を提供します。entities セクションには、ポストに含まれる一般的な要素の配列が含まれます。具体的には、ハッシュタグ、ユーザーへのメンション、リンク、株式ティッカー (symbols) 、X の投票、添付メディアなどです。これらの配列によって、X がテキスト本文を実質的にあらかじめ前処理 (パース) しているため、開発者が投稿を取り込む際に便利です。ポスト本文の中からこれらの entity を明示的に検索・抽出する必要はなく、パーサーはこの JSON セクションを直接参照するだけで済みます。 パースを容易にするだけでなく、entities セクションは有用な「付加価値」のあるメタデータも提供します。たとえば、Enhanced URLs enrichment を使用している場合、URL メタデータには完全に展開された URL に加えて、関連するウェブサイトのタイトルや説明が含まれます。別の例として、ユーザーへのメンションがある場合、entities メタデータには数値のユーザー ID が含まれており、多くの X API にリクエストを送信する際に役立ちます。 すべてのポストの JSON ペイロードには entities セクションが含まれており、hashtagsurlsuser_mentionssymbols 属性の最小セットが、これらの entity がポストメッセージの一部でない場合でも必ず存在します。たとえば、本文が「Hello World!」でメディアが添付されていないポストの JSON を確認すると、entity 配列に要素が 0 件の状態で、次のような内容が含まれていることが分かります。
"entities": {
        "hashtags": [
        ],
        "urls": [
        ],
        "user_mentions": [
        ],
        "symbols": [
        ]
      }
注意:
  • media と polls エンティティは、その種類のコンテンツがポストに含まれている場合にのみ返されます。
  • ネイティブメディア (写真、動画、GIF) を扱う場合は、Extended Entities object を使用することを推奨します。

Entities オブジェクト

entitiesextended_entities セクションはどちらも、エンティティ オブジェクト の配列で構成されています。以下では、これらそれぞれのエンティティ オブジェクトについて説明し、オブジェクトの属性名、type、簡潔な説明を示したデータディクショナリを記載しています。また、どの PowerTrack オペレーターがこれらの属性にマッチするかを示し、JSON ペイロードのサンプルも含めます。 投稿内で一般的に見られるエンティティ (ハッシュタグ、リンク、ユーザーへの言及など) の集合です。この entities オブジェクトには media 属性も含まれていますが、entiites セクションでの実装が完全に正確なのは、写真が 1 枚だけの投稿に対してのみです。複数の写真、動画、またはアニメーション GIF を含むすべての投稿については、extended_entities セクションを参照してください。

Entities データディクショナリ

entities オブジェクトは、ほかのエンティティのサブオブジェクト配列を保持するコンテナです。entities の構造を示したあとで、これらのサブオブジェクト向けのデータディクショナリと、それらにマッチする Operators を提示します。
フィールドtype説明
hashtagsHashtag オブジェクトの配列 (Hashtag Objects)ポスト本文から抽出されたハッシュタグを表します。例:


“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 エンリッチメント機能が有効になっていない場合) :


“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 エンリッチメント機能が有効になっている場合) :

“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 Objects の配列ポストのテキストに含まれるシンボル ($cashtag など) を表します。例:


“symbols”: [

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

]
pollsPoll Objects の配列ポストに含まれる X の投票を表します。例:

“polls”: [

“options”: [

“position”: 1,
“text”: “ドキュメントを一度読んだ。”
,

“position”: 2,
“text”: “ドキュメントを二度読んだ。”
},

“position”: 3,
“text”: “ドキュメントを何度も繰り返し読んだ。”
}
],
“end_datetime”: “Thu May 25 22:20:27 +0000 2017”,
“duration_minutes”: 60

]

Hashtag object

entities セクションには、ポスト本文に含まれる各ハッシュタグごとに 1 つのオブジェクトを要素とする hashtags 配列が含まれ、ハッシュタグが存在しない場合は空配列が含まれます。 PowerTrack の # 演算子は、text 属性に対するマッチングに使用されます。has:hashtags 演算子は、配列に 1 つ以上の要素が存在する場合にマッチします。
FieldTypeDescription
indicesArray of Intポスト本文内でハッシュタグが開始および終了する位置のオフセットを示す整数の配列です。1 つ目の整数はポスト本文の文字列内における # 文字の位置を表します。2 つ目の整数はハッシュタグの直後の最初の文字の位置を表します。したがって 2 つの数値の差は、ハッシュタグ名の長さに 1 (「#」文字の分) を加えた値になります。例:

“indices”:[32,38]
textString先頭の「#」文字を除いたハッシュタグ名。例:

“text”:“nodejs”

Media object

entities セクションには、ポストに何らかのメディアオブジェクトが「添付」されている場合、1 つのメディアオブジェクトを格納した media 配列が含まれます。ネイティブメディアが添付されていない場合、entities 内に media 配列は存在しません。次の理由から、ポストのネイティブメディアを処理する際は extended_entities セクションを使用する必要があります。
  • メディアの type は、動画や GIF がポストに添付されている場合でも常に「photo」を示します。
  • 最大 4 枚の写真を添付できますが、entities セクションには最初の 1 枚しか一覧表示されません。
has:media オペレーターは、この配列に要素が含まれている場合に一致します。
フィールド説明
display_urlStringクライアントに表示されるメディアの URL。例:

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_urlStringdisplay_url を展開したバージョンです。メディア表示ページへのリンクです。Example:

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt64メディアのIDを64ビット整数で表した値。例:

“id”:114080493040967680
id_strStringメディアのIDを文字列として表したもの。例:

“id_str”:“114080493040967680”
indicesInt 配列URL がポスト本文内のどの位置からどの位置まで現れるかを示す整数オフセットの配列です。最初の整数は、ポスト本文内で URL の最初の文字がある位置を表します。2 番目の整数は、URL の直後に現れる最初の URL 以外の文字の位置 (または、URL がポスト本文の末尾にある場合は文字列の末尾) を表します。例:

“indices”:[15,35]
media_urlStringアップロードされたメディアファイルを直接参照する http:// URL。例:

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

ダイレクトメッセージ内のメディアの場合、media_urlmedia_url_https と同じ https URL であり、OAuth 1.0a を使用してユーザーのアクセストークンでリクエストに署名してアクセスする必要があります。

認証済みの x.com セッション経由で画像にアクセスすることはできません。最近のこれらの変更への対応方法については、 this page を参照してください。 

これらの画像を Web ページに直接埋め込むことはできません。

利用可能な sizes に基づいて、media_url_https などの写真の URL をどのようにフォーマットするかについては、Photo Media URL formatting を参照してください。
media_url_httpsStringhttps ページに埋め込むための、アップロードされたメディアファイルを直接指す https:// URL。例:

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

ダイレクトメッセージ内のメディアについては、OAuth 1.0A を用いてユーザーのアクセストークンでリクエストに署名することで、media_url_https にアクセスする必要があります。

認証済みの x.com セッション経由で画像にアクセスすることはできません。最近の変更への対応方法については this page を参照してください。 

これらの画像をウェブページに直接埋め込むことはできません。

利用可能な 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_strInt64null 許容。元々は別のポストに関連付けられていたメディアを含む投稿の場合、この文字列型のIDは元のポストを指します。例:

“source_status_id_str”: “205282515685081088”
typeStringアップロードされたメディアの種別。取り得る値としては、photo、video、animated_gif があります。例:

“type”:“photo”
urlStringメディアリンクのラップされた URL です。これは、生のポストテキストに直接埋め込まれている URL と、indices パラメータの値に対応するものです。例:

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

メディアサイズオブジェクト

ネイティブメディア (写真、動画、GIF) を含むすべての投稿には、高さと幅のピクセル数を持つ「thumb」「small」「medium」「large」のサイズのセットが含まれます。写真およびプレビュー画像のメディア URL については、写真メディア URL の書式設定 で、異なるサイズの写真メディアを読み込むための URL の構成方法を説明しています。

Sizes object

FieldTypeDescription
thumbSize Objectメディアのサムネイルサイズ版に関する情報。例:

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

サムネイルサイズの写真メディアは、150x150 の境界を fill で満たし、クロップされた状態に制限されます。
largeSize Objectメディアのラージサイズ版に関する情報。例:

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

スモールサイズの写真メディアは、680x680 の境界内に fit するように制限されます。
mediumSize Objectメディアのミディアムサイズ版に関する情報。例:

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

ミディアムサイズの写真メディアは、1200x1200 の境界内に fit するように制限されます。
smallSize Objectメディアのスモールサイズ版に関する情報。例:

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

ラージサイズの写真メディアは、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 は次の 3 つの要素で構成されます。
Base URLBase URL は、拡張子を除いたメディア URL です。

例:

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

このとき Base URL は次のようになります。

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
FormatFormat は、画像がどの種類の写真としてフォーマットされているかを表します。指定可能な format は jpg または png で、メディア URL の拡張子として提供されます。

例:

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

このとき format は jpg となります。
NameName は、読み込むサイズのフィールド名です。

例:


 “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 となります。
これら 3 つの要素 (Base URL、Format、Name) を組み合わせて、読み込む写真メディア URL を構成します。この方法で画像を読み込むフォーマットには、legacymodern の 2 種類があります。すべての画像読み込みは legacy フォーマットの使用をやめ、modern フォーマットを使用する必要があります。modern フォーマットを使用すると呼び出し側の CDN ヒット率が向上し、その結果として、データセンターでメディアを生成して読み込む必要が生じにくくなり、読み込みレイテンシが改善されます。
レガシー形式レガシー形式は非推奨です。写真メディアの読み込みはすべてモダン形式へ移行する必要があります。

<base_url>.<format>:<name>

例:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
モダン形式写真を読み込むためのモダン形式は、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 オブジェクト

entities セクションには、ポスト本文内に含まれるすべてのリンクごとに 1 つのオブジェクトを要素として持つ urls 配列が含まれ、リンクが存在しない場合は空の配列になります。 has:links 演算子は、配列に少なくとも 1 つ要素がある場合にマッチします。url: 演算子は expanded_url 属性にマッチするために使用されます。Expanded URL enrichment を使用している場合、url: 演算子は unwound.url (完全に展開された URL) 属性にマッチするために使用されます。Exhanced URL enrichment を使用している場合、url_title: および url_decription: 演算子は、それぞれ unwound.titleunwound.description 属性にマッチするために使用されます。
FieldTypeDescription
display_urlStringポスト内で貼り付け/入力された URL。例:

“display_url”:“bit.ly/2so49n2”
expanded_urlStringdisplay_url の展開版。例:

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of Intポスト本文内で URL が開始および終了する位置を表す整数の配列。最初の整数は、ポスト本文内で URL の最初の文字がある位置を表します。2 つ目の整数は、URL の末尾の直後にある、URL ではない最初の文字の位置を表します。例:

“indices”:[30,53]
urlStringラップされた URL。生のポスト本文内に直接埋め込まれた値と、indices パラメータの値に対応します。例:

“url”:“https://t.co/yzocNFvJuL
Expanded および/または Enhanced URL エンリッチメントを使用している場合、次のメタデータが unwound 属性の下に含まれます:
FieldTypeDescription
urlStringポストに含まれるリンクの、完全に展開されたバージョン。例:

“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 セクションには、ポスト本文に含まれるユーザー言及ごとに 1 つのオブジェクトを要素とする user_mentions 配列が含まれます。ユーザー言及が存在しない場合は、空の配列になります。 PowerTrack の @ 演算子は、screen_name 属性にマッチさせるために使用されます。has:mentions 演算子は、その配列に少なくとも 1 件の要素がある場合にマッチします。
FieldTypeDescription
idInt64言及されたユーザーの id (整数) 。例:

“id”:6253282
id_strString言及されたユーザーの id (文字列) 。例:

“id_str”:“6253282”
indicesArray of Intポスト本文内でユーザー参照が開始および終了する位置 (オフセット) を表す整数の配列です。最初の整数はユーザー言及の「@」文字の位置を表します。2 つ目の整数は、ユーザー言及に続く最初の非スクリーンネーム文字の位置を表します。例:

“indices”:[4,15]
nameString参照されているユーザーの表示名。例:

“name”:“API”
screen_nameString参照されているユーザーのスクリーンネーム。例:

“screen_name”:“api”

Symbol オブジェクト

entities セクションには、ポスト本文に含まれる各 $cashtag ごとに 1 つのオブジェクトを格納した symbols 配列が含まれ、シンボルが存在しない場合は空の配列が含まれます。 PowerTrack の $ 演算子は text 属性に対してマッチさせるために使用されます。has:symbols 演算子は、配列内に 1 件以上の要素がある場合にマッチします。
FieldTypeDescription
indicesArray of Intポストのテキスト内でシンボル / cashtag が開始および終了する位置を示す整数の配列です。最初の整数は、ポストテキスト文字列内の 文字の位置を表します。2番目の整数は、cashtagの直後の最初の文字の位置を表します。したがって、2つの数値の差は、cashtag名の長さに1( 文字の位置を表します。2 番目の整数は、cashtag の直後の最初の文字の位置を表します。したがって、2 つの数値の差は、cashtag 名の長さに 1 (「」文字分) を加えたものになります。例:

“indices”:[12,17]
textString先頭の「$」文字を除いた cashtag の名称です。例:

“text”:“twtr”

投票オブジェクト

entities セクションには、ポストに投票が含まれている場合、単一の poll オブジェクトを要素とする polls 配列が含まれます。投票が含まれていない場合、entities セクション内に polls 配列は存在しません。 これらの投票メタデータは、次の Enterprise API でのみ利用可能である点に注意してください。
フィールド説明
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 と Quote Tweet の詳細

X API の観点では、Retweet と Quote Tweet は、元のポストを埋め込みオブジェクトとして含む、特殊な種類の投稿です。したがって Retweet と Quote Tweet オブジェクトは、子である ‘original’ ポストを持つ親となり (そのためサイズは 2 倍になります) 。Retweet にはトップレベルに “retweeted_status” オブジェクトがあり、Quoted Tweet には “quoted_status” オブジェクトがあります。整合性のため、これらトップレベルの Retweet および Quote Tweet オブジェクトにも text プロパティとそれに対応する entities が存在します。ただし、トップレベルの entities は、埋め込まれた ‘original’ 側の entities とは異なる場合があります。Retweet の場合、新しいテキストは元のポスト本文の前に付加されます。引用ポストの場合、新しいテキストはポスト本文の後ろに付加されます。 一般的には、retweeted_status が存在する場合は常に、元のポストから text、entities、元の投稿者、および日付を取得することがベストプラクティスです。例外は、追加された引用部分に含まれる X のエンティティを取得する場合です。詳細とヒントについては、以下を参照してください。

リツイート

リツイートに関する重要な点として、ポストには新たな X の entities を追加することができません。ユーザーはリツイート時にハッシュタグや URL、その他の詳細を追加できません。ただし、リツイート (トップレベル) の text 属性は、元のポストのテキストの先頭に「RT @username: 」を付与して構成されます。   場合によっては、特にユーザー名が長いアカウントでは、これら新しい文字と元のポスト本文を組み合わせることで、元のポストのテキスト長制限である 140 文字を簡単に超えてしまうことがあります。140 文字ベースの表示および保存のサポートを維持するために、トップレベルの本文はポスト本文の末尾を切り詰め、省略記号 (「…」) を追加します。その結果、元のポスト末尾に位置していた一部のトップレベルの 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 も一部が切り詰められたため、これらはトップレベルの entities から欠落しています。また、text フィールドの先頭に付与される「RT @floodsocial: 」プレフィックスにより、追加の user_mentions トップレベル entity が存在することにも気付くでしょう。 しかし、retweeted_status 内のポストテキストと entities は、切り詰めや誤った entities なしに元のポストを完全に反映しています。そのため、リツイートについては、ネストされた retweeted_status オブジェクト に依存することを推奨します。

引用ツイート

引用ツイートは 2016 年に導入されました。リツイートと異なり、ポストを「引用」すると、共有されたポストに対して、その「上に」新しいコンテンツを追加する形になります。この新しいコンテンツには、新しいテキスト、ハッシュタグ、メンション、URL など、元のポストが持ちうるほとんどすべての要素を含めることができます。 引用ツイートにはネイティブメディア (写真、動画、GIF) を含めることができ、その情報は entities オブジェクトの下に現れます。 X の entities は追加できるため、引用部分の entities は元の entities とは異なることがよくあります。 次の例では、新しい URL とハッシュタグが引用ツイートの末尾に配置されています。 このポスト 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 は、切り捨てや誤った entities もなく、引用ツイートを完全に反映しています。そのため、引用ツイートでは、ネストされた _extended_tweet_ オブジェクトに依拠することを推奨します。

user オブジェクトの Entities

User オブジェクトの Entities は、ユーザーが定義したプロフィールの URL および description フィールド内に含まれる URL を表します。これらは hashtags や user_mentions を表すものではありません。ポストの entities と異なり、user entities は親オブジェクト内の複数のフィールドに適用される可能性があります。その曖昧さを解消するために、どのフィールドにエンティティ化された URL が含まれているかを示す、url および description という親ノードが用意されています。 この例では、user の url フィールドには t.co リンクが含まれており、レスポンスの entities/url/urls[0] ノード内で完全に展開されています。ユーザーの description には、t.co でラップされた 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 オブジェクト ツイートと JSON ペイロードの例   - ネイティブ写真 4 枚を含むツイート   - ネイティブ動画を含むツイート   - アニメーション GIF を含むツイート 次のステップ

はじめに

あるポストにネイティブメディア (どこかへのリンクではなく、ポストのユーザーインターフェースを通じて共有されるメディア) が含まれている場合、extended&#95;entities セクションも含まれます。ネイティブメディア (写真、動画、GIF) を扱う場合、いくつかの理由から extended&#95;entities が推奨されるメタデータソースとなります。現在、1つのポストには最大4枚の写真を添付できます。entities メタデータには最初の1枚の写真しか含まれません (2014年までは1枚のみ添付可能でした) が、extended&#95;entities セクションには添付されたすべての写真が含まれます。ネイティブメディアに関しては、entities.media メタデータには別の制約があり、添付されたメディアが動画やアニメーションGIFである場合でも、メディアの種別が常に「photo」となってしまう点があります。実際のメディア種別は extended&#95;entities.media[].type 属性で指定され、photovideo、または animated_gif のいずれかが設定されます。これらの理由から、ネイティブメディアを扱う場合は extended&#95;entities メタデータを利用することを推奨します。 写真、動画、アニメーションGIFが添付されているすべてのポストには、extended_entities JSON オブジェクトが含まれます。extended_entities オブジェクトには、media オブジェクトからなる単一の media 配列が含まれます (データディクショナリについては entities セクションを参照してください) 。ハッシュタグやリンクなど、その他のエンティティタイプは extended_entities セクションには含まれません。extended_entities セクション内の media オブジェクトは、entities セクションに含まれるものと構造的に同一です。 ポストには1種類のメディアのみ添付できます。写真については最大4枚まで添付できます。動画およびGIFについては1つのみ添付できます。extended_entities セクション内のメディア type メタデータはメディア種別 (「photo」「video」「animated_gif」) を正しく示し、最大4枚の写真をサポートするため、ネイティブメディア向けの推奨メタデータソースとなっています。
{
      "extended_entities": {
        "media": [

        ]
      }
    }

投稿例とJSONペイロード

以下に、いくつかの投稿例と、それらに付随する entities メタデータを示します。 4枚のネイティブ写真を含むポスト ハッシュタグ、ユーザー名のメンション、キャッシュタグ、URL、および4枚のネイティブ写真を含むポスト:
このポストの 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": "雨の中でのツイート、パート1 - Gnipブログ - ソーシャルデータとデータサイエンスブログ",
              "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」ペイロードにのみ、最大 4 枚のネイティブ写真が含まれます。配列内の先頭の写真が、拡張されていない 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 には、titledescriptionembeddable 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: Tomlinson TD from McCown",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
前述のとおり、ここでは type が誤って「photo」に設定されている entities セクションを示しています。繰り返しになりますが、videoanimated&#95;gif を含むすべてのネイティブメディア type には、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"
                }
              ]
            }
          }
        ]
      }
    }

ネイティブエンリッチされたペイロード例

ポスト

{
	"created_at": "Fri Sep 18 18:36:15 +0000 2020",
	"id": 1307025659294675000,
	"id_str": "1307025659294674945",
	"text": "新しいTweetペイロード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ペイロードを理解する",
				"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 がXデータを使用してCOVID-19健康危機を理解する方法をご覧ください 📊\n\nhttps://t.co/1tdA8uDWes",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Webアプリ</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": "ペンシルベニア大学医学部デジタルヘルスセンター",
				"description": "ペンシルベニア大学医学部デジタルヘルスセンターは、COVID-19に関するXマップを作成しました。このマップには、感情分析、報告された症状、州別データ、COVID-19アウトブレイクに関する国境データを詳述したチャートが含まれています。さらに、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開発者はツイートへの返信を非表示にできます - 開発者が… 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開発者はツイートへの返信を非表示にできます - #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 における返信非表示エンドポイントの一般提供を発表いたします。返信非表示エンドポイントを使用すると、ユーザーがツイートへの返信を非表示または再表示できるツールを構築できます。ユーザーは、不適切、気を散らす、誤解を招くコメントへの注目を減らしたり、会話をより魅力的にするなど、さまざまな理由で返信を管理します。このエンドポイントを通じて、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: I built an Alexa Skill for X using APL that allows you to view Tweets and Trends on the echo show!\n\nCheck it out her…",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</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": "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 18 19:01:58 +0000 2020",
		"id": 1229843515603144700,
		"id_str": "1229843515603144704",
		"text": "I built an Alexa Skill for X using APL that allows you to view Tweets and Trends on the echo show!\n\nCheck it… https://t.co/RP9NgltX7i",
		"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": 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": "I built an Alexa Skill for X using APL that allows you to view Tweets and Trends on the echo show!\n\nCheck it out here 👇\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
	}]
}

引用ツイート

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "As planned, the Labs v2 endpoints referenced below have now been retired. Please let us know in the forums if you h… 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": "👋 Friendly reminder that X Developer Labs v2 hide replies and recent search will be retired next Monday, Nove… 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": "👋 Friendly reminder that X Developer Labs v2 hide replies and recent search will be retired next Monday, November 16! We encourage you to migrate to the new hide replies and recent search endpoints now available in the v2 #XAPI. Details: 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": "Retiring Labs v2 recent search and hide replies",
						"description": "As we said in our Early Access and hide replies announcements, the following X Developer Labs v2 endpoints will be retired on November 16th. Labs v2 recent search Labs v2 hide replies If called, these endpoints will respond with an HTTP 410 status and return no data. Based on your feedback from Labs, we incorporated corresponding functionality into the X API v2. The relevant documentation can be found using the links below. Click here to enroll in v2 access if you haven’t already..."
					},
					"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
	}]
}

引用ツイートのリツイート

{
 	"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": "#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 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 • ロンドン在住のスイス人 • 観葉植物の母 • @_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 • ロンドン在住のスイス人 • 観葉植物の母 • @_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 #Pythonチュートリアル \n\nこちらをご覧ください 👇\nhttps://t.co/sOjXW4YhbN",
 				"display_text_range": [
 					0,
 					160
 				],
 				"entities": {
 					"hashtags": [{
 							"text": "DEVcommunity",
 							"indices": [
 								85,
 								98
 							]
 						},
 						{
 							"text": "Pythonチュートリアル",
 							"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": "Pythonチュートリアル",
 						"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 #Pythonチュートリアル @XDev @XAPI https://t.co/dXrJYvn3hY",
 			"display_text_range": [
 				0,
 				229
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							176,
 							189
 						]
 					},
 					{
 						"text": "Pythonチュートリアル",
 						"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 #Pythonチュートリアル… 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 • ロンドン在住のスイス人 • 観葉植物の母 • @_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": "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
 			],
 			"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 形式には、poll metadata など、2017 年以降に追加されたすべての新しいメタデータや、reply_count や quote_count などの追加メトリクスが含まれます。
  • Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントで更新されていません。

Activity Object

Activity Streams は、Gnip が作成した X の元のデータ形式のオブジェクトスキーマ版であり、サードパーティの Activity Base Schema (詳細はこちら) を用いて、ポストデータおよびその他のソーシャルメディアデータの「形式を正規化」するためのものです。投稿は Activity Streams スキーマに正規化され、note、person、place、service の各オブジェクト type がネストされたオブジェクトとして含まれます。ポストには、リツイートや twitter_quoted_statuslong_object を含む、その他のネストされたポストの activity オブジェクトを持たせることができます。 ベースレベルのオブジェクト type である “activity” は、ネイティブ enriched 形式のポストのベースレベルオブジェクトに似ています。Activity Streams 形式のペイロード例はこちらで確認できます。

データディクショナリ

以下では、これらの「ルートレベル」の「activity」属性に対するデータディクショナリと、その子オブジェクトのデータディクショナリへのリンクを示します。
属性説明
id文字列ポストの一意の IRI です。さらに詳しくいうと、“tag” はスキーム、“search.x.com” はそのスキームのドメイン名を表し、2005 はそのスキームが策定された年を示します。
投稿を保存する際には、これを一意の識別子または主キーとして使用してください。
“id”: “tag:search.x.com,2005:1050118621198921728”
objectType文字列オブジェクトの種類で、常に “activity” に設定されます
“objectType”: “activity”
objectオブジェクト投稿または共有されるポストを表すオブジェクト。
リツイートの場合、ここにはこのスキーマで説明されている関連フィールドを含む完全な「activity」が含まれます。
元のポストの場合、ここにはここで説明されているフィールドを持つ「note」オブジェクトが含まれます。
“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オブジェクトポスト本文が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配列ポストのテキストが 140 文字を超える場合


“display_text_range”: [
0,
142
]
verb文字列ユーザーが実行しているアクションの種類を表します。
投稿, “post”
リツイート, “share”
削除された投稿, “delete”
この verb によって、ツイートと真のリツイートを正しく区別できます。ただし、これは真のリツイートにのみ適用され、X のリツイート機能を使用しない編集済みツイートや引用ツイートには適用されません。Activity Streams (AS) の verbs の説明については
こちらを参照してください
削除 (Delete) の場合、下記のサンプルペイロードに示すように、含まれるフィールドは一部に限られる点に注意してください。
“verb”: “post”
postedTime日付 (ISO 8601 形式)アクションが発生した時刻。例えば、ポストが投稿された時刻です。


“postedTime”: “2018-10-10T20:19:24.000Z”
generatorオブジェクトポストを投稿するために使用されたアプリケーション (ユーティリティ) を表すオブジェクトです。これには、ポストを生成したソースアプリケーションの名前 (“displayName”) とリンク (“link”) が含まれます。
“generator”:
“displayName”: “X Web Client”,
“link”: “http://x.com
providerオブジェクトアクティビティのプロバイダーを表す JSON オブジェクトです。これには objectType (“service”) 、プロバイダー名 (“displayName”) 、およびプロバイダーの Web サイトへのリンク (“link”) が含まれます。
“provider”:

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
link文字列ポストへのパーマリンク。
“link”: “http://x.com/API/statuses/1050118621198921728
body文字列ポストの本文。

リツイートでは、ルートレベルの body の値が、先頭に “RT @username” を追加し、元のテキストを末尾で切り詰めて三点リーダーを付与することで X によって変更される点に注意してください。したがって、リツイートの場合は、リツイートされている元のポストの変更されていないテキストを抽出していることを確認するために、アプリでは 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配列本文テキスト内の、表示されるポストを示す文字範囲を表します。先頭に @メンションがある投稿では開始位置が 0 より大きくなり、メディアが添付されている投稿や 140 文字を超える投稿では、long_object 内で display_text_range が示されます。

“display_text_range”: [
14,
42
]
or
“long_object”:
“display_text_range”: [
0,
277
]…
actorオブジェクトポストを行った X ユーザーを表すオブジェクトです。Actor オブジェクトは X ユーザーを指し、そのユーザーに関するすべてのメタデータを含みます。
参照
Actor オブジェクトの詳細
inReplyToオブジェクト該当する場合、返信先のポストを参照し、そのポストへのリンクを含む JSON オブジェクト。
“inReplyTo”:

“link”: “http://x.com/GOP/statuses/349573991561838593
locationオブジェクトポストが作成された X「Place」を表す JSON オブジェクトです。これは X プラットフォームからそのまま渡されるオブジェクトです。

詳細は
location オブジェクト
twitter_entitiesオブジェクトURL、メンション、ハッシュタグの一覧を含む、X のデータ形式における entities オブジェクトです。Entities については X のドキュメントを参照してください。なお、リツイートでは、X がルートレベルで抽出する entities の値を途中で切り詰める場合があります。そのため、リツイートの場合は、切り詰められていない値を使用していることを確認するために、アプリは object.twitter_entities を参照する必要があります。

twitter_entities オブジェクトの詳細を参照してください
twitter_extended_entitiesオブジェクトX のネイティブなデータ形式において、“media” を含むオブジェクトです。twitter_entities オブジェクトの “media” フィールドにデータが存在する任意のポストにはこのオブジェクトが含まれ、投稿内に複数の写真がある場合にはそれらも含まれます。複数枚の写真を含むポストのメディア情報を取得する正しい場所は、このオブジェクトである点に注意してください。

複数の写真は、“media” 配列内のカンマ区切りの JSON オブジェクトとして表現されます。

twitter_extended_entities オブジェクトの詳細を参照してください。
gnipオブジェクトアクティビティペイロードに追加され、マッチングルールを示すとともに、ストリームまたはプロダクトで有効なエンリッチメントに基づいて追加されたエンリッチ済みデータを含むオブジェクト。

gnip オブジェクトの詳細を参照してください。
edit_historyオブジェクト投稿のすべてのバージョンを示す一意の識別子です。編集のない投稿の場合、IDは1つだけです。編集履歴がある投稿の場合、複数のIDがあり、編集の順序を反映する昇順で並んでおり、配列の最後の要素が最新バージョンになります。 

これらの投稿IDを使用して、投稿の以前のバージョンをハイドレート (再取得) して表示できます。

例:

edit_history”:
“initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
編集コントロールオブジェクトこのフィールドが存在する場合、投稿をどれくらいの時間まで編集できるかと、残りの編集回数を示します。投稿は作成後最初の30分間のみ編集でき、最大5回まで編集可能です。

これらの投稿IDを使用して、過去バージョンの投稿をハイドレートして表示できます。

例:

“edit_controls”:
“editable_until_ms”: 123
“edits_remaining”: 3
編集可能ブール値このフィールドが存在する場合、そのポストが公開時点で編集対象だったかどうかを示します。このフィールドは動的に変化せず、ポストが編集可能時間の上限または編集回数の上限に達しても、True から False に切り替わることはありません。次のようなポストの特性がある場合、このフィールドは False になります:

* ポストがプロモーションされている
* ポストに投票 (poll) が含まれている
* ポストが自分自身のスレッドではない返信である
* ポストがリツイートである (ただし Quote Tweet は編集の対象になります)
* ポストが nullcast である
* Community ポストである
* Superfollow ポストである
* Collaborative ポストである

追加のポスト属性

AttributeTypeDescription
twitter_langstring
favoritesCountintNull の場合があります。 このポストが X ユーザーにより「いいね」されたおおよその回数を示します。

“favoritesCount”:298
retweetCountintこのポストがリツイートされた回数を示します。例:

“retweetCount”:153

非推奨属性

フィールド説明
geoobjectポストが作成された地点を表す Point 位置情報。
twitter_filter_levelstring後方互換性を維持するために残されている非推奨フィールド。

ネストされたポストアクティビティオブジェクト

いくつかのケースでは、ポストオブジェクトの中に他のポストがネストされることがあります。ネストされたオブジェクトを扱う場合、その JSON ペイロードには複数のオブジェクトが含まれ、各ポストオブジェクトがそれぞれ独自のオブジェクトを含んでいる場合があります。ルートレベルのオブジェクトには、どの種類のアクションが行われたか、つまりリツイートか引用ツイートかといった情報が含まれ、さらに共有されている「オリジナル」のポストを表すオブジェクトが含まれることもあります。拡張ポストには、2017 年の更新時に破壊的変更を防ぐ目的で導入された、140 文字を超える内容を保持するネストされた拡張オブジェクトが含まれます。各ネストされたオブジェクトディクショナリについては、以下で説明します。 Retweets リツイートの Activity Streams 形式では、リツイートされているオリジナルのポストを表現するために、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 形式では、引用ツイートが埋め込まれます { "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": {} } } リツイートされた引用ツイート:
    {
    	"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 オブジェクト

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": {twitter_entitiesオブジェクトを参照},
  "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": {twitter_entitiesオブジェクトを参照},
  "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/XDevelopers
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
postedTimedateこのユーザーアカウントが X で作成された日時 (UTC) 。例:

“postedTime”: “2013-12-14T04:35:55.036Z”
imagestringユーザーのプロフィール画像を指す HTTPS ベースの URL。例:

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

サポート終了 (非推奨) の属性

FieldType説明
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 オブジェクトは、X アカウントレベルで設定される actor オブジェクト内、または gnip object の profileLocations オブジェクト内に存在する場合があります。Location オブジェクトの type は place オブジェクトであり、name、address、geo coordinates (地理座標) を持つことができます。Location オブジェクトは、ネイティブ拡張フォーマットの Geo に類似しています。

Location データディクショナリ

FieldTypeDescription
objectTypestringより詳細な情報はこちらを参照してください。例:

“objectType”: “place”
displayNamestring場所の完全な名称。

“displayName”: “United States”
namestringX の place JSON フォーマットにおける場所名。
linkstring場所を表す X JSON の完全な表現へのリンク。

“link”:https://api.x.com/1.1/geo/id/27c45d804c777999.json
geoobjectX からの geo 座標オブジェクト。ポリゴンまたはポイントのいずれか。

geo を参照してください
countryCodeStringこの場所が含まれる国を表す短縮された国コード。例:

“countryCode”: “US”
countryStringこの場所が含まれる国の名称。例:

“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 entities オブジェクト

Activity Streams フォーマットの場合、twitter_entities は、ネイティブ拡張フォーマットの 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 拡張エンティティオブジェクト

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 オブジェクト

Activity Streams フォーマット内の gnip オブジェクトには、アクティブなエンリッチメントによって追加されたメタデータと、そのアクティビティがどのルールにマッチしたかを示す情報が含まれます。

データディクショナリ

FieldTypeDescription
matching_rulesarrayアクティビティがマッチしたルールを示す matching rule オブジェクトの配列です。
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarrayアクティビティ内に含まれるリンクおよび、URL アンワインド (unwinding) エンリッチメント用の展開済み 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 エンリッチメントから導出された location オブジェクトの配列です。

**    “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
      }
    ]
  }

アクティビティストリームのペイロード例

ポストのアクティビティ
{
	"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"
}
返信ポストのアクティビティ
{
	"id": "tag:search.x.com,2005:1296887316556980230",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-21T19:10:05.000Z",
	"generator": {
		"displayName": "X Webアプリ",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
	"body": "See how @PennMedCDH are using X data to understand the COVID-19 health crisis 📊\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": "See how @PennMedCDH are using X data to understand the COVID-19 health crisis 📊\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": "ペンシルベニア大学医学部デジタルヘルスセンター",
			"expanded_url_description": "ペンシルベニア大学医学部デジタルヘルスセンターは、COVID-19に関するXマップを作成しました。このマップには、感情分析、報告された症状、州別データ、COVID-19アウトブレイクに関する国境データを詳述したチャートが含まれています。さらに、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開発者はツイートへの返信を非表示にできます - これは開発者が… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "返信を非表示にするエンドポイントが本日公開されます!\n\n開発者はツイートへの返信を非表示にできます - これは開発者が #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開発者はツイートへの返信を非表示にできます - これは開発者が… 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 における返信を非表示にするエンドポイントの一般提供開始を発表いたします。返信を非表示にするエンドポイントを使用すると、ユーザーが自分のツイートへの返信を非表示または再表示できるツールを構築できます。ユーザーは、不適切、気を散らす、誤解を招くコメントへの注目を減らしたり、会話をより魅力的にするためなど、さまざまな理由で返信を管理します。このエンドポイントを通じて、X 上のユーザーがより迅速かつ簡単に返信を非表示または再表示できるツールを構築できます..."
		}]
	},
	"twitter_filter_level": "low"
}
twitter_extended_entities を含むポストのアクティビティ
{
	"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": "It’s finally here! 🥁 Say hello to the new #XAPI.\n\nWe’re rebuilding the X API v2 from the ground up to b… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "It’s finally here! 🥁 Say hello to the new #XAPI.\n\nWe’re rebuilding the X API v2 from the ground up to better serve our developer community. And today’s launch is only the beginning.\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アプリ",
		"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でツイートとトレンドが見られます!\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アプリ",
			"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でツイートとトレンドが見られます!\n\nこちらをチェック… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "APLを使ってX用のAlexaスキルを作りました。echo showでツイートとトレンドが見られます!\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の学術研究向けデベロッパーリレーションズ。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でツイートとトレンドが見られます!\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"
}
引用ツイートアクティビティ
{
 	"id": "tag:search.x.com,2005:1328399838128467969",
 	"objectType": "activity",
 	"verb": "post",
 	"postedTime": "2020-11-16T18:09:36.000Z",
 	"generator": {
 		"displayName": "X Webアプリ",
 		"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 Webアプリ",
 			"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の返信の非表示と最近の検索が来週月曜日、11月… 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": "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": []
 			}
 		},
 		"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": "👋 Friendly reminder that X Developer Labs v2 hide replies and recent search will be retired next Monday, 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"
 	}
 }
引用ツイートのリツイートアクティビティ
{
	"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: 📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、リファクタリング版をぜひご覧ください…",
	"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": "📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、リファクタリング版をぜひご覧ください… https://t.co/cAepHunkFp",
		"long_object": {
			"body": "📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、Xの新しい検索エンドポイントを使用したリファクタリング版をぜひご覧ください 🚇 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": "📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、リファクタリング版をぜひご覧ください… 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 ウェブアプリ",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
		"body": "X APIを使ってカスタム通勤情報を取得する方法のチュートリアルを書きました🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"long_object": {
			"body": "X APIを使ってカスタム通勤情報を取得する方法のチュートリアルを書きました🚇\n\n#DEVcommunity #Pythontutorial \n\nこちらからチェック 👇\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 • ロンドン在住スイス人 • 観葉植物の母 • @_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": "ロンドン、英国"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1195000047089389573",
			"summary": "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"
	}
}

ツイートメタデータタイムライン

このページ内の目次 概要 重要な概念 X タイムライン フィルタリングのヒント 次のステップ

はじめに**

X は本質的に、公開され、リアルタイムで、グローバルなコミュニケーションネットワークです。2006 年以降、X の進化は、ユーザーの利用パターンや慣習に加え、新しいプロダクト機能や機能拡張によって推進されてきました。X データを歴史研究に活用する場合、この進化のタイムラインを理解することは、データアーカイブから関心のある投稿を見つけ出すうえで重要です。 X はシンプルな SMS モバイル App としてローンチされ、その後、包括的なコミュニケーションプラットフォームへと成長しました。完全な API 群を備えたプラットフォームです。API は常に X ネットワークの柱でした。最初の API は、X のローンチ直後に公開されました。2009 年にポストのジオタグ機能が初めて導入された際には、その機能は Geo API を通じて提供されました (その後、「ジオタグ」をポストに付与する機能は X.com のユーザーインターフェースに統合されました) 。現在、X の API は双方向のコミュニケーションネットワークを支えており、このネットワークは速報ニュースや情報共有のソースとなっています。このグローバルでリアルタイムなコミュニケーションチャネルの上に構築できる機会は無限にあります。 X では、すべての公開ポストにアクセスできる 2 つの歴史データ向け API を提供しています。Historical PowerTrack と Full-Archive Search API です。どちらの API も、関心のある投稿をクエリして収集するための一連の オペレーター を提供します。これらのオペレーターは、各ポストに関連付けられたさまざまな属性、たとえばポストのテキストコンテンツ、投稿者のアカウント名、ポスト内で共有されているリンクなど、数百におよぶ属性にマッチします。ポストおよびその属性は、テキストベースの一般的なデータ交換フォーマットである JSON でエンコードされています。そのため、新機能が導入されると新しい JSON 属性が追加されることが多く、通常はその属性にマッチする新しい API オペレーターも追加されてきました。ユースケースに、世界中の人々が X 上で「何を言ってきたか」に 耳を傾ける 必要が含まれる場合、各オペレーターに対応する JSON メタデータがいつから存在しているのかをよく理解しているほど、Historical PowerTrack フィルターをより効果的に構築できます。 次に、ポストのメタデータの更新が、関心のあるデータシグナルの発見にどのような影響を与えるかを理解する前提となる、いくつかの主要な概念を紹介します。

重要な概念**

ユーザー主導の慣習から X の_第一級オブジェクト_へ

X のユーザーは、自然発生的に新しい、そして現在では不可欠となっているコミュニケーションパターンを X ネットワークにもたらしてきました。その代表例がハッシュタグで、今ではほぼすべてのソーシャルネットワークで使われています。ハッシュタグは、会話やトピックを整理するための手段として導入されました。1 日に何億件ものメッセージが流れるネットワークでは、関心のある投稿を見つけるためのツールが重要であり、その中心的な方法の 1 つがハッシュタグになりました。ハッシュタグの利用が広がると間もなく、X によって公式なステータスとサポートが与えられました。ハッシュタグが_「第一級」のオブジェクト_になったことで、多くの変化が生まれました。ハッシュタグは X.com のユーザーインターフェース上でクリック可能/検索可能になり、@mentions、添付メディア、株式シンボル、共有リンクと並んで X の entities ファミリーの一員にもなりました。これらのエンティティは、あらかじめパース済みの JSON 配列として便利にエンコードされており、開発者がそれらを処理・スキャン・保存しやすくなっています。 Retweet も、ユーザー主導の慣習が公式オブジェクトになった例です。Retweet は、コンテンツを他者に「転送」する方法として登場しました。これは、ポストをコピー&ペーストし、その先頭に「RT @」というパターンを付ける手動のプロセスとして始まりました。このプロセスは、専用の Retweet ボタンと新しい JSON メタデータによって自動化されました。こうして「公式の」Retweet が誕生しました。その他の例としては、「メンション」、メディアやウェブリンクの共有、ポストと一緒に位置情報を共有することなどがあります。これらそれぞれの利用パターンによって、新たな x.com のユーザーインターフェース機能、新たな補助 JSON が生まれ、その結果、投稿をマッチングする新たな方法が生まれました。これらすべての基本的なポストの属性は、それらにマッチさせるために使用される PowerTrack オペレーターとして実装されています。

ポストのメタデータ、可変性、更新、最新性

ポストの本文には最大文字数の制限がありますが、ポストを表現する JSON には 100 を超える属性が含まれます。誰がいつポストしたか、それがオリジナルのポストなのかリポストなのかといった属性に加え、ハッシュタグ、メンション、共有リンクといった第一級オブジェクトの配列も含まれます。ポストしたアカウントについては、そのユーザーのプロフィールやその他のアカウントメタデータを提供する、さまざまな属性を持つ User (または Actor) オブジェクトがあります。プロフィールには、短い自己紹介文、ホームロケーション (自由入力テキスト) 、優先言語、任意のウェブサイトリンクが含まれます。 一部のアカウントメタデータは変わることはありません (例: 数値のユーザー ID や作成日) 。一部は時間の経過とともにゆっくり変化し、その他の属性はより頻繁に変化します。人は仕事を変え、引っ越しをします。企業は自社情報を更新します。履歴の投稿を収集する場合、メタデータのうち一部は「ポストされた当時の情報」であり、別のメタデータは「クエリ送信時点の情報」であることを理解しておくことが重要です。  すべての履歴系 API では、ユーザーのプロフィールの説明文、表示名、およびプロフィールの「home」属性は、クエリ送信時点の値に更新されます。

「ネイティブ」メディア

X.com と X モバイルアプリでは、ボタンをクリックしてフォトギャラリーから選択することで、ポストに写真や動画を追加できます。これらは第一級の操作として統合されているため、この方法で共有される動画や写真は「ネイティブ」メディアと呼ばれます。 多くのクエリ演算子は、これらの「ネイティブ」リソースを対象として機能し、has:videoshas:imageshas:media などがあります。これらは、X の機能を通じて共有されたメディアコンテンツにのみマッチします。X プラットフォーム外でホストされているその他のメディアにマッチさせるには、URL メタデータに対してマッチする演算子を使用する必要があります。 Historical PowerTrack と Full-Archive Search の製品詳細に入る前に、プロダクトおよびプラットフォームとしての X が時間の経過とともにどのように進化してきたかを見ていきましょう。 X のタイムライン 以下に、X に関する タイムライン の一部を示します。これらの X のアップデートのほとんどは、ユーザー行動、ポストの JSON コンテンツ、クエリ演算子、あるいはそのすべてに、何らかの形で根本的な影響を与えました。X を API プラットフォームとして見ると、これらのイベントは、ポストをエンコードするために使用される JSON ペイロードに何らかの形で影響してきました。その結果、その JSON の詳細が、X の履歴 API がそれらにどのようにマッチするかにも影響します。 このタイムライン一覧は、概ね正確ではありますが、網羅的ではない点に注意してください。

2006

  • 10月
    • @replies が慣習として使われるようになる。
    • cashtagsが初めて登場するが、株式ティッカーの言及に使われるようになるのが一般的になるのは2009年初頭ごろ。cashtags が初めて登場するが、株式ティッカーの言及に使われるようになるのが一般的になるのは 2009 年初頭ごろ。Cashtags は 2012 年 6 月にクリック可能/検索可能なリンクになった。
  • 11月 - 「お気に入り」 (Favorites) 機能が導入される。

2007

  • 1月 - @replies が in_reply_to メタデータを持つ UI の返信ボタンを備えた第一級のオブジェクトとなる。
  • 4月 - リツイートが慣習として広く用いられるようになる。
  • 8月 - #ハッシュタグが投稿を検索・整理するための主要な手段として使われ始める。

2009

  • 2月 - 株式ティッカーシンボルを議論する際の一般的な表記法として、$cashtags の利用が一般化する。
  • 5月 - Post 本文の先頭に「Via @」を付加する Retweet の「ベータ版」が導入される。
  • 6月 - 認証済みアカウントが導入される。
  • 8月 - 「RT @」パターンと新しい retweet_status メタデータを伴い、Retweet がファーストクラスのオブジェクトとして扱われるようになる。
  • 10月 - リスト機能が公開される。
  • 11月 - Post Geotagging API が公開され、サードパーティ製 App を通じてユーザーが位置情報を共有できる最初の方法が提供される。

2010

  • 6月 - 投稿にジオタグを付けるための X Places を導入。
  • 8月 - ウェブサイト向けの Post ボタンをリリース。リンク共有が容易になった。

2011

  • 5月 - Followボタンが導入され、ウェブサイトと関連付けられたアカウントをより簡単にフォローできるようになりました。
  • 8月 - ネイティブな写真投稿機能が導入されました。

2012

  • 6月 - $Cashtags がクリックおよび検索可能なリンクになる。

2014

  • 3月 - 写真へのタグ付けと最大4枚までの写真に対応拡張版 X Entities メタデータが導入されました。
  • 4月 - 絵文字が X の UI でネイティブにサポートされました。絵文字は少なくとも 2008 年以降、投稿で一般的に使用されていました。

2015

  • 4月 - X の「ポスト」ユーザーインターフェースデザインの変更により、位置情報付きの投稿数が減少。
  • 10月 - X Polls introduced。Polls は当初、24時間の投票期間で 2 つの選択肢に対応していた。11月には、投票期間 5 分〜7 日で 4 つの選択肢に対応するようになった。Poll メタデータは、2017 年 2 月に利用可能になった (拡張ネイティブ形式のみ) 。

2016

2017

  • 2月 - X Poll メタデータがポストのメタデータに含まれるようになる (拡張ネイティブ形式のみ) 。
  • 4月 - 「Simplified Replies」 が導入され、返信先アカウントが 140 文字数にカウントされなくなる (「dmw140, part 2」) 。
2018 2022
  • 9月29日 - 投稿の編集機能が一部のテストグループにロールアウトされる。編集されたポストのメタデータが、該当する場合はポストオブジェクトに追加される。これには edit_history オブジェクトおよび edit_controls オブジェクトが含まれる。これらのメタデータは、編集可能機能が追加される前に作成された投稿については返されない。これらのメタデータに関連する Operator は存在しない。ポストの編集がどのように機能するかの詳細については、Edit Posts fundamentals を参照。
フィルタリングのヒント 新機能がいつ、どのように追加されたかという X のタイムラインに慣れておくことは、より効果的なクエリの作成に役立ちます。ここでいうクエリとは、X の履歴 API によって投稿アーカイブに適用される フィルター または ルール を意味し、PowerTrack Operators を使用してポストの JSON にマッチさせます。例としては、特定の言語の投稿にマッチさせるために使用される lang: Operator があります。X は言語分類サービス (50 を超える言語に対応) を提供しており、X API は各ポストに対して生成される JSON 内でこのメタデータを提供します。たとえば、あるポストがスペイン語で書かれている場合、その JSON 属性「lang」は「es」に設定されます。このため、lang:es という句を含むフィルターを作成すると、スペイン語として分類された投稿メッセージのみにマッチします。 タイムライン情報は、受信した投稿データをより適切に解釈するうえでも役立ちます。たとえば、2008 年と 2012 年の夏季オリンピックに関するコンテンツの共有を調査しているとします。is:retweet Operator だけを適用してリツイートにマッチさせた場合、2008 年にはデータは 1 件もマッチしません。しかし、2012 年については、おそらく数百万件のリツイートが存在するでしょう。このことから誤って、2008 年にはリツイートがユーザーの慣行ではなかった、もしくは単に誰もそのオリンピックについてリツイートしなかった、と結論づけてしまう可能性があります。リツイートは 2009 年にファーストクラスのオブジェクトになったため、2008 年のリツイートを特定するには ”RT @” というルール句を追加する必要があります。 リツイートと言語分類はいずれも、長い歴史と多くのプロダクト上の詳細を持つ投稿属性の例です。以下では、X データのマッチングと理解に重要な、これらおよびその他の属性クラスについて、さらに詳しく説明します。

偽陰性を見分ける

フィルターを作成する際に重要なポイントの 1 つは、メタデータを対象にマッチングする Operator にはすべて「導入日 (born on 日) 」があるということです。あるポストが投稿されたに導入されたメタデータに対して動作する Operator を使ってフィルターを作成すると、そのポストはヒットせず、偽陰性が発生します。たとえば、「snow」に言及し、かつ動画を共有しているすべての投稿に関心があるとします。このとき、ネイティブ 動画を含む投稿にマッチする has:videos Operator を使ってルールを作成しても、その条件は 2015 年以前の投稿にはマッチしません。 しかし、X では 2015 年よりずっと前から、動画の共有は一般的に行われていました。当時は、ユーザーは他の場所にホストされている動画へのリンクを共有していましたが、2015 年に X はプラットフォームに新しい「動画共有」機能を直接実装しました。こうしたそれ以前の対象ポストを見つけるには、url:”youtube.com” のようなルール句を追加します。 なお、Search API では、インデックスの再構築時にメタデータが「バックフィル」される例もあります。よい例としては、株式銘柄を議論する際に 2009 年に広く使われるようになった cashtagがあります。2015年にcashtag があります。2015 年に cashtag オペレーターが導入された後、Search インデックスが再構築され、その過程でシンボルエンティティが、2006 年初期を含むすべてのポスト本文から抽出されました。当時は $ は主にスラングとして使われており、「I hope it nownow $oon!」のような使われ方をしていました。

ユースケースにとって重要なポスト属性の特定とフィルタリング

X アカウントの数値 ID など、メタデータの中にはサービス開始当初から存在しており (変更されることのないアカウントメタデータの一例です) 、一方で、2006 年の X 開始からかなり時間が経ってから導入されたものもあります。新しく導入されたメタデータの例としては、リツイートのメタデータ、ポストの位置情報、URL のタイトルと説明、「ネイティブ」メディアなどがあります。以下では、これらの X プラットフォームの更新によって大きな影響を受けた、代表的なポスト属性の種類をいくつか紹介します。 これらに対するフィルタリングやマッチングの動作は、多くの場合、使用する過去のポスト API によって異なります。どの製品が調査やユースケースに最適であるかを判断しやすくするため、以下の属性の詳細には、概要レベルの製品情報も含めています。

X プロフィール

根本的には X はグローバルなリアルタイムのコミュニケーションチャネルであるため、ポストデータを用いたリサーチでは、誰が発信しているのかに重点が置かれることがよくあります。多くの場合、X ユーザーがどこをホームと考えているかを知ることが役立ちます。また、アカウントの自己紹介文 (bio) に興味や趣味への言及が含まれているかを知ることで、関心のあるポストを見つけやすくなります。関心のあるアカウントからの投稿をモニタリングしたいというニーズも非常によくあります。プロフィール属性は、これらすべてのユースケースにおける重要な要素です。 X 上のすべてのアカウントにはプロフィールがあり、X の @handle、表示名、短い自己紹介文、ホームロケーション (ユーザーが入力する自由形式テキスト) 、フォロワー数などのメタデータが含まれます。数値のユーザー id やアカウントの作成日時のように、決して変わらない属性もあります。一方で、投稿数やフォローしているアカウント数、フォロワー数のように、日ごと・週ごと・月ごとに変化するのが通常の属性もあります。その他のアカウント属性もいつでも変更できますが、変更頻度はそれほど高くありません。たとえば、表示名、ホームロケーション、自己紹介文などです。 すべてのポストの JSON ペイロードには、そのポストの投稿者に関する account profile メタデータが含まれます。リポスト (Retweet) の場合、元のポストを投稿したアカウントのプロフィールメタデータも含まれます。 ポストのプロフィールメタデータの可変性は、利用している履歴向けプロダクトに完全に依存します。Search APIs は、取得時点の プロフィール設定を持つ履歴投稿を提供します。Historical PowerTrack では、2011 年以前のデータを除き、プロフィールは ポストが投稿された時点の状態 を反映します。2011 年より古い投稿については、プロフィールメタデータは 2011 年 9 月時点のプロフィールを反映します。

元のポストとリツイート

リツイートは、ユーザー主導の慣習が公式なオブジェクトになったもう一つの例です。リツイートは、コンテンツを他者に「転送」する方法として生まれました。最初は、ポストをコピー&ペーストし、その先頭に「RT @」というパターンを付ける手作業のプロセスでした。このプロセスは、JSON メタデータを備えた新しい Retweet ボタンによって自動化されました。こうして「公式」なリツイートが誕生し、リツイートするという行為は、第一級のイベントとして扱われるポストイベントになりました。新しい Retweet ボタンとともに、元のポストの完全なペイロードといった新しいメタデータも導入されました。 ポストがオリジナルか共有かは、よく使われるフィルタリング条件です。オリジナルのコンテンツだけが必要となるケースもあれば、ポストのエンゲージメントが最重要となり、リツイートが鍵となるケースもあります。PowerTrack の is:retweet 演算子を使うことで、リツイートを含めるか除外するかを制御できます。2009年8月より前のデータを取得する場合、ユーザーはリツイートにマッチさせる (あるいはマッチさせない) ための 2つ の戦略を持つ必要があります。2009年8月以前については、ポストメッセージ自体を、「@RT 」パターンに対して完全一致検索を行うことでチェックする必要があります。2009年8月以降の期間については、is:retweet 演算子が利用可能です。

ポストの言語分類

ポストがどの言語で書かれているかは、一般的な関心事項です。ポストの言語は、そのポストのおおよその位置を推定する手がかりとなり、多くの場合、分析や表示の目的では特定の言語だけを対象にすれば十分です。 (X のプロフィールには、優先言語の設定もあります。) ポストの言語分類によるフィルタリングについては、X の履歴系プロダクト (Search API と Historical PowerTrack) では仕様が大きく異なります。Search アーカイブが構築された際、すべてのポストに X の言語分類がさかのぼって付与されました。そのため、lang: 演算子はポストの全アーカイブに対して利用できます。一方、Historical PowerTrack では、X の言語分類メタデータは 2013 年 3 月 26 日以降のアーカイブで利用可能です。 

投稿の位置参照

ポストがどこから発信されたか (すなわち、位置情報をひも付けること) は、多くのユースケースで重要です。投稿に位置情報をひも付ける主な方法は次の 3 つです。
  • ポスト本文中の地理的な参照情報
  • ユーザーによって位置情報タグが付けられた投稿
  • ユーザーがアカウントプロフィールで設定した「ホーム」ロケーション
ポストメッセージ内の地理的参照
ポストメッセージ内の地理的参照に基づいてマッチングする方法は、ローカルな知識に依存するため多くの場合もっとも難しい手法ですが、ポストアーカイブ全体に適用できるオプションです。以下は、「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月で、その他の Geo 演算子では 2015年2月からです。Historical PowerTrack を使用している場合、ジオリファレンスは 2011年9月1日から利用可能です。Historical PowerTrack アーカイブが構築された際、この日付より前のすべてのジオタグ情報は含まれていません。
ユーザーが設定するアカウントプロフィールの「自宅」位置情報
すべてのXユーザーは、自分のホームロケーションを示す Profile Location を設定することができます。何百万人ものXユーザーがこの情報を提供しており、X Firehose 内の地理データ量を大幅に増加させています。この位置情報メタデータは、正規化されていない、ユーザーが自由入力した自由形式の文字列です。約 30% のアカウントには、国レベルまで特定可能な Profile Geo メタデータがあります。 ポストの位置情報と同様に、照合方法や利用可能な期間は、使用している Historical API に依存します。Historical PowerTrack を利用すると、これらの自由形式文字列に対して独自のカスタム照合を試すことができます。そのプロセスを容易にするために、X は可能な場合にジオコーディングを実行し、正規化されたメタデータと対応するオペレーターを提供する Profile Geo Enrichment も提供しています。Profile Geo オペレーターは、Historical PowerTrack と Search APIs の両方で利用できます。Historical PowerTrack では、これらの Profile Geo メタデータは 2014 年 6 月から利用可能です。Search APIs では、このメタデータは 2015 年 2 月から利用可能です。 Webページのリンク、写真、動画を共有することは、常にXにおける基本的なユースケースでした。初期の頃は、これらすべての操作は投稿本文の中にURLリンクを含めることで行われていました。2011年には、Xのユーザーインターフェースに写真を直接共有する機能が統合され、2016年にはネイティブ動画が追加されました。 このような経緯から、この種のコンテンツにマッチさせるためのさまざまなフィルタリング用の演算子があります。共有リンク、写真、動画を含む投稿かどうかに基づいてマッチさせる演算子のセットが用意されています。また、X上で共有されるURLのほとんどは、投稿の文字数を節約するために短縮されており (例: bitly や tinyurl などのサービスによって生成) 、Xはマッチングに利用できる完全な展開済みURLを生成するデータエンリッチメントを提供しています。たとえば、XとEarly-warning systems (早期警報システム) についてのリンクを含む投稿にマッチさせたい場合、「severe weather communication」を参照するフィルターは、この http://bit.ly/1XV1tG4 URL を含む投稿にマッチします。 2012年3月に、expanded URL enrichment が導入されました。それ以前は、投稿のペイロードにはユーザーが指定したURLのみが含まれていました。そのため、ユーザーが短縮URLを含めていた場合、関心のある (展開された) URLにマッチさせることは困難になり得ます。Historical PowerTrack と Search APIs の両方では、これらのメタデータは2012年3月以降利用可能です。 2016年7月には、enhanced URL enrichment が導入されました。この拡張版では、投稿のペイロード内にウェブサイトのHTMLタイトルと説明が含まれ、それらに対してマッチングを行うための演算子も提供されます。Historical PowerTrack では、これらのメタデータは2016年7月から利用可能です。Search APIs では、これらのメタデータは2014年12月から利用可能になります。 2016年9月、Xは「ネイティブ添付」を導入し、末尾の共有リンクが投稿の140文字制限のカウント対象外となりました。両方のURLエンリッチメントは、これらの共有リンクにも引き続き適用されます。 URLフィルタリングに関する、URL関連プロダクト固有のその他の詳細については、該当する記事を参照してください。