メインコンテンツへスキップ
比較ガイドをご覧ください:

X API:Enterprise データ・ディクショナリ

はじめに

Enterprise Post は、X におけるすべての機能の最小かつ基本的な構成単位です。Posts を返すすべての X API は、そのデータを JavaScript Object Notation (JSON) でエンコードして提供します。JSON はキーと値の組で構成され、名前付き属性とそれに対応する値を持ちます。API から取得される Post オブジェクトには X ユーザーの「ステータス更新」が含まれますが、リツイート、返信、引用 Tweet もすべて Post オブジェクトです。Post が他の Post(リツイート、返信、引用 Tweet)に関連する場合は、各要素が識別されるか、Post オブジェクト内に埋め込まれます。ネイティブな X データ形式における最も単純な Post であっても、著者、メンションされたユーザー、タグ付けされた場所情報、ハッシュタグ、キャッシュタグのシンボル、メディア、URL リンクなど、Post の他の属性を表す入れ子の JSON オブジェクトを含みます。X のデータを扱ううえで、これは重要な概念です。X API から受け取る Post データの形式は、受信した Post の種類、使用している X API、およびフォーマット設定によって異なります。 Post オブジェクトを返す Enterprise の endpoint は、Post の編集履歴を理解するために必要な metadata を提供するよう更新されています。これらの metadata の詳細は、“Edit Posts” の基礎 ページをご覧ください。
ネイティブなX形式では、JSONペイロードにはルートレベルの属性と、ネストされたJSONオブジェクト(ここでは{}記法で表現)が含まれます:
{
	"created_at": "Fri Feb 14 19:00:55 +0000 2020",
	"id_str": "1228393702244134912",
	"text": "開発者はバレンタインカードに何と書いたでしょうか?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

利用可能なデータ形式

注意: Enterprise データ API には Enriched Native 形式の使用を強く推奨します。
  • Enriched Native 形式には、poll metadata など 2017 年以降に追加された新しいメタデータがすべて含まれており、reply_count や quote_count などの追加の metrics も含まれます。
  • Activity Streams 形式は、2017 年の文字数アップデート以降、新しいメタデータやエンリッチメントで更新されていません。
Enterprise データ API は 2 種類の形式でデータを提供します。Standard v1.1 のネイティブ形式に最も近い Enterprise 形式は Enriched Native です。従来の Enterprise データ形式は Activity Streams で、当時 Gnip によって X および他のソーシャルメディアのデータプロバイダー間で正規化フォーマットとして実装・採用されていました。この形式は現在も利用可能ですが、X は 2017 年以降、Enriched Native 形式にのみ新機能の投入と開発を行っています。 Enriched Native 形式は、その名のとおり、ネイティブの X オブジェクトに加え、URL アンワインドの metadata、プロフィール geo、poll metadata、追加のエンゲージメント metrics など、Enterprise データ製品向けに提供される各種エンリッチメントを含みます。

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

X のあらゆるユースケースにおいて、JSON でエンコードされたこれらの Post オブジェクトと属性が何を表すのかを理解することは、関心のあるデータシグナルを正確に見つけるために極めて重要です。そのための支援として、各データ形式の各オブジェクトに特化したページをご用意しています。 上記の JSON 階層を反映し、各オブジェクトへのリンクは以下のとおりです。
ネイティブ拡張Activity Streams
Link Post オブジェクトLink Activity オブジェクト
Link ユーザーオブジェクトLink Actor オブジェクト
Link Entities オブジェクトLink X entities オブジェクト
Link Extended entities オブジェクトLink X extended entities オブジェクト
Link Geo オブジェクトLink Location オブジェクト
n/aLink Gnip オブジェクト

解析に関するベストプラクティス

  • X の JSON は UTF-8 でエンコードされています。
  • パーサーは fields の順序の違いに柔軟に対処できるべきです。Post の JSON は順序を持たない data の hash として提供されると想定してください。
  • パーサーは「新しい」fields の追加を許容すべきです。 
  • JSON パーサーは「欠落」している fields を許容しなければなりません。すべての fields があらゆる context に常に含まれるわけではないためです。
  • null の field、空集合、field が存在しないことは、一般に同一とみなして問題ありません。

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

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

ネイティブ拡張データ形式が X API v2 の形式にどのようにマッピングされるか、詳しく知りたい方へ。 比較ガイドをご覧ください: ネイティブ拡張と X API v2 の比較

Post オブジェクト

Enterprise のデータ製品を使用すると、データ辞書の多くが Post データのネイティブ形式と共通しており、さらに強化された metadata が付与されていることに気付くはずです。ネイティブ強化形式のベースレベルでは、X API v1.1 data format と同じオブジェクト名が多く使用されています。Post オブジェクトには、idcreated_attext といった基本的な属性を含む、多数の「ルートレベル」属性があります。Post オブジェクトには、userentitiesextended_entities といった入れ子のオブジェクトも含まれます。さらに、retweeted_status、quoted_status、extended_tweet などの入れ子の Post オブジェクトも含まれます。加えて、ネイティブ強化形式には matching_rules オブジェクトも含まれます。
X データ辞書
以下に、これらの「ルートレベル」属性のデータ辞書と、子オブジェクトのデータ辞書へのリンクを示します。
属性説明
created_atStringこのPostが作成されたUTC時刻。例:

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

“id”:1050118621198921728
id_strStringこのPostの一意識別子の文字列表現。実装では**id**の大きな整数ではなく、こちらを使用してください。例:

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

“text”:“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
sourceStringPostの投稿に使用されたユーティリティ(HTML形式の文字列として)。Xウェブサイトからの投稿のソース値は**web**です。

例:

“source”:“X Web Client”
truncatedBooleantextパラメータの値が切り詰められたかどうかを示します。例えば、リツイートが元のPostテキストの140文字制限を超えた結果として切り詰められた場合などです。切り詰められたテキストは...のような省略記号で終わります。Xは現在、長いPostを切り詰めるのではなく拒否するため、大多数のPostでこれはfalseに設定されます。ネイティブリツイートではトップレベルのtextプロパティが短縮される場合がありますが、元のテキストはretweeted_statusオブジェクト下で利用可能であり、truncatedパラメータは元のステータスの値(ほとんどの場合false)に設定されることに注意してください。例:

“truncated”:true
in_reply_to_status_idInt64Nullable。 表現されたPostが返信の場合、このフィールドには元のPostのIDの整数表現が含まれます。例:

“in_reply_to_status_id”:1051222721923756032
in_reply_to_status_id_strStringNullable。 表現されたPostが返信の場合、このフィールドには元のPostのIDの文字列表現が含まれます。例:

“in_reply_to_status_id_str”:“1051222721923756032”
in_reply_to_user_idInt64Nullable。 表現されたPostが返信の場合、このフィールドには元のPostの作成者IDの整数表現が含まれます。これは必ずしもPost内で直接言及されたユーザーとは限りません。例:

“in_reply_to_user_id”:6253282
in_reply_to_user_id_strStringNullable。 表現されたPostが返信の場合、このフィールドには元のPostの作成者IDの文字列表現が含まれます。これは必ずしもPost内で直接言及されたユーザーとは限りません。例:

“in_reply_to_user_id_str”:“6253282”
in_reply_to_screen_nameStringNullable。 表現されたPostが返信の場合、このフィールドには元のPostの作成者のスクリーン名が含まれます。例:

“in_reply_to_screen_name”:“xapi”
userユーザーオブジェクトこのPostを投稿したユーザー。属性の完全なリストについてはユーザーデータ辞書を参照してください。

選択された属性をハイライトした例:

{ “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
}
}
coordinatesCoordinatesNullable. ユーザーまたはクライアントアプリケーションによって報告された、このPostの地理的位置を表します。内部のcoordinates配列はgeoJSON形式(経度が最初、次に緯度)でフォーマットされています。例:

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlacesNullable 存在する場合、Postが場所に関連付けられている(ただし必ずしもその場所から発信されたものではない)ことを示します。例:

“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このフィールドは、Postが引用Tweetの場合にのみ表示されます。このフィールドには、引用されたTweetのPost IDの整数値が含まれます。例:

“quoted_status_id”:1050119905717055488
quoted_status_id_strStringこのフィールドは、Postが引用Tweetの場合にのみ表示されます。これは引用されたTweetのPost IDの文字列表現です。例:

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBooleanこれが引用Tweetかどうかを示します。例:

“is_quote_status”:false
quoted_statusPostこのフィールドは、Postが引用Tweetの場合にのみ表示されます。この属性には、引用された元のPostのPost オブジェクトが含まれます。
retweeted_statusPostユーザーは他のユーザーが作成したPostをリツイートすることで、その配信を拡大することができます。リツイートは、**retweeted_status**属性の存在により、通常のPostと区別できます。この属性には、リツイートされた元のPostの表現が含まれます。リツイートのリツイートは中間のリツイートの表現を示さず、元のPostのみを示すことに注意してください。(ユーザーは自分が作成したリツイートを削除することで、リツイートを取り消すこともできます。)
quote_countIntegerNullable. このPostがXユーザーによって引用された回数の概算を示します。例:

“quote_count”:33

注:このオブジェクトはPremiumおよびEnterpriseティア製品でのみ利用可能です。
reply_countIntこのPostに返信された回数。例:

“reply_count”:30

注:このオブジェクトはPremiumおよびEnterpriseティア製品でのみ利用可能です。
retweet_countIntこのPostがリツイートされた回数。例:

“retweet_count”:160
favorite_countIntegerNullable. このPostがXユーザーによっていいねされた回数の概算を示します。例:

“favorite_count”:295
entitiesEntitiesPostのテキストから解析されたエンティティ。Entities in X Objectsも参照してください。例:

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended Entities1つから4つのネイティブ写真、または1つの動画、または1つのアニメーションGIFがPostに含まれている場合、配列’media’metadataが含まれます。これは引用Tweetでも利用可能です。Entities in X Objectsも参照してください。例:

“entities”:
<br/> “media”:[]
}
favoritedBooleanNullable. このPostが認証ユーザーによっていいねされているかどうかを示します。例:

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

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

これはX内部サポートエージェントによって判断およびラベル付けされる場合もあります。

“possibly_sensitive”:false
filter_levelStringこのPostをstreamするために使用できるfilter_levelパラメータの最大値を示します。つまり、mediumの値はnonelow、**medium**のstreamでstreamされます。

例:

“filter_level”: “low”
langStringNullable. 存在する場合、Postテキストの機械検出された言語に対応するBCP 47言語識別子、または言語が検出できなかった場合は**und**を示します。

例:

“lang”: “en”
edit_historyObjectPostのすべてのバージョンを示す一意の識別子。編集されていないPostの場合、IDは1つになります。編集履歴があるPostの場合、編集の順序を反映して昇順に配列された複数のIDがあり、最新バージョンが配列の最後の位置にあります。

Post IDを使用して、Postの以前のバージョンを取得して表示できます。

例:

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObject存在する場合、Postがまだ編集可能な期間と残りの編集回数を示します。Postは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。

Post IDを使用して、Postの以前のバージョンを取得して表示できます。

例:

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBoolean存在する場合、Postが公開時に編集可能であったかどうかを示します。このフィールドは動的ではなく、Postが編集可能時間制限または最大編集回数に達してもTrueからFalseに切り替わりません。以下のPost機能により、このフィールドはfalseになります:

_ Postがプロモーション済み
_ Postに投票がある
_ Postが非セルフスレッド返信
_ Postがリツイート(Quote Tweetsは編集可能であることに注意)
_ Postがnullcast
_ Community Post
_ Superfollow Post
_ Collaborative Post
matching_rulesArray of Rule ObjectsX SearchやPowerTrackなどの_フィルタリング_製品に存在します。Postにマッチしたルールに関連付けられた_id_と_tag_を提供します。マッチングルールの詳細はこちらをご覧ください。PowerTrackでは、複数のルールが1つのPostにマッチする場合があります。

例:

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
追加の Post 属性
Posts を提供する X API(例: GET statuses/lookup endpoint)には、以下の追加の Post 属性が含まれる場合があります:
AttributeTypeDescription
current_user_retweetObject視点依存 include_my_retweet パラメータに対応し、true に設定されたメソッドでのみ返されます。ユーザー自身による当該 Post のリツイートの Post ID(存在する場合)を示します。例:

“current_user_retweet”: <br/> “id”: 6253282,
“id_str”: “6253282”
}
scopesObject当該 Post の配信対象となる意図的な文脈を示すキーと値のペアの集合。現在は 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”
非推奨の属性
フィールドtype説明
geoObject非推奨。 Null 許容。 代わりに coordinates フィールドを使用してください。この非推奨属性では座標が [lat, long] の形式ですが、他のすべての Post の地理情報は [long, lat] の形式です。

入れ子の Post オブジェクト

いくつかのケースでは、Post オブジェクトにほかの入れ子のオブジェクトが含まれます。入れ子のオブジェクトを扱う場合、その JSON ペイロードには複数の Post オブジェクトが含まれ、各 Post オブジェクトがさらに独自のオブジェクトを持つことがあります。ルートレベルのオブジェクトには、実行されたアクションの種類、つまりリツイートか引用 Tweet かに関する情報が含まれ、共有される「original」Post を記述するオブジェクトが含まれる場合もあります。Extended Posts では、2017 年のアップデート時に破壊的変更を避けるために導入された、140 文字を超える内容を収める入れ子の extended オブジェクトが含まれます。各入れ子オブジェクトのディクショナリについては以下で説明します。 リツイート リツイートには常に 2 つの Post オブジェクトが含まれます。リツイートされる「original」Post は “retweeted_status” オブジェクトで提供されます。ルートレベルのオブジェクトはリツイート自体を表し、リツイートを行ったアカウントのユーザーオブジェクトとリツイートの時刻が含まれます。リツイートはフォロワーと Post を共有するためのアクションであり、新たなコンテンツを追加することはできません。また、リツイートに(新たな)位置情報を付与することもできません。「original」Post にジオタグが付与されている場合でも、リツイートの “geo” および “place” オブジェクトは常に null です。 Extended Posts の導入以前でも、ルートレベルの “entities” オブジェクトは、リツイートされる Post のメッセージに “RT @username ” という文字列が付与されることで、一部のケースで切り詰められ不完全になることがありました。リツイートがさらにリツイートされた場合でも、“retweet_status” は元の Post を指し続けるため、中間のリツイートは含まれないことに注意してください。x.com でリツイートを「表示」した場合にも同様の動作が見られます。リツイート「action」に割り当てられた一意の Post ID をコピーすると、元の Post が表示されます。 以下はリツイートの構造例です。繰り返しになりますが、リツイートをパースする際は、完全な(オリジナルの)Post メッセージおよびエンティティの metadata を得るために “retweeted_status” オブジェクトをパースすることが重要です。
{
	"tweet": {
		"text": "RT @author 元のメッセージ",
		"user": {
			"screen_name": "Retweeter"
		},
		"retweeted_status": {
			"text": "元のメッセージ",
			"user": {
				"screen_name": "OriginalTweeter"
			},
			"place": {},
			"entities": {},
			"extended_entities": {}
		}
	},
	"entities": {},
	"extended_entities": {}
}
引用ツイート
引用ツイートはリツイートによく似ていますが、新たなPostメッセージが含まれます。これらの新しいメッセージには、独自のハッシュタグ、リンク、その他の「entities」metadata を含めることができます。引用ツイートには、投稿者が共有した位置情報に加え、GIF、動画、写真などのメディアも含められます。 引用ツイートには少なくとも2つの Post オブジェクトが含まれ、場合によっては3つ含まれます。引用されている Post(それ自体が引用ツイートである場合もあります)は「quoted_status」オブジェクトとして提供されます。ルートレベルのオブジェクトは引用ツイート自体を内包しており、共有アクションを行ったアカウントのユーザーオブジェクトと、引用ツイートの時刻を含みます。 引用ツイートには、現在では写真、GIF、または動画を「Post」ユーザーインターフェイスから追加できます。外部ホストのメディアへのリンクが引用ツイートのメッセージに含まれている場合、ルートレベルの「entities.urls」でそれらが記述されます。引用ツイートに添付されたメディアは、ルートレベルの「extended_entities」metadata に表示されます。 引用ツイートの当初仕様では、短縮リンク(t.co URL)が「original」Post メッセージに付加され、ルートレベルの「text」フィールドに含まれていました。加えて、その t.co URL の metadata はルートレベルの「entities.urls」配列に含まれていました。2018年5月に仕様を変更し、引用された Tweet への短縮 t.co URL はルートレベルの「text」フィールドに含めないようになりました。さらに、引用された Tweet の metadata は「entities.urls」metadata に含めないようになりました。代わりに、引用された Tweet の URL metadata はルートレベル(トップレベル)に新設された「quoted_status_permalink」オブジェクトに格納され、「quoted_status」オブジェクトと同じ階層になります。 以下は、この元のフォーマットを用いた引用ツイートの構造例です。
{
	"created_at": "Tue Feb 14 19:30:06 +0000 2017",
	"id_str": "831586333415976960",
	"text": "絶対に引用したい! 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": "これはツイートシステムのテストです \ud83d\ude0e #supportdocs @twitterboulder の更新用: 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": "引用テスト 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": {}
}
拡張 Posts
「拡張 Posts」を記述する JSON は、2017 年 11 月に 280 文字の Posts が導入された際に追加されました。Post の JSON は、より長いメッセージを収容できるよう拡張されましたが、これらの基本的な X オブジェクトを解析している多数のアプリが動作しなくならないよう配慮されています。完全な後方互換性を保つため、元の 140 文字の ‘text’ フィールドと、そこから解析されるエンティティオブジェクトは維持されました。140 文字を超える Posts の場合、ルートレベルの ‘text’ フィールドは切り詰められ、不完全になります。ルートレベルの ‘entities’ オブジェクトには、‘text’ メッセージから解析された主要なメタデータ(ハッシュタグやリンクなど)の配列が含まれるため、これらのコレクションも不完全になります。たとえば、Post メッセージが 200 文字で末尾にハッシュタグが含まれている場合、従来のルートレベルの ‘entities.hashtags’ 配列にはそれが含まれません。 より長い Post メッセージと完全なエンティティの metadata を保持するために、新たに ‘extended_tweet’ フィールドが導入されました。“extended_tweet” オブジェクトは、140 文字を超える場合に切り詰められていない完全な Post メッセージを格納する “full_text” フィールドを提供します。さらに、“extended_tweet” オブジェクトには、ハッシュタグ、リンク、メンションなどの完全な配列を含む “entities” オブジェクトも含まれます。 拡張 Posts は、ルートレベルの “truncated” ブール値で識別されます。“truncated”: true の場合は、ルートレベルのフィールドではなく “extended_tweet” のフィールドを解析してください。 以下の JSON 例では、Post メッセージに 3 つのハッシュタグが含まれているにもかかわらず、ルートレベルの “text” フィールドは切り詰められ、ルートレベルの “entities.hashtags” 配列は空である点に注意してください。これは拡張 Post であるため、“truncated” フィールドは true に設定され、“extended_tweet” オブジェクトが完全な “full_text” と “entities” の Post metadata を提供します。
{
	"created_at": "Thu May 10 17:41:57 +0000 2018",
	"id_str": "994633657141813248",
	"text": "140文字を超える拡張Tweetのもう一つの例で、ドキュメントの例として生成されたものです。[\"tru… https://t.co/U7Se4NM7Eu",
	"display_text_range": [0, 140],
	"truncated": true,
	"user": {
		"id_str": "944480690",
		"screen_name": "FloodSocial"
	},
	"extended_tweet": {
		"full_text": "140文字を超える拡張Tweetのもう一つの例で、ドキュメントの例として生成されたものです。[\"truncated\": true]と完全なテキストおよび\"entities\"を含む\"extended_tweet\"オブジェクトの存在を示しています #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": []
	}
}

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

ユーザーオブジェクトには、参照されているXユーザーについて記述するXユーザーアカウントのmetadataが含まれます。 

ユーザーdata辞書

属性説明
idInt64このユーザーの一意識別子の整数表現。この数値は53ビットを超えており、一部のプログラミング言語では解釈時に問題やサイレント欠陥が発生する可能性があります。この識別子の保存には符号付き64ビット整数を使用することが安全です。安全のため、識別子の取得にはid_strを使用してください。詳細についてはX IDsを参照してください。例:

“id”: 6253282
id_strStringこのユーザーの一意識別子の文字列表現。実装では、idの大きく、場合によっては処理できない整数ではなく、こちらを使用する必要があります。例:

“id_str”: “6253282”
nameStringユーザーが定義した名前。必ずしも人の名前ではありません。通常は50文字に制限されていますが、変更される可能性があります。例:

“name”: “API”
screen_nameStringこのユーザーが自分を識別するスクリーン名、ハンドル、またはエイリアス。screen_nameは一意ですが変更される可能性があります。可能な限りユーザー識別子としてid_strを使用してください。通常は最大15文字ですが、一部の履歴アカウントではより長い名前が存在する場合があります。例:

“screen_name”: “api”
locationStringNull許可 。このアカウントのプロフィール用にユーザーが定義した場所。必ずしも場所ではなく、機械解析可能でもありません。このフィールドは検索サービスによってあいまいに解釈される場合があります。例:

“location”: “San Francisco, CA”
derivedArrays of Enrichment ObjectsEnterprise APIのみ ユーザー用に派生したエンリッチメントmetadataのコレクション。Profile Geoエンリッチメントmetadataを提供します。JSONデータ辞書を含む詳細については、参照されているドキュメントを参照してください。例:

“derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”]
urlStringNull許可 。ユーザーがプロフィールに関連付けて提供したURL。例:

“url”: “https://developer.x.com
descriptionStringNull許可 。ユーザーが定義したアカウントを説明するUTF-8文字列。例:

“description”: “The Real X API.”
protectedBooleantrueの場合、このユーザーがPostsを保護することを選択したことを示します。公開および保護されたPostsについてを参照してください。例:

“protected”: true
verifiedBooleantrueの場合、ユーザーが認証済みアカウントを持っていることを示します。認証済みアカウントを参照してください。例:

“verified”: false
followers_countIntこのアカウントが現在持っているフォロワー数。特定の困難な状況下では、このフィールドは一時的に「0」を示します。例:

“followers_count”: 21
friends_countIntこのアカウントがフォローしているユーザー数(「フォロー中」とも呼ばれます)。特定の困難な状況下では、このフィールドは一時的に「0」を示します。例:

“friends_count”: 32
listed_countIntこのユーザーがメンバーになっている公開リストの数。例:

“listed_count”: 9274
favourites_countIntこのユーザーがアカウントの生涯でいいねしたPostsの数。歴史的理由により、フィールド名にはイギリス英語のスペルが使用されています。例:

“favourites_count”: 13
statuses_countIntユーザーが発行したPosts(リツイートを含む)の数。例:

“statuses_count”: 42
created_atStringユーザーアカウントがXで作成されたUTC日時。例:

“created_at”: “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlStringユーザーがアップロードしたプロフィールバナーの標準ウェブ表現を指すHTTPSベースのURL。URLの最終パス要素を追加することで、特定のディスプレイに最適化された異なる画像サイズを取得することが可能です。サイズバリエーションについては、ユーザープロフィール画像とバナーを参照してください。

例:

“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_profileBooleantrueの場合、ユーザーがユーザープロフィールのテーマや背景を変更していないことを示します。例:

“default_profile”: false
default_profile_imageBooleantrueの場合、ユーザーが独自のプロフィール画像をアップロードしておらず、代わりにデフォルト画像が使用されていることを示します。例:

“default_profile_image”: false

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

フィールド説明
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": "#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
	}

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

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

Place data dictionary

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

“id”:“01a9a39529b27f36”
urlStringこの場所に関する追加の place metadata の場所を示すURL。例:

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeStringこの場所が表すロケーションの種類。例:

“place_type”:“city”
nameStringこの場所名の簡潔な人間可読の表現。例:

“name”:“Manhattan”
full_nameStringこの場所名の完全な人間可読の表現。例:

“full_name”:“Manhattan, NY”
country_codeStringこの場所を含む国を表す短縮された国コード。例:

“country_code”:“US”
countryStringこの場所を含む国の名称。例:

“country”:“United States”
bounding_boxObjectこの場所を囲む座標のバウンディングボックス。例:


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

attributesObjectPowerTrack、30-Day および Full-Archive Search APIs、ならびに Volume Streams を使用する場合、この hash は null。例:

“attributes”:

バウンディングボックス

フィールド説明
coordinatesArray of Array of Array of Float経度と緯度の点の並びで、関連する Place エンティティを内包するボックスを定義します。各点は [longitude, latitude] 形式の配列です。点はバウンディングボックスごとに配列としてまとめられます。ポリゴン表記との互換性のため、バウンディングボックスの配列はさらにもう一段の配列で包まれます。例:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringcoordinates プロパティにエンコードされているデータの種類です。バウンディングボックスの場合は “Polygon”、正確な座標を持つ Posts の場合は “Point” になります。例:

“type”:“Polygon”

Geo オブジェクト データ辞書

フィールド説明
coordinatesFloat のコレクションPost の位置の経度と緯度。[latitude, longitude] の形式のコレクション。例:

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringcoordinates プロパティにエンコードされているデータの種類。Post の座標 fields では “Point” になります。例:

“type”: “Point”
Coordinates オブジェクト データ辞書
フィールド説明
coordinatesFloat のコレクションPost の位置の経度と緯度。[longitude, latitude] の形式のコレクション。例:

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringcoordinates プロパティにエンコードされているデータの種類。Post の座標 fields では “Point” になります。例:

“type”: “Point”

派生ロケーション

フィールドタイプ説明
derivedlocations オブジェクトプロフィールの地理情報エンリッチメントから派生したロケーション

“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": "アメリカ合衆国",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ]
        ]
      ]
    },
    "attributes": {

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

    }
  }
}
データ辞書:Enterprise

X エンティティ  

このページのセクションへ移動 はじめに entities オブジェクト   - hashtag オブジェクト   - media オブジェクト   - media size オブジェクト   - URL オブジェクト   - user mention オブジェクト   - symbol オブジェクト   - poll オブジェクト リツイートとQuote Tweetの詳細 ユーザーオブジェクト内のentities ダイレクトメッセージ内のentities 次のステップ

はじめに

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

Entities オブジェクト

entitiesextended_entities セクションはいずれも、エンティティのオブジェクト配列で構成されています。以下では、各エンティティオブジェクトについて、その属性名・型・簡潔な説明を示すデータ辞書とともに解説します。さらに、どの PowerTrack Operator がこれらの属性にマッチするかを示し、JSON のサンプルペイロードも提示します。 これは、Posts に共通して見られるエンティティ(ハッシュタグ、リンク、ユーザーのメンションなど)の集合です。entities オブジェクトには media 属性も含まれますが、entities セクションにおけるその実装が完全に正確なのは、写真が1枚のみの Post の場合に限られます。複数の写真、動画、またはアニメーション GIF を含む Post については、extended_entities セクションを参照してください。

Entities データ辞書

entities オブジェクトは、他のエンティティのサブオブジェクト配列のコンテナです。entities の構造を示した後に、これらのサブオブジェクト用のデータ辞書と、それらに対応する Operators を提示します。
フィールドタイプ説明
hashtagsHashtag Objectsの配列Postテキストから解析されたハッシュタグを表します。例:


“hashtags”: [

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

]
mediaMedia Objectsの配列Postと一緒にアップロードされたメディア要素を表します。例:


“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 Objectsの配列Postのテキストに含まれるURLを表します。

例(Enhanced URLs enrichmentが無効の場合):


“urls”: [

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

]


例(Enhanced URLs enrichmentが有効の場合):

“urls”: [

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

]
user_mentionsUser Mention Objectsの配列Postのテキストで言及された他のXユーザーを表します。例:


“user_mentions”: [

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

]
symbolsSymbol Objectsの配列Postのテキストに含まれるシンボル($cashtagsなど)を表します。例:


“symbols”: [

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

]
pollsPoll Objectsの配列Postに含まれるXポールを表します。例:

“polls”: [

“options”: [

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

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

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

]

Hashtag オブジェクト  

entities セクションには、Post 本文に含まれる各ハッシュタグに対応するオブジェクトを要素とする hashtags 配列が含まれ、ハッシュタグがない場合は空配列が含まれます。 PowerTrack の # 演算子は text 属性に対するマッチングに使用されます。has:hashtags 演算子は、配列に少なくとも 1 つ要素がある場合にマッチします。
フィールド説明
indicesArray of IntPost のテキスト内でハッシュタグが開始・終了する位置を示す整数配列。最初の整数は Post のテキスト文字列における「#」文字の位置、2 つ目の整数はハッシュタグ直後の最初の文字の位置を表します。したがって、2 つの数値の差はハッシュタグ名の長さに 1(「#」文字分)を加えた値になります。例:

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

“text”:“nodejs”

メディアオブジェクト  

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

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_urlStringdisplay_urlの展開版。メディア表示ページにリンクします。例:

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt6464ビット整数として表現されたメディアのid。例:

“id”:114080493040967680
id_strString文字列として表現されたメディアのid。例:

“id_str”:“114080493040967680”
indicesArray of IntPostテキスト内でURLが開始および終了する位置を示す整数の配列。最初の整数はPostテキスト内のURLの最初の文字の位置を表します。2番目の整数はURL後に続く最初の非URL文字の位置(またはURLがPostテキストの最後の部分である場合は文字列の終端)を表します。例:

“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を使用してユーザーのaccess tokenでリクエストに署名してアクセスする必要があります。

認証されたx.comセッション経由で画像にアクセスすることはできません。これらの最近の変更に対応する方法については、このページをご覧ください。

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

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

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

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

認証されたx.comセッション経由で画像にアクセスすることはできません。これらの最近の変更に対応する方法については、このページをご覧ください。

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

利用可能なsizesに基づいてmedia_url_httpsなどの写真のURLをフォーマットする方法については、Photo Media URLフォーマットをご覧ください。
sizesSize Objectメディアファイルの利用可能なサイズを示すオブジェクト。例:


“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フォーマットをご覧ください。
source_status_idInt64Null許可。元々異なるPostに関連付けられていたメディアを含むPostの場合、このidは元のPostを指します。例:

“source_status_id”: 205282515685081088
source_status_id_strInt64Null許可。元々異なるPostに関連付けられていたメディアを含むPostの場合、この文字列ベースのidは元のPostを指します。例:

“source_status_id_str”: “205282515685081088”
typeStringアップロードされたメディアのtype。可能なtypeには、photo、video、animated_gifが含まれます。例:

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

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

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

ネイティブメディア(写真、動画、GIF)を含むすべてのPostsには、高さと幅のピクセル数を示す「thumb」「small」「medium」「large」のサイズセットが含まれます。写真およびプレビュー画像のメディアURLについては、Photo Media URL formattingで、異なるサイズの写真メディアを読み込むためのURLの組み立て方を規定しています。

Sizes オブジェクト 

フィールド説明
thumbSize Objectメディアのサムネイルサイズ版に関する情報。例:

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

サムネイルサイズの写真メディアは 150×150 の境界いっぱいに塗りつぶし(fill)で合わせられ、トリミングされます。
largeSize Objectメディアの大サイズ版に関する情報。例:

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

小サイズの写真メディアは 680×680 の境界内にフィット(fit)するよう制限されます。
mediumSize Objectメディアの中サイズ版に関する情報。例:

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

中サイズの写真メディアは 1200×1200 の境界内にフィット(fit)するよう制限されます。
smallSize Objectメディアの小サイズ版に関する情報。例:

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

大サイズの写真メディアは 2048×2048 の境界内にフィット(fit)するよう制限されます。

Size オブジェクト

フィールド説明
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 URLベースURLは、ファイル拡張子を除いたメディアURLです。

例:

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

このときのベースURLは次のとおりです:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
Formatフォーマットは、画像がどの種類で配信されるかを示します。利用可能なフォーマットは jpg または png で、メディアURLの拡張子として示されます。

例:

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

このときのフォーマットは: 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
   }
 }
}

大きいサイズの写真を読み込む場合の Name は: large となります。
これら3つの要素(ベースURL、フォーマット、Name)を組み合わせて、読み込む写真メディアURLを作成します。この方法で画像を読み込むフォーマットには legacymodern の2種類があります。すべての画像読み込みで legacy フォーマットの使用をやめ、modern フォーマットを使用してください。modern フォーマットを使用することで、呼び出し側のCDNヒット率が向上し、データセンターでメディアを生成・読み込む必要が生じにくくなるため、読み込み遅延の改善につながります。
Legacy formatレガシー形式は非推奨です。写真メディアの読み込みはすべてモダン形式へ移行してください。

<base_url>.<format>:<name>

例:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
Modern format写真読み込みのモダン形式は2015年にXで策定され、2017年以降デファクト標準となっています。写真メディアの読み込みはすべてこの形式へ移行してください。

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

例:

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


注: 写真メディアURLのquery文字列内の項目はアルファベット順です。メディア読み込みで追加のquery項目が導入される場合でも、アルファベット順を維持する必要があります。たとえば、仮に_preferred_format_という新しいquery項目が追加される場合、query文字列では_format_および_name_の後に配置されます。

URL オブジェクト 

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

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

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of IntPost テキスト内で URL が開始・終了する位置を示すオフセットの整数配列。1 つ目の整数は Post テキスト内の URL の先頭文字の位置、2 つ目の整数は URL の末尾直後の非 URL 文字の位置を表します。例:

“indices”:[30,53]
urlStringラップされた URL。生の Post テキストに直接埋め込まれた値および indices パラメータの値に対応します。例:

“url”:“https://t.co/yzocNFvJuL
Expanded および/または Enhanced URL enrichment を使用している場合、以下の metadata が unwound 属性配下で利用できます:
FieldTypeDescription
urlStringPost に含まれるリンクの完全に展開されたバージョン。例:

“url”:“https://blog.x.com/en&#95;us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html
statusInt展開処理の最終 HTTP ステータス。‘200’ は成功を示します。例:

200
titleStringリンクの HTML タイトル。例:

“title”:“Using X as a ‘go-to’ communication channel during severe weather”
descriptionStringリンクの HTML 説明。例:

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

ユーザーメンションオブジェクト  

entities セクションには、Post 本文に含まれる各ユーザーメンションに対応するオブジェクトを要素とする user_mentions 配列が含まれます。ユーザーメンションが存在しない場合は空配列になります。 PowerTrack の @ オペレーターは screen_name 属性に対するマッチングに使用されます。has:mentions オペレーターは、配列内に少なくとも 1 件の要素がある場合にマッチします。
FieldTypeDescription
idInt64言及されたユーザーの ID(整数)。例:

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

“id_str”:“6253282”
indicesArray of Intユーザー参照が Post テキスト内で開始・終了する位置のオフセットを表す整数配列。最初の整数はユーザーメンションの「@」文字の位置、2 番目の整数はメンションに続く最初の非 screen_name 文字の位置を表します。例:

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

“name”:“API”
screen_nameString参照されたユーザーの screen_name。例:

“screen_name”:“api”

シンボルオブジェクト  

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

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

“text”:“twtr”

Poll オブジェクト

Post に投票が含まれている場合、entities セクションには単一の poll オブジェクトを含む polls 配列が入ります。投票が含まれていない場合、entities セクションに polls 配列は存在しません。 これらの Poll のmetadataは、以下の Enterprise API でのみ利用可能です。
フィールドtype説明
optionsOption オブジェクトの配列各選択肢の位置と、その位置のテキストを持つ選択肢の配列。例:

“options”: [

“position”: 1,
“text”: “I read documentation once.”
}
]
}
end_datetime文字列投票が終了する時刻のタイムスタンプ(UTC)。例:

“end_datetime”: “Thu May 25 22:20:27 +0000 2017”
duration_minutes文字列投票の実施時間(分)。例:

“duration_minutes”: 60

リツイートと引用Tweetの詳細

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

リツイート

リツイートに関する重要なポイントとして、Post に新たな X のエンティティを追加することはできません。ユーザーはリツイート時にハッシュタグや URL、その他の情報を追加できません。ただし、リツイート(トップレベル)の text 属性は、先頭に「RT @username: 」が付与された元の Post のテキストで構成されます。   場合によっては、特にユーザー名が長いアカウントでは、これらの追加文字と元の Post 本文の組み合わせにより、元の Post テキストの上限である 140 文字を超えてしまうことがあります。140 文字ベースの表示および保存との互換性を維持するため、トップレベルの本文は Post 本文の末尾を切り詰め、三点リーダー(「…」)を追加します。結果として、元の Post の末尾に位置していた一部のトップレベルのエンティティが不正確になったり欠落したりする場合があります。たとえば、切り詰められたハッシュタグや URL エントリなどです。 この Post、 https://x.com/FloodSocial/status/907974220298125312 には、以下の Post テキストがあります:                Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag
http://wapo.st/2w8iwPQ #Testing
上記の例では、URL とハッシュタグの両方が影響を受けています。ハッシュタグは完全に、URL は一部が切り詰められているため、これらはトップレベルのエンティティから欠落しています。また、text フィールドの先頭に付く「RT @floodsocial: 」によって、追加の user_mentions トップレベルエンティティが生じていることにも気づくでしょう。 一方で、retweeted_status 内の Post のテキストとエンティティは、切り詰めや不正確なエンティティがなく、元の Post を完全に反映しています。したがって、リツイートでは入れ子の retweeted_status オブジェクトを参照することを推奨します。

引用ツイート

引用ツイートは2016年に導入されました。リツイートと異なり、「引用」してPostすると、共有されたPostの「上に」新しいコンテンツを重ねて追加します。この新しいコンテンツには、元のPostが持つ要素のほぼすべて(新しいテキスト、ハッシュタグ、メンション、URL など)を含めることができます。 引用ツイートにはネイティブメディア(写真、動画、GIF)を含めることができ、entitiesオブジェクト内に表示されます。 Xのentitiesは追加可能なため、引用側のentitiesは元のentitiesと異なる場合があります。 この例では、新しいURLとハッシュタグが引用ツイートの末尾に配置されています。 このPost、https://x.com/FloodSocial/status/907983973225160704 は、次のPostテキストを含みます:                   島が洪水に見舞われるときの奇妙で同じくらい悲劇的なこと… 引用ツイートの大西洋横断テスト | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing この場合、トップレベルのentitiesは引用の詳細を反映していません。  しかし、extended_tweet 内の Postテキストと entities は、切り捨てや不正確な entities なしに引用ツイートを完全に反映しています。したがって、引用ツイートについては入れ子の extended_tweet オブジェクトを参照することを推奨します。

ユーザーオブジェクトのエンティティ

ユーザーオブジェクトのエンティティは、ユーザーが設定したプロフィールの URL および description フィールドに表示される URL を表します。hashtags や user_mentions については表しません。Post のエンティティと異なり、ユーザーのエンティティは親オブジェクト内の複数の fields に適用される場合があります。どの field にエンティティ化された URL が含まれているかを明確にするため、対象のフィールドを示す url と description という親ノードが用意されています。 この例では、user の url フィールドには t.co のリンクが含まれており、レスポンスの entities/url/urls[0] ノード内で完全に展開されています。ユーザーの description にはラップされた URL はありません。

JSON の例

{
  "id": 6253282,
  "id_str": "6253282",
  "name": "X API",
  "screen_name": "xapi",
  "location": "San Francisco, CA",
  "description": "本物のX API。API変更やサービス問題についてツイートし、XとAPIに関する質問に喜んでお答えします。回答が得られない場合は、私のウェブサイトをご確認ください。",
  "url": "http:\/\/t.co\/78pYTvWfJd",
  "entities": {
    "url": {
      "urls": [
        {
          "url": "http:\/\/t.co\/78pYTvWfJd",
          "expanded_url": "http:\/\/dev.x.com",
          "display_url": "dev.x.com",
          "indices": [
            0,
            22
          ]
        }
      ]
    },
    "description": {
      "urls": [

      ]
    }
  }
}

X 拡張エンティティ

このページの項目へ移動 はじめに Extended Entities オブジェクト Tweet と JSON ペイロードの例 次のステップ

はじめに

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

        ]
      }
    }

Posts と JSON ペイロードの例

以下に、いくつかの Posts と、それらに対応する entities の metadata を示します。 ネイティブ写真 4 枚付きの Post ハッシュタグ、ユーザー宛メンション、キャッシュタグ、URL、そしてネイティブ写真 4 枚付きの Post:
この Post の 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": "雨の中でのTweet、パート1 - Gnipブログ - ソーシャルデータとデータサイエンスブログ",
              "description": "数年前に、いつか降水量とソーシャルメディアの時系列データを比較することになると言われていたら、冗談だと思っていたでしょう。OneRainで13年間、ソフトウェアと監視システムの開発を支援し… 続きを読む →"
            },
            "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"
              }
            }
          }
        ]
      }
    }
以下の「拡張」ペイロードにのみ、最大4枚のネイティブ写真が含まれます。配列の先頭の写真は、非拡張の X の「entities」セクションに含まれる単一の写真と同一である点に注意してください。写真に関する「media」metadata の構造は、「entities」セクションと「extended_entities」セクションで同一です。 この Post の 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"
              }
            }
          }
        ]
      }
    }

ネイティブ動画付きのPost

以下は、動画付きPostの拡張エンティティmetadataです。
{
      "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: トムリンソンがマッコーンからTD",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
前述のとおり、type が ‘photo’ に誤って設定されている entities セクションは以下のとおりです。重ねてになりますが、‘video’ や ‘animated_gif’ を含むすべてのネイティブメディアタイプには、extended_entities セクションの使用が推奨されます。
    {
    "entities": {
        "hashtags": [

        ],
        "urls": [

        ],
        "user_mentions": [

        ],
        "symbols": [

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

    }

アニメーションGIF付きのPost

以下は、このアニメーションGIF付きPostのextended entities metadataです:
{
      "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"
                }
              ]
            }
          }
        ]
      }
    }

ネイティブ拡張されたサンプルペイロード

Post

{
	"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
	}]
}

Post への返信

{
	"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 App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1296887091901718500,
	"in_reply_to_status_id_str": "1296887091901718529",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopersチームの声として、#XAPIに関するアップデート、ニュース、イベントの公式情報源です。",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 2,
	"reply_count": 3,
	"retweet_count": 9,
	"favorite_count": 26,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"unwound": {
				"url": "https://developer.x.com/en/use-cases/success-stories/penn",
				"status": 200,
				"title": "Penn Medicine Center for Digital Health",
				"description": "Penn Med Center for Digital Healthは、感情分析、報告された症状、州別データ分析、COVID-19アウトブレイクに関する境界データを詳述したチャートを含むCOVID-19 Xマップを作成しました。さらに、Penn Med With Youイニシアチブでは、Xからの地域別集計情報を活用してウェブサイトとテキストメッセージサービスに情報を提供しています。このサービスは、関連性が高く適時性のあるリソースの配信にこの情報を活用しています。"
			},
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

拡張Post

{
	"created_at": "Wed Aug 19 16:26:16 +0000 2020",
	"id": 1296121314218897400,
	"id_str": "1296121314218897408",
	"text": "返信を非表示にするendpointが本日リリースされました!\n\n開発者はTweetへの返信を非表示にできます - これは開発者が… https://t.co/VyfXs1RTXn",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopersチームの声であり、#X APIに関連するアップデート、ニュース、イベントの公式情報源です。",
		"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": "返信を非表示にするendpointが本日リリースされました!\n\n開発者はTweetへの返信を非表示にできます - これは開発者がX APIを使用して公開会話の健全性向上を支援する重要な方法です。\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における返信非表示endpointの一般提供開始を発表いたします。返信非表示endpointを使用することで、ユーザーが自分のTweetへの返信を非表示または再表示するためのツールを構築できます。ユーザーが返信を管理する理由は様々で、虐待的、注意散漫、誤解を招く、またはより魅力的な会話にするためのコメントへの注意を減らすことなどが含まれます。このendpointを通じて、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_entities を含む Post

{
	"created_at": "Wed Aug 12 17:01:42 +0000 2020",
	"id": 1293593516040269800,
	"id_str": "1293593516040269825",
	"text": "ついに登場!🥁 新しい #XAPI をご紹介します。\n\nX API v2 を一から再構築して、より良いサービスを提供します… https://t.co/UeCndQGMjx",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "#XDevelopers チームの声であり、#XAPI に関するアップデート、ニュース、イベントの公式情報源です。",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "ついに登場!🥁 新しい #XAPI をご紹介します。\n\n開発者コミュニティにより良いサービスを提供するため、X API v2 を一から再構築しています。そして今日のローンチは始まりに過ぎません。\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"unwound": {
					"url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
					"status": 200,
					"title": "新しく改良された X API のご紹介",
					"description": "新しい X API のご紹介 - 開発者が X で起こっているパブリックな会話に世界を繋げる手助けができるよう、新機能をより速く提供するために一から再構築されました。"
				},
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"quote_count": 332,
	"reply_count": 172,
	"retweet_count": 958,
	"favorite_count": 2844,
	"entities": {
		"hashtags": [{
			"text": "XAPI",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

リツイート

{
	"created_at": "Tue Feb 18 19:33:59 +0000 2020",
	"id": 1229851574555508700,
	"id_str": "1229851574555508737",
	"text": "RT @suhemparack: APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetsとTrendsが見られます!\n\nぜひチェックしてみてください…",
	"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": "#XDevelopersチームの声として、#XAPIに関するアップデート、ニュース、イベントの公式情報をお届けします。",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"retweeted_status": {
		"created_at": "Tue Feb 18 19:01:58 +0000 2020",
		"id": 1229843515603144700,
		"id_str": "1229843515603144704",
		"text": "APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetsとTrendsが見られます!\n\nぜひチェックしてみてください… 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 でのアカデミック研究向けデベロッパーリレーションズ。Xデータを使った研究についてお気軽にお声がけください。前職:Amazon Alexa。投稿内容は個人の見解です",
			"translator_type": "none",
			"protected": false,
			"verified": false,
			"followers_count": 732,
			"friends_count": 501,
			"listed_count": 12,
			"favourites_count": 358,
			"statuses_count": 458,
			"created_at": "Thu Apr 27 20:56:22 +0000 2017",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": false,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "F5F8FA",
			"profile_background_image_url": "",
			"profile_background_image_url_https": "",
			"profile_background_tile": false,
			"profile_link_color": "1DA1F2",
			"profile_sidebar_border_color": "C0DEED",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": true,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/857699969263964161/1593055939",
			"default_profile": true,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetsとTrendsが見られます!\n\nぜひチェックしてみてください 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"unwound": {
						"url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
						"status": 200,
						"title": null,
						"description": null
					},
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 6,
		"reply_count": 1,
		"retweet_count": 19,
		"favorite_count": 71,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"is_quote_status": false,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 0,
	"entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

引用Tweet

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "予定通り、以下で参照されているLabs v2 endpointは廃止されました。何かご質問がございましたらフォーラムでお知らせください… https://t.co/ahQvTYaOcZ",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
	"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
	"description": "#XDevelopersチームの声であり、#XAPIに関連するアップデート、ニュース、イベントの公式情報源です。",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"quoted_status_id": 1327011423252144000,
	"quoted_status_id_str": "1327011423252144128",
	"quoted_status": {
		"created_at": "Thu Nov 12 22:12:32 +0000 2020",
		"id": 1327011423252144000,
		"id_str": "1327011423252144128",
	"text": "👋 X Developer Labs v2の返信非表示機能と最近の検索機能が来週月曜日に廃止されることをお知らせします… https://t.co/EEWN2Q9aXh",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 2244994945,
			"id_str": "2244994945",
		"name": "X Dev",
			"screen_name": "XDevelopers",
			"location": "127.0.0.1",
			"url": "https://developer.x.com/en/community",
		"description": "#XDevelopersチームの声であり、#XAPIに関連するアップデート、ニュース、イベントの公式情報源です。",
			"translator_type": "regular",
			"protected": false,
			"verified": true,
			"followers_count": 512292,
			"friends_count": 2038,
			"listed_count": 1666,
			"favourites_count": 2147,
			"statuses_count": 3634,
			"created_at": "Sat Dec 14 04:35:55 +0000 2013",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": true,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "FFFFFF",
			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_tile": false,
			"profile_link_color": "0084B4",
			"profile_sidebar_border_color": "FFFFFF",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": false,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
			"default_profile": false,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
		"full_text": "👋 X Developer Labs v2の返信非表示機能と最近の検索機能が来週月曜日11月16日に廃止されることをお知らせします!v2 #XAPIで利用可能になった新しい返信非表示機能と最近の検索機能のendpointへの移行をお勧めします。詳細:https://t.co/r6z6CI7kEy",
			"display_text_range": [
				0,
				273
			],
			"entities": {
				"hashtags": [{
					"text": "XAPI",
					"indices": [
						228,
						239
					]
				}],
				"urls": [{
					"url": "https://t.co/r6z6CI7kEy",
					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
				"display_url": "devcommunity.com/t/retiring-lab…",
					"unwound": {
						"url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
						"status": 200,
					"title": "Labs v2最近の検索機能と返信非表示機能の廃止",
					"description": "早期アクセスと返信非表示機能の発表で述べたように、以下のX Developer Labs v2 endpointは11月16日に廃止されます。Labs v2最近の検索機能 Labs v2返信非表示機能 これらのendpointが呼び出された場合、HTTP 410ステータスで応答し、データを返しません。Labsからのフィードバックに基づいて、対応する機能をX API v2に組み込みました。関連するドキュメントは以下のリンクから確認できます。まだv2アクセスに登録していない場合は、こちらをクリックして登録してください..."
					},
					"indices": [
						250,
						273
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 4,
		"reply_count": 2,
		"retweet_count": 8,
		"favorite_count": 33,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/EEWN2Q9aXh",
				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
			"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"quoted_status_permalink": {
		"url": "https://t.co/JaxttUMmjX",
		"expanded": "https://x.com/XDevelopers/status/1327011423252144128",
		"display": "x.com/XDevelopers/sta…"
	},
	"is_quote_status": true,
	"extended_tweet": {
		"full_text": "予定通り、以下で参照されているLabs v2 endpointは廃止されました。X API v2についてご質問やサポートが必要な場合は、フォーラムでお知らせください! https://t.co/JaxttUMmjX",
		"display_text_range": [
			0,
			166
		],
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/JaxttUMmjX",
				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
				"display_url": "x.com/XDevelopers/sta…",
				"indices": [
					167,
					190
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 1,
	"reply_count": 4,
	"retweet_count": 7,
	"favorite_count": 29,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/ahQvTYaOcZ",
			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

リツイートされた引用Tweet

{
 	"created_at": "Thu Feb 06 17:26:44 +0000 2020",
 	"id": 1225470895902412800,
 	"id_str": "1225470895902412800",
 	"text": "RT @AureliaSpecker: 📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、リファクタリング版をぜひご覧ください…",
 	"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": "📣 昨年11月に書いたロンドン通勤チュートリアルを楽しんでいただけた方は、リファクタリング版をぜひご覧ください… 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": "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 #Pythontutorial \n\nこちらをチェック 👇\nhttps://t.co/sOjXW4YhbN",
 				"display_text_range": [
 					0,
 					160
 				],
 				"entities": {
 					"hashtags": [{
 							"text": "DEVcommunity",
 							"indices": [
 								85,
 								98
 							]
 						},
 						{
 							"text": "Pythontutorial",
 							"indices": [
 								99,
 								114
 							]
 						}
 					],
 					"urls": [{
 						"url": "https://t.co/sOjXW4YhbN",
 						"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"display_url": "dev.to/twitterdev/usi…",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							137,
 							160
 						]
 					}],
 					"user_mentions": [],
 					"symbols": []
 				}
 			},
 			"quote_count": 4,
 			"reply_count": 5,
 			"retweet_count": 31,
 			"favorite_count": 123,
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/pL0qJ4vhtE",
 					"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 					"display_url": "x.com/i/web/status/1…",
 					"indices": [
 						116,
 						139
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			},
 			"favorited": false,
 			"retweeted": false,
 			"possibly_sensitive": false,
 			"filter_level": "low",
 			"lang": "en"
 		},
 		"quoted_status_permalink": {
 			"url": "https://t.co/dXrJYvn3hY",
 			"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 			"display": "x.com/AureliaSpecker…"
 		},
 		"is_quote_status": true,
 		"extended_tweet": {
			"full_text": "📣 昨年11月に書いたロンドン通勤チュートリアルを気に入っていただけた方は、Xの新しい検索endpointを使ったリファクタリング版をチェックしてください 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDev @XAPI https://t.co/dXrJYvn3hY",
 			"display_text_range": [
 				0,
 				229
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							176,
 							189
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							190,
 							205
 						]
 					}
 				],
 				"urls": [{
 						"url": "https://t.co/87XIPZmZBJ",
 						"expanded_url": "https://bit.ly/2OrnrCC",
 						"display_url": "bit.ly/2OrnrCC",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							151,
 							174
 						]
 					},
 					{
 						"url": "https://t.co/dXrJYvn3hY",
 						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
 						"display_url": "x.com/AureliaSpecker…",
 						"indices": [
 							230,
 							253
 						]
 					}
 				],
 				"user_mentions": [{
 						"screen_name": "XDev",
						"name": "X Dev",
 						"id": 2244994945,
 						"id_str": "2244994945",
 						"indices": [
 							206,
 							217
 						]
 					},
 					{
 						"screen_name": "XAPI",
						"name": "X API",
 						"id": 6253282,
 						"id_str": "6253282",
 						"indices": [
 							218,
 							229
 						]
 					}
 				],
 				"symbols": []
 			}
 		},
 		"quote_count": 2,
 		"reply_count": 0,
 		"retweet_count": 12,
 		"favorite_count": 43,
 		"entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/cAepHunkFp",
 				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_id": 1195000047089389600,
 	"quoted_status_id_str": "1195000047089389573",
 	"quoted_status": {
 		"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 		"id": 1195000047089389600,
 		"id_str": "1195000047089389573",
		"text": "X APIを使ってカスタマイズされた通勤情報を取得する方法のチュートリアルを書きました🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
			"location": "London, UK",
 			"url": null,
			"description": "devrel @TwitterUK • Swiss in London • mother of houseplants • personal hairdresser to @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"is_quote_status": false,
 		"extended_tweet": {
			"full_text": "X APIを使ってカスタムの通勤情報を取得する方法のチュートリアルを書きました🚇\n\n#DEVcommunity #Pythontutorial \n\nこちらをチェックしてください 👇\nhttps://t.co/sOjXW4YhbN",
 			"display_text_range": [
 				0,
 				160
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/sOjXW4YhbN",
 					"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 					"display_url": "dev.to/twitterdev/usi…",
 					"unwound": {
 						"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"status": 200,
 						"title": null,
 						"description": null
 					},
 					"indices": [
 						137,
 						160
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"quote_count": 4,
 		"reply_count": 5,
 		"retweet_count": 31,
 		"favorite_count": 123,
 		"entities": {
 			"hashtags": [{
 					"text": "DEVcommunity",
 					"indices": [
 						85,
 						98
 					]
 				},
 				{
 					"text": "Pythontutorial",
 					"indices": [
 						99,
 						114
 					]
 				}
 			],
 			"urls": [{
 				"url": "https://t.co/pL0qJ4vhtE",
 				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					116,
 					139
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_permalink": {
 		"url": "https://t.co/dXrJYvn3hY",
 		"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 		"display": "x.com/AureliaSpecker…"
 	},
 	"is_quote_status": true,
 	"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
注意: Enterprise のデータ API には、Enriched Native 形式の使用を強く推奨します。
  • Enriched Native 形式には、poll metadata など 2017 年以降の新しいメタデータに加え、reply_count や quote_count などの追加の metrics が含まれます。
  • Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントで更新されていません。

Activity Object

Activity Streams は、Gnip が作成した X の元のデータ形式を、サードパーティの Activity Base Schema(説明はこちら)を用いて Post データや他のソーシャルメディアデータの「形式を正規化」するために設計されたオブジェクトスキーマ表現です。Posts は activity streams スキーマに正規化され、note、person、place、service といったオブジェクトの type がネストされたオブジェクトとして含まれます。Posts は、リツイート用のネストされた Post アクティビティオブジェクトや、twitter_quoted_status、long_object などのオブジェクトを持つこともあります。 ベースレベルのオブジェクト type「activity」は、ネイティブ拡張形式におけるPost のベースレベルオブジェクトに類似しています。activity streams 形式のサンプルペイロードはこちらをご参照ください。

データ辞書

以下では、これらの「ルートレベル」の activity 属性に関するデータ辞書と、子オブジェクトのデータ辞書へのリンクを示します。
属性説明
idstringPostの一意のIRI。詳細には、“tag”がスキーム、“search.x.com”がスキームのドメインを表し、2005年はスキームが派生した年です。
Postsを保存する際は、これを一意の識別子またはプライマリキーとして使用してください。
“id”: “tag:search.x.com,2005:1050118621198921728”
objectTypestringオブジェクトの型、常に”activity”に設定されます
”objectType”: “activity”
objectobject投稿または共有されているPostを表すオブジェクト。
リツイートの場合、このスキーマで説明されている関連フィールドを含む完全な”activity”が含まれます。
オリジナルのPostの場合、ここで説明されているフィールドを含む”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_objectobjectPostテキストが140文字を超える場合の完全なテキスト本文を表すオブジェクト。


“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”:
“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_rangearrayPostテキストが140文字を超える場合の表示範囲。


“display_text_range”: [
0,
142
]
verbstringユーザーが実行しているアクションの種類。
Posts、“post”
リツイート、“share”
削除されたPosts、“delete”
verbは、Tweetとtrueリツイートを区別する適切な方法です。ただし、これはtrueリツイートにのみ適用され、Xのリツイート機能を使用しない修正されたまたは引用されたTweetsには適用されません。ASのverbsの説明については
こちらをクリックしてください。
削除については、以下のサンプルペイロードに示すように、限られた数のフィールドのみが含まれることに注意してください。
“verb”: “post”
postedTimedate (ISO 8601)アクションが発生した時刻、例えばPostが投稿された時刻。


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

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
linkstringPostのパーマリンク。
“link”: “http://x.com/API/statuses/1050118621198921728
bodystringPostテキスト。

リツイートでは、Xがルートレベルのbodyの値を変更し、先頭に”RT @username”を追加し、元のテキストを切り詰めて末尾に省略記号を追加することに注意してください。したがって、リツイートの場合、アプリはobject.bodyを確認して、元のPost(リツイートされている)の変更されていないテキストを抽出していることを確認してください。
“body”: “With Cardiff, Crystal Palace, and Hull City joining the EPL from the Championship it will be a great relegation battle at the end.”
display_text_rangearray表示されるPostを示すbodyテキスト内の文字範囲を記述します。先頭に@メンションがあるPostsは0より大きい値から始まり、メディアが添付されているまたは140文字を超えるPostsは、long_objectでdisplay_text_rangeを示します。

“display_text_range”: [
14,
42
]
または
“long_object”:
“display_text_range”: [
0,
277
]…
actorobject投稿したXユーザーを表すオブジェクト。Actor ObjectはXユーザーを参照し、そのユーザーに関連するすべてのmetadataを含みます。
actor objectの詳細を参照してください
inReplyToobject該当する場合、返信されているPostを参照するJSONオブジェクト。Postへのリンクが含まれます。
“inReplyTo”:

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

location objectを参照してください
twitter_entitiesobjectXのデータフォーマットのentitiesオブジェクトで、URL、メンション、ハッシュタグのリストが含まれています。こちらのEntitiesに関するXドキュメントを参照してください。リツイートでは、Xがルートレベルで抽出するentitiesの値を切り詰める場合があることにご注意ください。そのため、リツイートの場合、アプリケーションはobject.twitter_entitiesを確認して、切り詰められていない値を使用していることを確認する必要があります。

twitter_entitiesオブジェクトの詳細を参照
twitter_extended_entitiesobject「media」を含むXのネイティブデータフォーマットからのオブジェクトです。これは、twitter_entitiesオブジェクトの「media」フィールドにデータが存在するPostに対して表示され、Postに複数の写真が存在する場合はそれらを含みます。これは複数写真のPostのメディア情報を取得する正しい場所であることにご注意ください。

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

twitter_extended_entitiesオブジェクトの詳細を参照
gnipobjectマッチングルールを示すためにアクティビティペイロードに追加されるオブジェクトで、streamまたは製品でアクティブなエンリッチメントに基づいてエンリッチされたデータが追加されます。

gnipオブジェクトの詳細を参照
edit_historyObjectPostのすべてのバージョンを示す一意の識別子です。編集されていないPostの場合、1つのIDが存在します。編集履歴があるPostの場合、複数のIDが存在し、編集の順序を反映して昇順に配列され、最新バージョンが配列の最後の位置に配置されます。

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

例:

edit_history”:
“initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
edit_controlsObject存在する場合、Postがまだ編集可能な期間と残りの編集回数を示します。Postは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。

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

例:

“edit_controls”:
“editable_until_ms”: 123
“edits_remaining”: 3
editableBoolean存在する場合、Postが公開時に編集可能であったかどうかを示します。このフィールドは動的ではなく、Postが編集可能時間制限または最大編集回数に達してもTrueからFalseに切り替わりません。以下のPost機能により、このフィールドはfalseになります:

_ Postがプロモートされている
_ Postに投票がある
_ Postが非セルフスレッドの返信である
_ Postがリツイートである(Quote Tweetsは編集可能であることに注意)
_ Postがnullcastである
_ Community Post
_ Superfollow Post
_ Collaborative Post

追加の Post 属性

AttributeTypeDescription
twitter_langstring
favoritesCountintNullable. この Post が X のユーザーにどれくらい like されたかのおおよその数を示します。

“favoritesCount”:298
retweetCountintこの Post がリツイートされた回数。例:

“retweetCount”:153

非推奨属性

フィールドType説明
geoobjectPost が作成された地点。
twitter_filter_levelstring互換性を損なわないように残されている非推奨フィールド。

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

いくつかのケースでは、Post オブジェクトに他のネストされた Posts が含まれます。ネストされたオブジェクトを扱う場合、その JSON ペイロードには複数のオブジェクトが含まれ、各 Post オブジェクトがそれぞれ自身のオブジェクトを持つことがあります。ルートレベルのオブジェクトには、実行されたアクションの種類、つまりリツイートか引用ツイートかといった情報が含まれ、共有されている「オリジナル」の Post を記述するオブジェクトが含まれる場合もあります。Extended Posts には、2017 年の更新時に破壊的変更を避けるために導入された、140 文字を超える内容を保持する拡張ネストオブジェクトが含まれます。各ネストオブジェクトのディクショナリについては以下で説明します。 リツイート リツイートのアクティビティ stream の形式には、リツイートされている元の Post を表すために、type が “activity”、verb が “note” のネストオブジェクトが含まれます。
{
	"id": "tag:search.x.com,2005:222222222222",
	"objectType": "activity",
	"verb": "share",
	"body": "RT @TheOriginalTweeter: コーヒーとアート ☕️",
	"actor": {
		"displayName": "TheRetweeter"
	},
	"object": {
		"id": "tag:search.x.com,2005:11111111111",
		"objectType": "activity",
		"verb": "post",
		"body": "コーヒーとアート ☕️",
		"actor": {
			"displayName": "TheOriginalTweeter"
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:11111111111",
			"summary": "コーヒーとアート ☕️",
			"link": "http://x.com/originaltweeter/statuses/11111111111",
			"postedTime": "2020-12-04T11:00:01.000Z"
		},
		"twitter_entities": {},
		"twitter_extended_entities": {}
	},
	"twitter_entities": {},
	"twitter_extended_entities": {},
	"gnip": {}
}
X の引用ステータス Activity Streams 形式では引用された Tweet が埋め込まれます { "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } } リツイートされた引用 Tweet:
    {
    	"id": "tag:search.x.com,2005:1293612267087384577",
    	"objectType": "activity",
    	"verb": "share",
    	"postedTime": "2020-08-12T18:16:13.000Z",
    	"generator": {},
    	"provider": {},
    	"link": "http://x.com/XDevelopers/statuses/1293612267087384577",
    	"body": "RT @compston: この最初のendpointセットを公開できることを大変嬉しく思います - 完了までにさらに多くが予定されています。@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クライアント",
    "link": "http://x.com"
  },
  "provider": {
    "objectType": "service",
    "displayName": "X",
    "link": "http://www.x.com"
  },
  "link": "http://x.com/API/statuses/1050118621198921728",
  "body": "より多くの表現を可能にするため、性別や肌の色の修飾子を含むすべての絵文字を同等にカウントするようになりました… https://t.co/MkGjXf9aXm",
  "long_object": {
    "body": "より多くの表現を可能にするため、性別や肌の色の修飾子を含むすべての絵文字を同等にカウントするようになりました 👍🏻👍🏽👍🏿。これはオープンソースライブラリであるTwitter-Textに反映されています。\n\nTwitter-Textを使用していますか?詳細についてはフォーラムの投稿をご覧ください:https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "twitter_entities": {twitter_entitiesオブジェクトを参照},
  "actor": {actorオブジェクトを参照},
  "object": {
    "objectType": "note",
    "id": "object:search.x.com,2005:1050118621198921728",
    "summary": "より多くの表現を可能にするため、性別や肌の色の修飾子を含むすべての絵文字を同等にカウントするようになりました… 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": {gnipオブジェクトを参照},
  "twitter_filter_level": "low"
}

Actor オブジェクト

Actor オブジェクトには、アクティビティを作成した X User を表す X User アカウントの metadata が含まれます。

データ辞書

属性説明
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 の場合、このユーザーが自分の Posts を非公開にしていることを示します。詳しくは About Public and Protected Posts を参照。例:

“protected”: true
verifiedBooleantrue の場合、ユーザーが認証済みアカウントであることを示します。詳しくは Verified Accounts を参照。例:

“verified”: false
followersCountIntこのアカウントの現在のフォロワー数。特定の障害時には、このフィールドが一時的に「0」を示すことがあります。例:

“followers_count”: 21
friendsCountIntこのアカウントがフォローしているユーザー数(いわゆる「フォロー中」)。特定の障害時には、このフィールドが一時的に「0」を示すことがあります。例:

“friends_count”: 32
listedCountIntこのユーザーがメンバーである公開 List の数。例:

“listed_count”: 9274
favoritesCountIntこのユーザーがアカウントの存続期間中に like した Posts の数。フィールド名は歴史的理由によりイギリス英語の綴りを使用。例:

“favourites_count”: 13
statusesCountIntユーザーが投稿した Posts(リツイートを含む)の数。例:

“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

非推奨(廃止予定)属性

フィールド説明
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": "変更やサービス問題についてのTweet。詳細は@XDevelopersをフォローしてください。",
    "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 オブジェクト

Location オブジェクトは、X アカウントレベルで設定された actor オブジェクト内、または gnip オブジェクト の profileLocations オブジェクト内に存在する場合があります。Location オブジェクトは place のオブジェクト type を持ち、name、address、または緯度経度(地理座標)を含むことができます。Location オブジェクトは、ネイティブのエンリッチド形式における Geo に類似しています。

位置データ辞書

フィールド説明
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を参照
countryCodeString当該場所を含む国を示す短縮国コード。例:

“countryCode”: “US”
countryString当該場所を含む国名。例:

“country”: “United States”

profileLocations 派生オブジェクト

FieldTypeDescription
addressobjectgnip object 内の profileLocation の location オブジェクトに含まれます。 profile geo enrichment によって導出された場所の住所。 粒度はケースにより異なります。

“address”: {

**          “country”: “United States”,

          “countryCode”: “US”,

          “locality”: “Providence”,

          “region”: “Rhode Island”,

          “subRegion”: “Providence County”

        }**
geoobjectgnip object 内の profileLocation の location オブジェクトに含まれます。 profile geo enrichment によって導出された場所の重心座標。

“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": "カリフォルニア州、アメリカ"
    }

X entities object

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 は、ネイティブの拡張形式で示されているものと同一の形式およびデータ辞書に従います。詳しくは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 オブジェクトには、実行中のエンリッチメントによって追加された metadata と、そのアクティビティに一致したルールの情報が含まれます。

データ辞書

フィールドタイプ説明
matching_rulesarrayアクティビティが一致したルールを示すマッチングルールオブジェクトの配列。
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarrayアクティビティ内のリンクの配列と、URL 展開(アンワインド)エンリッチメント用の展開済み 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 エンリッチメントにより導出されたロケーションオブジェクト。

**    “profileLocations”: [

      {

        “address”: {

“country”:** “Canada”,

“countryCode”: “CA”,

“locality”: “Toronto”,

“region”: “Ontario”

**        },

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

**        “geo”: {

          “coordinates”: [

-79.4163
,

43.70011

          ],

“type”:** “point”

**        },

“objectType”:** “place”

**      }

    ]

  }**

例:

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

Activity streams のペイロード例

Post のアクティビティ
{
	"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": "新しいTweetペイロード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": "#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:1307025659294674945",
		"summary": "新しいTweetペイロード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": "X API v2の新しいTweetペイロードについて",
			"expanded_url_description": "Xは最近、新機能を提供するために一から再構築された新しいX API v2を発表しました..."
		}]
	},
	"twitter_filter_level": "low"
}
返信Postのアクティビティ
{
	"id": "tag:search.x.com,2005:1296887316556980230",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-21T19:10:05.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/1296887316556980230",
	"body": "@PennMedCDHがXデータを使用してCOVID-19の健康危機を理解する方法をご覧ください 📊\n\nhttps://t.co/1tdA8uDWes",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopersチームの声であり、#APIに関連するアップデート、ニュース、イベントの公式情報源です。",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296887316556980230",
		"summary": "@PennMedCDHがXデータを使用してCOVID-19の健康危機を理解する方法をご覧ください 📊\n\nhttps://t.co/1tdA8uDWes",
		"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
		"postedTime": "2020-08-21T19:10:05.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1296887091901718529"
	},
	"favoritesCount": 26,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 9,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"expanded_status": 200,
			"expanded_url_title": "Penn Medicine Center for Digital Health",
			"expanded_url_description": "Penn Med Center for Digital Healthは、感情、報告された症状、州別データ分析、COVID-19アウトブレイクの境界データを詳述するチャートを含むCOVID-19 Xマップを作成しました。さらに、Penn Med With Youイニシアチブでは、Xからの地域別集計情報を使用してウェブサイトとテキストメッセージサービスに情報を提供しています。このサービスでは、この情報を使用して関連性の高い適時なリソースを配信しています。"
		}]
	},
	"twitter_filter_level": "low"
}
long_object を伴う Post のアクティビティ
{
	"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": "返信を非表示にするendpointが本日リリースされました!\n\n開発者はTweetへの返信を非表示にできます - これは開発者が… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "返信を非表示にするendpointが本日リリースされました!\n\n開発者はTweetへの返信を非表示にできます - これは開発者が#XAPIを使用してパブリック会話の健全性向上を支援する重要な方法です。\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopersチームの声であり、#XAPIに関連するアップデート、ニュース、イベントの公式情報源です。",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296121314218897408",
		"summary": "返信を非表示にするendpointが本日リリースされました!\n\n開発者はTweetへの返信を非表示にできます - これは開発者が… https://t.co/VyfXs1RTXn",
		"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
		"postedTime": "2020-08-19T16:26:16.000Z"
	},
	"favoritesCount": 172,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 54,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/khXhTurm9x",
			"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
			"expanded_status": 200,
			"expanded_url_title": "新しいX APIで返信の非表示機能が利用可能になりました",
			"expanded_url_description": "本日、新しいX APIでの返信を非表示にするendpointの一般提供開始を発表できることを嬉しく思います。返信を非表示にするendpointを使用すると、ユーザーが自分のTweetへの返信を非表示または再表示するためのツールを構築できます。ユーザーは、虐待的、気を散らす、誤解を招く、または会話をより魅力的にするためのコメントへの注目を減らすなど、さまざまな理由で返信を管理します。このendpointを通じて、Xのユーザーが返信をより迅速かつ効率的に非表示または再表示できるツールを構築できます..."
		}]
	},
	"twitter_filter_level": "low"
}
twitter_extended_entities を含む Post のアクティビティ
{
	"id": "tag:search.x.com,2005:1293593516040269825",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-12T17:01:42.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
	"body": "ついに登場!🥁 新しい #XAPI をご紹介します。\n\n開発者コミュニティにより良いサービスを提供するため、X API v2 を一から再構築しています… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "ついに登場!🥁 新しい #XAPI をご紹介します。\n\n開発者コミュニティにより良いサービスを提供するため、X API v2 を一から再構築しています。今日のローンチは始まりに過ぎません。\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"twitter_extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 156,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"display_text_range": [
		0,
		140
	],
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers チームの公式アカウントです。#TwitterAPI に関するアップデート、ニュース、イベント情報をお届けします。",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1293593516040269825",
		"summary": "ついに登場!🥁 新しい#APIをご紹介します。\n\nX API v2を一から再構築して… https://t.co/UeCndQGMjx",
		"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
		"postedTime": "2020-08-12T17:01:42.000Z"
	},
	"favoritesCount": 2844,
	"twitter_entities": {
		"hashtags": [{
			"text": "API",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 958,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/32VrwpGaJw",
			"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
			"expanded_status": 200,
			"expanded_url_title": "新しく改良されたX APIのご紹介",
			"expanded_url_description": "新しいX APIのご紹介 - 開発者がXで起こっているパブリックな会話に世界をつなげるお手伝いができるよう、新機能をより迅速に提供するために一から再構築されました。"
		}]
	},
	"twitter_filter_level": "low"
}
リツイート活動
{
	"id": "tag:search.x.com,2005:1229851574555508737",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-18T19:33:59.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1229851574555508737",
	"body": "RT @suhemparack: APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetやトレンドを見ることができます!\n\nこちらをご覧ください…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "#XDevelopers チームの公式アカウントです。#XAPI に関するアップデート、ニュース、イベント情報をお届けします。",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1229843515603144704",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-18T19:01:58.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/suhemparack/statuses/1229843515603144704",
		"body": "APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetやトレンドを見ることができます!\n\nこちらをご覧ください… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "APLを使ってX用のAlexa Skillを作りました。Echo ShowでTweetやトレンドを見ることができます!\n\nこちらをご覧ください 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"twitter_entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/XDevelopers/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:857699969263964161",
			"link": "http://www.x.com/suhemparack",
			"displayName": "Suhem Parack",
			"postedTime": "2017-04-27T20:56:22.883Z",
			"image": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"summary": "X アカデミック研究向けデベロッパーリレーションズ。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 Skillを作りました。Echo ShowでTweetやトレンドを見ることができます!\n\nこちらをご覧ください… https://t.co/RP9NgltX7i",
			"link": "http://x.com/suhemparack/statuses/1229843515603144704",
			"postedTime": "2020-02-18T19:01:58.000Z"
		},
		"favoritesCount": 71,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 19,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/l5J8wq748G",
			"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
			"expanded_status": 200,
			"expanded_url_title": null,
			"expanded_url_description": null
		}]
	},
	"twitter_filter_level": "low"
}
引用Tweetのアクティビティ
{
 	"id": "tag:search.x.com,2005:1328399838128467969",
 	"objectType": "activity",
 	"verb": "post",
 	"postedTime": "2020-11-16T18:09:36.000Z",
 	"generator": {
 		"displayName": "X Web App",
 		"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 endpointは廃止されました。X API v2についてご質問やサポートが必要な場合は、フォーラムでお知らせください! https://t.co/ahQvTYaOcZ",
 	"long_object": {
 		"body": "予定通り、以下で参照されているLabs v2 endpointは廃止されました。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 endpointは廃止されました。X API 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 endpointは11月16日に廃止されます。Labs v2最近の検索 Labs v2返信の非表示 これらのendpointを呼び出すと、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 App",
 			"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月16日に廃止されることをお知らせします!v2 #XAPIで利用可能な新しい返信の非表示と最近の検索endpointへの移行をお勧めします。詳細: https://t.co/EEWN2Q9aXh",
 		"long_object": {
 			"body": "👋 X Developer Labs v2の返信の非表示と最近の検索機能が来週月曜日、11月16日に廃止されることをお知らせします!v2 #XAPIで利用可能な新しい返信の非表示と最近の検索endpointへの移行をお勧めします。詳細: 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": "👋 X Developer Labs v2の返信の非表示と最近の検索機能が来週月曜日、11月16日に廃止されることをお知らせします!v2 #XAPIで利用可能な新しい返信の非表示と最近の検索endpointへの移行をお勧めします。詳細: https://t.co/EEWN2Q9aXh",
 			"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 			"postedTime": "2020-11-12T22:12:32.000Z"
 		},
 		"favoritesCount": 33,
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/EEWN2Q9aXh",
 				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"twitter_lang": "en",
 		"twitter_filter_level": "low"
 	}
 }
リツイートされた引用Tweetのアクティビティ
{
	"id": "tag:search.x.com,2005:1225470895902412800",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-06T17:26:44.000Z",
	"generator": {
		"displayName": "X for iPhone",
		"link": "http://x.com/download/iphone"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1225470895902412800",
	"body": "RT @AureliaSpecker: 📣 昨年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チームの公式アカウントです。#X 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": {
		"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の新しい検索endpointを使用したリファクタリング版をぜひチェックしてください 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDevelopers @API https://t.co/dXrJYvn3hY",
			"display_text_range": [
				0,
				229
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							176,
							189
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							190,
							205
						]
					}
				],
				"urls": [{
						"url": "https://t.co/87XIPZmZBJ",
						"expanded_url": "https://bit.ly/2OrnrCC",
						"display_url": "bit.ly/2OrnrCC",
						"indices": [
							151,
							174
						]
					},
					{
						"url": "https://t.co/dXrJYvn3hY",
						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
						"display_url": "x.com/AureliaSpecker…",
						"indices": [
							230,
							253
						]
					}
				],
				"user_mentions": [{
						"screen_name": "XDevelopers",
						"name": "X Dev",
						"id": 2244994945,
						"id_str": "2244994945",
						"indices": [
							206,
							217
						]
					},
					{
						"screen_name": "API",
						"name": "X API",
						"id": 6253282,
						"id_str": "6253282",
						"indices": [
							218,
							229
						]
					}
				],
				"symbols": []
			}
		},
		"display_text_range": [
			0,
			140
		],
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • ロンドン在住のスイス人 • 観葉植物の母 • @_dormrodの専属美容師",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "London, UK"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1224709550214873090",
			"summary": "📣 昨年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 Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
		"body": "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": "London, UK"
			},
			"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"
	}
}

Tweet メタデータ タイムライン

このページの目次 概要 主要な概念 X タイムライン フィルタリングのコツ 次のステップ

はじめに**

X は本質的に、公開され、リアルタイムで、グローバルなコミュニケーションネットワークです。2006 年以降、X の進化はユーザーの利用パターンや慣習、新たな製品機能や拡張によって牽引されてきました。X のデータを歴史研究に利用する場合、この進化のタイムラインを理解することは、データアーカイブから関心のある Posts を見つけ出すうえで重要です。 X はシンプルな SMS モバイル App として開始され、総合的なコミュニケーションプラットフォームへと成長しました。完全な API 群を備えたプラットフォームです。API は常に X ネットワークの柱でした。最初の API は X のローンチ直後に公開されました。2009 年に Posts のジオタグ付与が初めて導入された際には、Geo API を通じて提供されました(その後、「Post にジオタグを付ける」機能は X.com のユーザーインターフェースに統合されました)。現在、X の API は双方向のコミュニケーションネットワークを駆動し、速報や情報共有の源となっています。このグローバルかつリアルタイムな通信チャネルの上に構築できる可能性は無限に広がっています。 X は、すべての公開されている Post へのアクセスを提供する 2 つのヒストリカル API、Historical PowerTrack と Full-Archive Search API を提供しています。両 API は、関心のある Posts を検索・収集するために使用する一連の operators を提供します。これらの operators は、各 Post に関連付けられた多様な属性、たとえば Post のテキスト内容、投稿者のアカウント名、Post で共有されたリンクなど、何百もの属性にマッチします。Posts とその属性は JSON という一般的なテキストベースのデータ交換形式でエンコードされています。そのため、新機能が導入されると新しい JSON 属性が追加され、通常はそれらの属性にマッチする新しい API operators も導入されました。ユースケースに世界中で X 上に投稿された内容を listen する必要がある場合、operators がマッチ対象とする JSON の metadata がいつから利用可能になったかを理解しているほど、Historical PowerTrack のフィルターをより効果的にできます。 次に、Post の metadata の更新が、関心のあるデータシグナルの発見にどのように影響するかを理解するための前提となる、いくつかの重要な概念を紹介します。

重要な概念**

ユーザー主導の慣習からXの_ファーストクラス・オブジェクト_へ

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

Postのmetadata、可変性、更新、最新性

Postメッセージは最大文字数が定められていますが、PostのJSON記述は100を超える属性で構成されています。誰がいつ投稿したか、オリジナルのPostかリツイートかといった属性に加え、ハッシュタグ、メンション、共有リンクといった一次オブジェクトの配列も含まれます。投稿したアカウントにはユーザー(またはActor)オブジェクトがあり、ユーザーのProfileやその他のアカウントmetadataを示す多様な属性が含まれます。Profileには、短い自己紹介、ホームロケーション(自由記述テキスト)、優先言語、任意のウェブサイトリンクが含まれます。 一部のアカウントmetadataは決して変わりません(例: 数値のユーザーidや作成日)。一部は時間とともにゆるやかに変化し、他の属性はより頻繁に変化します。人は仕事を変え、引っ越しをします。企業は情報を更新します。過去のPostsを収集する際には、あるmetadataは_投稿時点の状態_であり、別のmetadataは_query送信時点の状態_であることを理解することが重要です。  すべての履歴APIにおいて、ユーザーのプロフィールの説明、表示名、プロフィールの「ホーム」に関する属性は、query時点の値に更新されます。

「ネイティブ」メディア

X.com と X のモバイルアプリでは、ボタンをクリックしてフォトギャラリーから選ぶだけで、Post に写真や動画を追加できます。これらが第一級のアクションとして統合されたため、この方法で共有された動画や写真は「ネイティブ」メディアと呼ばれます。 多くのクエリ用 Operator は、これらの「ネイティブ」リソースに対して機能します。例えば has:videoshas:imageshas:media です。これらは、X の機能を通じて共有されたメディアコンテンツにのみマッチします。X プラットフォーム外にホストされた別のメディアにマッチさせるには、URL の metadata に基づいてマッチする Operator を使用してください。 それでは、Historical PowerTrack と Full-Archive Search の製品詳細に入る前に、製品およびプラットフォームとしての X がどのように進化してきたかを見ていきましょう。 X のタイムライン 以下に、X の抜粋したタイムラインを示します。これらの X の更新の多くは、ユーザーの行動、Post の JSON 内容、query の Operator、あるいはそれらすべてに根本的な影響を与えました。X を API プラットフォームとして見ると、次の出来事は、Posts をエンコードするために使用される JSON ペイロードに何らかの影響を与えました。結果として、これらの JSON の詳細は、X の履歴 API がそれらにどのようにマッチするかに影響します。 このタイムラインの一覧は、概ね正確ですが、網羅的ではない点に留意してください。

2006

  • 10月
    • @replies が慣例として定着。
    • cashtagsが初登場。ただし株式ティッカーの言及に使われるのが一般的になるのは2009年初頭。cashtags が初登場。ただし株式ティッカーの言及に使われるのが一般的になるのは2009年初頭。cashtags は2012年6月にクリック可能・検索可能なリンクになった。
  • 11月 - Favorites を導入。

2007

  • 1月 - @replies が、in_reply_to metadata を備えた UI の返信ボタンにより、第一級のオブジェクトとなる。
  • 4月 - リツイートが慣例として定着する。
  • 8月 - #hashtags が Posts の検索・整理に用いられる主要なツールとして登場する。

2009

  • 2月 - 株式ティッカーを議論するための一般的な慣例として$cashtagsが普及。
  • 5月 - リツイートの「ベータ」が導入され、Post本文の先頭に「Via @」が付与される。
  • 6月 - 認証済みアカウントが導入。
  • 8月 - リツイートが「RT @」パターンと新しい retweet_status metadata を備えた第一級オブジェクトになる。
  • 10月 - List機能をリリース。
  • 11月 - Post Geotagging API をリリースし、サードパーティ製アプリ経由でユーザーが位置情報を共有するための初の方法を提供。

2010

  • 6月 - Posts のジオタグ付けに対応する X Places を導入。
  • 8月 - ウェブサイト向けの Post ボタンを提供開始。リンクの共有が容易に。

2011

  • 5月 - ウェブサイトに関連するアカウントを簡単にフォローできる「フォローボタン」を導入。
  • 8月 - ネイティブ写真機能を導入。

2012

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

2014

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

2015

  • 4月 - XのPostユーザーインターフェースのデザイン変更により、位置情報付きのPostsが減少。
  • 10月 - X Pollsを導入。Pollsは当初、24時間の投票期間で2つの選択肢に対応していました。11月には、投票期間を5分〜7日とし、4つの選択肢に対応開始。Pollのmetadataは2017年2月に利用可能に(ネイティブのエンリッチ形式のみ)。

2016

2017

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

偽陰性を見極める

フィルター作成における重要なポイントとして、metadata に対してマッチする各 Operator には「適用開始時期(born on)」があることが挙げられます。Post の投稿後に導入された metadata に作用する Operator でフィルターを組むと、偽陰性が発生します。たとえば、「snow」に言及し、かつ動画を共有しているすべての Posts に関心があるとします。ネイティブ 動画を持つ Posts にマッチする has:videos Operator でルールを作成した場合、その句は 2015 年以前の Posts にはマッチしません。 しかし、動画共有は 2015 年よりずっと前から X で一般的でした。当時はユーザーが外部ホストの動画リンクを共有していましたが、2015 年に X はプラットフォームに「動画共有」機能を新たに組み込みました。こうした以前の対象 Posts を見つけるには、url:"youtube.com" のようなルール句を含めます。 なお、Search APIs では、インデックス再構築に伴い metadata が「バックフィル」される例があります。好例が cashtagsで、これは2009年に株式シンボルの議論で広く使われるようになりました。2015年にcashtags で、これは 2009 年に株式シンボルの議論で広く使われるようになりました。2015 年に cashtag operator が導入された後、Search インデックスが再構築され、その過程でシンボルのエンティティがすべての Post 本文から抽出されました。これは、$ が主にスラングとして使われていた 2006 年初頭も含みます(“I hope it nownow $oon!”)。

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

一部のmetadata(たとえば X アカウントの数値 id)は初期から存在しており(変更されないアカウントのmetadataの一例)、その一方で、別のmetadataは2006年のX開始からしばらく経って導入されました。新たに導入されたmetadataの例としては、リツイートに関するmetadata、Postの位置情報、URLのタイトルと説明、そして「ネイティブ」メディアなどがあります。以下では、こうしたXプラットフォームの更新によって根本的な影響を受けた、一般的なPost属性の種類をいくつか示します。 これらに対するフィルタリング/マッチングの挙動は、多くの場合、利用する履歴Post APIによって異なります。研究やユースケースに最適な製品を判断する一助として、以下の属性詳細には高レベルの製品情報も含めています。

X プロフィール

X は本質的にグローバルなリアルタイム通信チャネルであるため、Post データを用いた研究では「誰が発信しているか」に重点が置かれるのが一般的です。多くの場合、X ユーザーがどこを拠点としているかを知ることは有用です。アカウントの自己紹介に記載された興味・関心や趣味の情報から、関連する Post を見つけられることもよくあります。関心のあるアカウントの Posts を継続的に収集したいというニーズも非常に一般的です。プロフィール属性は、これらすべてのユースケースにおいて重要です。 X 上のすべてのアカウントにはプロフィールがあり、X の @handle、表示名、短い自己紹介、居住地(ユーザーが入力する自由記述テキスト)、フォロワー数などの metadata が含まれます。数値のユーザー id やアカウントの作成日時のように決して変わらない属性もあります。一方で、投稿した Posts の数やフォロー中・フォロワーの数のように、日次・週次・月次で変化するものもあります。表示名、居住地、自己紹介のように、いつでも変更可能ではあるものの、比較的変更頻度が低い属性もあります。 すべての Post の JSON ペイロードには、その Post の投稿者に関するアカウントプロフィールの metadata が含まれます。リツイートの場合は、元の Post を投稿したアカウントのプロフィール metadata も含まれます。 Post のプロフィール metadata の可変性は、利用する履歴系プロダクトに完全に依存します。Search APIs は、取得時点のプロフィール設定で履歴の Posts を提供します。Historical PowerTrack では、2011 年以前のデータを除き、Post が投稿された時点のプロフィールが反映されます。2011 年より古い Posts については、プロフィール metadata は 2011 年 9 月時点のプロフィールを反映します。

オリジナルのPostとリツイート

リツイートは、ユーザー発の慣習が公式のオブジェクトになった好例です。リツイートは、コンテンツを他者へ「転送」する手段として生まれました。もともとは、Postをコピー&ペーストし、先頭に「RT @」というパターンを付ける手作業でしたが、その後、新しいリツイートボタンの導入により自動化され、JSONのmetadataも付与されました。こうして「公式」なリツイートが誕生し、リツイートという行為は第一級のPostイベントとして扱われるようになりました。新しいリツイートボタンとともに、オリジナルのPostの完全なペイロードなどの新たなmetadataも導入されました。 Postがオリジナルか共有かは、よく使われるフィルタリングの「切り替え基準」です。場合によっては、オリジナルのコンテンツのみが必要なこともあります。一方で、Postのエンゲージメントが最優先となるケースでは、リツイートが重要になります。PowerTrackの is:retweet オペレーターにより、リツイートを含めるか除外するかを選択できます。2009年8月より前のdataを取得する場合は、リツイートの一致(または非一致)判定のために2つの戦略を用意する必要があります。2009年8月以前は、Post本文自体について「RT @」パターンに対し、厳密なフレーズマッチで一致を確認する必要があります。2009年8月以降は、is:retweet オペレーターが利用できます。

Postの言語分類

Postがどの言語で記述されているかは、一般的に関心の高い情報です。Postの言語は、そのPostの所在地の推定に役立ち、分析や表示の目的では特定の言語だけが必要となることもよくあります。(Xのプロフィールには優先言語設定もあります。) Postの言語分類でフィルタリングする場合、Xの履歴向けプロダクト(Search API と Historical PowerTrack)には大きな違いがあります。Searchアーカイブの構築時に、すべてのPostはXの言語分類でバックフィルされました。したがって、lang: オペレーターはPostアーカイブ全体で利用できます。Historical PowerTrackでは、Xの言語分類metadataは2013年3月26日以降のアーカイブで利用可能です。 

Posts のジオリファレンス

ある Post がどこで投稿されたか(すなわち、ジオリファレンスすること)を把握できることは、多くのユースケースで重要です。Posts をジオリファレンスする主な方法は次の3つです。
  • Post メッセージ内の地理的参照
  • ユーザーによってジオタグ付けされた Posts
  • ユーザーが設定したアカウントプロフィールの「ホーム」位置情報
Postメッセージにおける地理参照
Postメッセージ内の地理参照に基づくマッチングは、ローカルな知識に依存するためしばしば最も難しい方法ですが、全Postアーカイブを対象に実施できます。以下は、“golden gate”フィルターに基づきサンフランシスコ周辺を対象とした、2006年のジオリファレンスによるマッチの例です: https://x.com/biz/statuses/28311
ユーザーがジオタグを付与したPosts
2009年11月、Xは正確な位置情報でPostsにジオタグを付与できるようにするPost Geotagging APIを導入しました。2010年6月には、会場、近隣地区、または町といったスケールの地理的領域を表すX Placesを導入しました。いずれの方法でも、約1〜2%のPostsにジオタグが付与されています。 利用可能なジオタグ履歴は、使用しているHistorical APIに依存します。Search APIsでは、いくつかのGeo OperatorsによるPostsのマッチングが可能になったのが2010年3月で、その他のオペレーターでは2015年2月です。Historical PowerTrackを使用している場合、ジオリファレンスは2011年9月1日から始まります。Historical PowerTrackアーカイブの構築時点で、この日付より前のジオタグはすべて含まれていません。
ユーザーが設定するアカウントプロフィールの「ホーム」所在地
すべてのXユーザーは、ホーム所在地を示すためにProfile Locationを設定できます。何百万人ものXユーザーがこの情報を提供しており、X Firehoseに含まれる地理データ量の大幅な増加につながっています。この所在地metadataは、正規化されていないユーザー生成の自由形式文字列です。約30%のアカウントには、国レベルまで解決可能なProfile Geo metadataがあります。 Postのジオ情報と同様に、照合方法や利用可能な期間は、使用しているHistorical APIによって異なります。Historical PowerTrackでは、これらの自由形式文字列に対して独自のカスタム照合を試すことができます。このプロセスを容易にするため、Xは可能な場合にジオコーディングを実行し、正規化されたmetadataと対応するOperatorsを提供するProfile Geo Enrichmentも提供しています。Profile Geo OperatorsはHistorical PowerTrackとSearch APIsの両方で利用可能です。Historical PowerTrackでは、これらのProfile Geo metadataは2014年6月から利用可能です。Search APIsでは、このmetadataは2015年2月から利用可能です。 ウェブページのリンク、写真、動画の共有は、常にXの基本的なユースケースでした。初期には、これらの操作はすべて、Post本文にURLリンクを含める形で行われていました。2011年には、Xは写真共有機能をユーザーインターフェースに直接統合しました。2016年にはネイティブ動画が追加されました。 この経緯から、これらのコンテンツにマッチさせるための多様なフィルタリング用オペレーターが用意されています。Postに共有リンク、写真、動画が含まれているかどうかに基づいてマッチする一連のオペレーターがあります。さらに、Xで共有されるURLの多くは、Postの文字数消費を抑えるために短縮される(例: bitly や tinyurl などのサービスで生成)ため、Xはマッチに使用できる完全な展開URLを生成するdataエンリッチメントを提供しています。たとえば、Xと早期警戒システムについて論じるリンクを含むPostにマッチさせたい場合、「severe weather communication」を参照するフィルターは、この http://bit.ly/1XV1tG4 のURLを含むPostにマッチします。 2012年3月、expanded URL enrichment が導入されました。これ以前は、Postのペイロードにはユーザーが提供したURLのみが含まれていました。そのため、ユーザーが短縮URLを含めた場合、関心のある(展開済みの)URLにマッチさせるのは困難でした。Historical PowerTrackとSearch APIsの両方で、これらのmetadataは2012年3月から利用可能です。 2016年7月には、enhanced URL enrichment が導入されました。この拡張版では、PostのペイロードにWebサイトのHTMLタイトルと説明が含まれ、それらに対してマッチするためのオペレーターも提供されます。Historical PowerTrackでは、これらのmetadataは2016年7月から利用可能になります。Search APIsでは、これらのmetadataは2014年12月から提供され始めます。 2016年9月、Xは「ネイティブ添付」を導入し、末尾の共有リンクがPostの140文字制限にカウントされないようになりました。これらの共有リンクには、両方のURLエンリッチメントが引き続き適用されます。 URLフィルタリングに関する製品固有の詳細については、該当する記事を参照してください。
I