比較ガイドをご覧ください:
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オブジェクト(ここでは
{}
記法で表現)が含まれます:
利用可能なデータ形式
注意: Enterprise データ API には Enriched Native 形式の使用を強く推奨します。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 データ製品向けに提供される各種エンリッチメントを含みます。
- Enriched Native 形式には、poll metadata など 2017 年以降に追加された新しいメタデータがすべて含まれており、reply_count や quote_count などの追加の metrics も含まれます。
- Activity Streams 形式は、2017 年の文字数アップデート以降、新しいメタデータやエンリッチメントで更新されていません。
- Expanded and enhanced URLs enrichment
- Matching rules enrichment
- Poll metadata enrichment
- Profile geo enrichment
データ形式ごとのオブジェクト比較
ネイティブ拡張 | 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/a | Link 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 オブジェクト
id
、created_at
、text
といった基本的な属性を含む、多数の「ルートレベル」属性があります。Post オブジェクトには、user
、entities
、extended_entities
といった入れ子のオブジェクトも含まれます。さらに、retweeted_status、quoted_status、extended_tweet などの入れ子の Post オブジェクトも含まれます。加えて、ネイティブ強化形式には matching_rules オブジェクトも含まれます。
X データ辞書
属性 | 型 | 説明 |
---|---|---|
created_at | String | このPostが作成されたUTC時刻。例: “created_at”: “Wed Oct 10 20:19:24 +0000 2018” |
id | Int64 | このPostの一意識別子の整数表現。この数値は53ビットを超えており、一部のプログラミング言語では解釈時に問題やサイレントエラーが発生する可能性があります。この識別子の保存には符号付き64ビット整数を使用することが安全です。安全のため、**id_str **を使用して識別子を取得してください。詳細についてはX IDsを参照してください。例:“id”:1050118621198921728 |
id_str | String | このPostの一意識別子の文字列表現。実装では**id **の大きな整数ではなく、こちらを使用してください。例:“id_str”:“1050118621198921728” |
text | String | ステータス更新の実際の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” |
source | String | Postの投稿に使用されたユーティリティ(HTML形式の文字列として)。Xウェブサイトからの投稿のソース値は**web **です。例: “source”:“X Web Client” |
truncated | Boolean | text パラメータの値が切り詰められたかどうかを示します。例えば、リツイートが元のPostテキストの140文字制限を超えた結果として切り詰められた場合などです。切り詰められたテキストは... のような省略記号で終わります。Xは現在、長いPostを切り詰めるのではなく拒否するため、大多数のPostでこれはfalse に設定されます。ネイティブリツイートではトップレベルのtext プロパティが短縮される場合がありますが、元のテキストはretweeted_status オブジェクト下で利用可能であり、truncated パラメータは元のステータスの値(ほとんどの場合false )に設定されることに注意してください。例:“truncated”:true |
in_reply_to_status_id | Int64 | Nullable。 表現されたPostが返信の場合、このフィールドには元のPostのIDの整数表現が含まれます。例: “in_reply_to_status_id”:1051222721923756032 |
in_reply_to_status_id_str | String | Nullable。 表現されたPostが返信の場合、このフィールドには元のPostのIDの文字列表現が含まれます。例: “in_reply_to_status_id_str”:“1051222721923756032” |
in_reply_to_user_id | Int64 | Nullable。 表現されたPostが返信の場合、このフィールドには元のPostの作成者IDの整数表現が含まれます。これは必ずしもPost内で直接言及されたユーザーとは限りません。例: “in_reply_to_user_id”:6253282 |
in_reply_to_user_id_str | String | Nullable。 表現されたPostが返信の場合、このフィールドには元のPostの作成者IDの文字列表現が含まれます。これは必ずしもPost内で直接言及されたユーザーとは限りません。例: “in_reply_to_user_id_str”:“6253282” |
in_reply_to_screen_name | String | Nullable。 表現された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_images/942858479592554497/BbazLO9L_normal.jpg”, “profile_banner_url”: “https://pbs.twimg.com/profile_banners/6253282/1497491515”, “default_profile”: false, “default_profile_image”: false, “following”: null, “follow_request_sent”: null, “notifications”: null } } |
coordinates | Coordinates | Nullable. ユーザーまたはクライアントアプリケーションによって報告された、このPostの地理的位置を表します。内部のcoordinates配列はgeoJSON形式(経度が最初、次に緯度)でフォーマットされています。例: “coordinates”: <br/> “coordinates”: [ -75.14310264, 40.05701649 ], “type”:“Point” } |
place | Places | Nullable 存在する場合、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_id | Int64 | このフィールドは、Postが引用Tweetの場合にのみ表示されます。このフィールドには、引用されたTweetのPost IDの整数値が含まれます。例: “quoted_status_id”:1050119905717055488 |
quoted_status_id_str | String | このフィールドは、Postが引用Tweetの場合にのみ表示されます。これは引用されたTweetのPost IDの文字列表現です。例: “quoted_status_id_str”:“1050119905717055488” |
is_quote_status | Boolean | これが引用Tweetかどうかを示します。例: “is_quote_status”:false |
quoted_status | Post | このフィールドは、Postが引用Tweetの場合にのみ表示されます。この属性には、引用された元のPostのPost オブジェクトが含まれます。 |
retweeted_status | Post | ユーザーは他のユーザーが作成したPostをリツイートすることで、その配信を拡大することができます。リツイートは、**retweeted_status **属性の存在により、通常のPostと区別できます。この属性には、リツイートされた元のPostの表現が含まれます。リツイートのリツイートは中間のリツイートの表現を示さず、元のPostのみを示すことに注意してください。(ユーザーは自分が作成したリツイートを削除することで、リツイートを取り消すこともできます。) |
quote_count | Integer | Nullable. このPostがXユーザーによって引用された回数の概算を示します。例: “quote_count”:33 注:このオブジェクトはPremiumおよびEnterpriseティア製品でのみ利用可能です。 |
reply_count | Int | このPostに返信された回数。例: “reply_count”:30 注:このオブジェクトはPremiumおよびEnterpriseティア製品でのみ利用可能です。 |
retweet_count | Int | このPostがリツイートされた回数。例: “retweet_count”:160 |
favorite_count | Integer | Nullable. このPostがXユーザーによっていいねされた回数の概算を示します。例: “favorite_count”:295 |
entities | Entities | Postのテキストから解析されたエンティティ。Entities in X Objectsも参照してください。例: “entities”: <br/> “hashtags”:[], “urls”:[], “user_mentions”:[], “media”:[], “symbols”:[] “polls”:[] } |
extended_entities | Extended Entities | 1つから4つのネイティブ写真、または1つの動画、または1つのアニメーションGIFがPostに含まれている場合、配列’media’metadataが含まれます。これは引用Tweetでも利用可能です。Entities in X Objectsも参照してください。例: “entities”: <br/> “media”:[] } |
favorited | Boolean | Nullable. このPostが認証ユーザーによっていいねされているかどうかを示します。例: “favorited”:true |
retweeted | Boolean | このPostが認証ユーザーによってリツイートされているかどうかを示します。例: “retweeted”:false |
possibly_sensitive | Boolean | Nullable. このフィールドは、コンテンツがセンシティブとして認識される可能性があることを示します。Post作成者は自分のアカウント設定内で「投稿するメディアにセンシティブな内容が含まれる可能性があることをマークする」を選択でき、その後作成される各Postにこのフラグが設定されます。 これはX内部サポートエージェントによって判断およびラベル付けされる場合もあります。 “possibly_sensitive”:false |
filter_level | String | このPostをstreamするために使用できるfilter_levelパラメータの最大値を示します。つまり、medium の値はnone 、low 、**medium **のstreamでstreamされます。例: “filter_level”: “low” |
lang | String | Nullable. 存在する場合、Postテキストの機械検出された言語に対応するBCP 47言語識別子、または言語が検出できなかった場合は**und **を示します。例: “lang”: “en” |
edit_history | Object | Postのすべてのバージョンを示す一意の識別子。編集されていないPostの場合、IDは1つになります。編集履歴があるPostの場合、編集の順序を反映して昇順に配列された複数のIDがあり、最新バージョンが配列の最後の位置にあります。 Post IDを使用して、Postの以前のバージョンを取得して表示できます。 例: edit_history”: <br/> “initial_tweet_id”: “1283764123” “edit_tweet_ids”: [“1283764123”, “1394263866”] } |
edit_controls | Object | 存在する場合、Postがまだ編集可能な期間と残りの編集回数を示します。Postは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。 Post IDを使用して、Postの以前のバージョンを取得して表示できます。 例: “edit_controls”: <br/> “editable_until_ms”: 123 “edits_remaining”: 3 } |
editable | Boolean | 存在する場合、Postが公開時に編集可能であったかどうかを示します。このフィールドは動的ではなく、Postが編集可能時間制限または最大編集回数に達してもTrueからFalseに切り替わりません。以下のPost機能により、このフィールドはfalseになります: _ Postがプロモーション済み _ Postに投票がある _ Postが非セルフスレッド返信 _ Postがリツイート(Quote Tweetsは編集可能であることに注意) _ Postがnullcast _ Community Post _ Superfollow Post _ Collaborative Post |
matching_rules | Array of Rule Objects | X SearchやPowerTrackなどの_フィルタリング_製品に存在します。Postにマッチしたルールに関連付けられた_id_と_tag_を提供します。マッチングルールの詳細はこちらをご覧ください。PowerTrackでは、複数のルールが1つのPostにマッチする場合があります。 例: “matching_rules”: ” [<br/> “tag”: “xapi emojis”, “id”: 1050118621198921728, “id_str”: “1050118621198921728” }]“ |
追加の Post 属性
Attribute | Type | Description |
---|---|---|
current_user_retweet | Object | 視点依存 include_my_retweet パラメータに対応し、true に設定されたメソッドでのみ返されます。ユーザー自身による当該 Post のリツイートの Post ID(存在する場合)を示します。例: “current_user_retweet”: <br/> “id”: 6253282, “id_str”: “6253282” } |
scopes | Object | 当該 Post の配信対象となる意図的な文脈を示すキーと値のペアの集合。現在は X の Promoted Products で使用されています。例: “scopes”:{“followers”:false} |
withheld_copyright | Boolean | このフィールドが存在し、かつ “true” の場合、このコンテンツが DMCA complaint により差し止められていることを示します。例: “withheld_copyright”: true |
withheld_in_countries | Array of String | このフィールドが存在する場合、このコンテンツが差し止められている大文字の 2 文字の国コード の一覧を示します。X はこのフィールドに対して以下の非国コード値をサポートします: “XX” - すべての国でコンテンツが差し止められている/“XY” - DMCA リクエストによりコンテンツが差し止められている。 例: “withheld_in_countries”: [“GR”, “HK”, “MY”] |
withheld_scope | String | このフィールドが存在する場合、差し止めの対象が “status” か “user” かを示します。 例: “withheld_scope”: “status” |
非推奨の属性
フィールド | type | 説明 |
geo | Object | 非推奨。 Null 許容。 代わりに coordinates フィールドを使用してください。この非推奨属性では座標が [lat, long] の形式ですが、他のすべての Post の地理情報は [long, lat] の形式です。 |
入れ子の Post オブジェクト
引用ツイート
拡張 Posts
ネイティブ拡張ユーザーオブジェクト
ユーザーdata辞書
属性 | 型 | 説明 |
---|---|---|
id | Int64 | このユーザーの一意識別子の整数表現。この数値は53ビットを超えており、一部のプログラミング言語では解釈時に問題やサイレント欠陥が発生する可能性があります。この識別子の保存には符号付き64ビット整数を使用することが安全です。安全のため、識別子の取得にはid_str を使用してください。詳細についてはX IDsを参照してください。例:“id”: 6253282 |
id_str | String | このユーザーの一意識別子の文字列表現。実装では、id の大きく、場合によっては処理できない整数ではなく、こちらを使用する必要があります。例:“id_str”: “6253282” |
name | String | ユーザーが定義した名前。必ずしも人の名前ではありません。通常は50文字に制限されていますが、変更される可能性があります。例: “name”: “API” |
screen_name | String | このユーザーが自分を識別するスクリーン名、ハンドル、またはエイリアス。screen_nameは一意ですが変更される可能性があります。可能な限りユーザー識別子としてid_str を使用してください。通常は最大15文字ですが、一部の履歴アカウントではより長い名前が存在する場合があります。例:“screen_name”: “api” |
location | String | Null許可 。このアカウントのプロフィール用にユーザーが定義した場所。必ずしも場所ではなく、機械解析可能でもありません。このフィールドは検索サービスによってあいまいに解釈される場合があります。例: “location”: “San Francisco, CA” |
derived | Arrays of Enrichment Objects | Enterprise APIのみ ユーザー用に派生したエンリッチメントmetadataのコレクション。Profile Geoエンリッチメントmetadataを提供します。JSONデータ辞書を含む詳細については、参照されているドキュメントを参照してください。例: “derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”] |
url | String | Null許可 。ユーザーがプロフィールに関連付けて提供したURL。例: “url”: “https://developer.x.com” |
description | String | Null許可 。ユーザーが定義したアカウントを説明するUTF-8文字列。例: “description”: “The Real X API.” |
protected | Boolean | trueの場合、このユーザーがPostsを保護することを選択したことを示します。公開および保護されたPostsについてを参照してください。例: “protected”: true |
verified | Boolean | trueの場合、ユーザーが認証済みアカウントを持っていることを示します。認証済みアカウントを参照してください。例: “verified”: false |
followers_count | Int | このアカウントが現在持っているフォロワー数。特定の困難な状況下では、このフィールドは一時的に「0」を示します。例: “followers_count”: 21 |
friends_count | Int | このアカウントがフォローしているユーザー数(「フォロー中」とも呼ばれます)。特定の困難な状況下では、このフィールドは一時的に「0」を示します。例: “friends_count”: 32 |
listed_count | Int | このユーザーがメンバーになっている公開リストの数。例: “listed_count”: 9274 |
favourites_count | Int | このユーザーがアカウントの生涯でいいねしたPostsの数。歴史的理由により、フィールド名にはイギリス英語のスペルが使用されています。例: “favourites_count”: 13 |
statuses_count | Int | ユーザーが発行したPosts(リツイートを含む)の数。例: “statuses_count”: 42 |
created_at | String | ユーザーアカウントがXで作成されたUTC日時。例: “created_at”: “Mon Nov 29 21:18:15 +0000 2010” |
profile_banner_url | String | ユーザーがアップロードしたプロフィールバナーの標準ウェブ表現を指すHTTPSベースのURL。URLの最終パス要素を追加することで、特定のディスプレイに最適化された異なる画像サイズを取得することが可能です。サイズバリエーションについては、ユーザープロフィール画像とバナーを参照してください。 例: “profile_banner_url”: “https://si0.twimg.com/profile_banners/819797/1348102824” |
profile_image_url_https | String | ユーザーのプロフィール画像を指すHTTPSベースのURL。例: “profile_image_url_https”: “https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png” |
default_profile | Boolean | trueの場合、ユーザーがユーザープロフィールのテーマや背景を変更していないことを示します。例: “default_profile”: false |
default_profile_image | Boolean | trueの場合、ユーザーが独自のプロフィール画像をアップロードしておらず、代わりにデフォルト画像が使用されていることを示します。例: “default_profile_image”: false |
サポート終了(非推奨)の属性
フィールド | 型 | 説明 |
---|---|---|
utc_offset | null | 値は null に設定されます。引き続き GET account/settings で利用可能です |
time_zone | null | 値は null に設定されます。引き続き GET account/settings の tzinfo_name として利用可能です |
lang | null | 値は null に設定されます。引き続き GET account/settings の language として利用可能です |
geo_enabled | null | 値は null に設定されます。引き続き GET account/settings で利用可能です。現在のユーザーが POST statuses/update を使用して地理データを添付するには、このフィールドが true である必要があります |
following | null | 値は null に設定されます。引き続き GET friendships/lookup で利用可能です |
follow_request_sent | null | 値は null に設定されます。引き続き GET friendships/lookup で利用可能です |
has_extended_profile | null | 非推奨。値は null に設定されます。 |
notifications | null | 非推奨。値は null に設定されます。 |
profile_location | null | 非推奨。値は null に設定されます。 |
contributors_enabled | null | 非推奨。値は null に設定されます。 |
profile_image_url | null | 非推奨。値は null に設定されます。注: プロフィール画像は profile_image_url_https フィールドでのみ利用可能です。 |
profile_background_color | null | 非推奨。値は null に設定されます。 |
profile_background_image_url | null | 非推奨。値は null に設定されます。 |
profile_background_image_url_https | null | 非推奨。値は null に設定されます。 |
profile_background_tile | null | 非推奨。値は null に設定されます。 |
profile_link_color | null | 非推奨。値は null に設定されます。 |
profile_sidebar_border_color | null | 非推奨。値は null に設定されます。 |
profile_sidebar_fill_color | null | 非推奨。値は null に設定されます。 |
profile_text_color | null | 非推奨。値は null に設定されます。 |
profile_use_background_image | null | 非推奨。値は null に設定されます。 |
is_translator | null | 非推奨。値は null に設定されます。 |
is_translation_enabled | null | 非推奨。値は null に設定されます。 |
translator_type | null | 非推奨。値は null に設定されます。 |
ユーザーオブジェクトの例:
ネイティブ拡張ジオオブジェクト
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
Field | Type | Description |
---|---|---|
id | String | この場所を表すID。整数ではなく文字列として表される点に注意。例: “id”:“01a9a39529b27f36” |
url | String | この場所に関する追加の place metadata の場所を示すURL。例: “url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json” |
place_type | String | この場所が表すロケーションの種類。例: “place_type”:“city” |
name | String | この場所名の簡潔な人間可読の表現。例: “name”:“Manhattan” |
full_name | String | この場所名の完全な人間可読の表現。例: “full_name”:“Manhattan, NY” |
country_code | String | この場所を含む国を表す短縮された国コード。例: “country_code”:“US” |
country | String | この場所を含む国の名称。例: “country”:“United States” |
bounding_box | Object | この場所を囲む座標のバウンディングボックス。例: “bounding_box”: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ], “type”: “Polygon” |
attributes | Object | PowerTrack、30-Day および Full-Archive Search APIs、ならびに Volume Streams を使用する場合、この hash は null。例: “attributes”: |
フィールド | 型 | 説明 |
coordinates | Array of Array of Array of Float | 経度と緯度の点の並びで、関連する Place エンティティを内包するボックスを定義します。各点は [longitude, latitude] 形式の配列です。点はバウンディングボックスごとに配列としてまとめられます。ポリゴン表記との互換性のため、バウンディングボックスの配列はさらにもう一段の配列で包まれます。例: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ] |
type | String | coordinates プロパティにエンコードされているデータの種類です。バウンディングボックスの場合は “Polygon”、正確な座標を持つ Posts の場合は “Point” になります。例: “type”:“Polygon” |
Geo オブジェクト データ辞書
フィールド | 型 | 説明 |
coordinates | Float のコレクション | Post の位置の経度と緯度。[latitude, longitude] の形式のコレクション。例: ** “geo”: “type”:** “Point”, ** “coordinates”: [ 54.27784, -0.41068 ] ** |
type | String | coordinates プロパティにエンコードされているデータの種類。Post の座標 fields では “Point” になります。例: “type”: “Point” |
フィールド | 型 | 説明 |
coordinates | Float のコレクション | Post の位置の経度と緯度。[longitude, latitude] の形式のコレクション。例: ** “coordinates”: “type”:** “Point”, ** “coordinates”: [ -0.41068, 54.27784 ] ** |
type | String | coordinates プロパティにエンコードされているデータの種類。Post の座標 fields では “Point” になります。例: “type”: “Point” |
派生ロケーション
フィールド | タイプ | 説明 |
derived | locations オブジェクト | プロフィールの地理情報エンリッチメントから派生したロケーション “derived”: “locations”: [ ** “country”:** “United Kingdom”, “country_code”: “GB”, “locality”: “Yorkshire”, “region”: “England”, “full_name”: “Yorkshire, England, United Kingdom”, ** “geo”: “coordinates”: [ -1.5, 54 ], “type”:** “point” ** ] ** |
例:
X エンティティ
このページのセクションへ移動 はじめに entities オブジェクト - hashtag オブジェクト - media オブジェクト - media size オブジェクト - URL オブジェクト - user mention オブジェクト - symbol オブジェクト - poll オブジェクト リツイートとQuote Tweetの詳細 ユーザーオブジェクト内のentities ダイレクトメッセージ内のentities 次のステップはじめに
entities
セクションには、Posts に含まれる一般的な要素(ハッシュタグ、ユーザー言及、リンク、株式ティッカー(シンボル)、X の投票、添付メディア)の配列が含まれます。X 側でテキスト本文が事実上事前処理(事前パース)されているため、これらの配列は開発者が Posts を取り込む際に便利です。Post 本文内からこれらのエンティティを明示的に検索・抽出する代わりに、この JSON セクションを直接参照すれば取得できます。
パースの利便性に加えて、entities
セクションは有用な付加的メタデータも提供します。たとえば、Enhanced URLs enrichment を使用している場合、URL メタデータには完全に展開された URL に加え、関連するウェブサイトのタイトルや説明が含まれます。別の例として、ユーザー言及がある場合は、entities メタデータに数値のユーザー id が含まれ、これは多くの X API へのリクエスト時に有用です。
すべての Post の JSON ペイロードには、たとえそれらのエンティティが Post メッセージの一部でなくても、hashtags
、urls
、user_mentions
、symbols
の最小セットを備えた entities
セクションが含まれます。たとえば、本文が「Hello World!」で添付メディアのない Post の JSON を確認すると、エンティティ配列の要素数が 0 の次の内容が含まれます。
- media および polls エンティティは、その種別のコンテンツが Post に含まれている場合にのみ返されます。
- ネイティブメディア(写真、動画、GIF)を扱う場合は、Extended Entities object を使用するのが推奨です。
Entities オブジェクト
entities
と extended_entities
セクションはいずれも、エンティティのオブジェクト配列で構成されています。以下では、各エンティティオブジェクトについて、その属性名・型・簡潔な説明を示すデータ辞書とともに解説します。さらに、どの PowerTrack Operator がこれらの属性にマッチするかを示し、JSON のサンプルペイロードも提示します。
これは、Posts に共通して見られるエンティティ(ハッシュタグ、リンク、ユーザーのメンションなど)の集合です。entities
オブジェクトには media
属性も含まれますが、entities
セクションにおけるその実装が完全に正確なのは、写真が1枚のみの Post の場合に限られます。複数の写真、動画、またはアニメーション GIF を含む Post については、extended_entities
セクションを参照してください。
Entities データ辞書
entities
の構造を示した後に、これらのサブオブジェクト用のデータ辞書と、それらに対応する Operators を提示します。
フィールド | タイプ | 説明 |
---|---|---|
hashtags | Hashtag Objectsの配列 | Postテキストから解析されたハッシュタグを表します。例: “hashtags”: [ “indices”: [ 32, 38 ], “text”: “nodejs” ] |
media | Media 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”, ] |
urls | URL 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_mentions | User Mention Objectsの配列 | Postのテキストで言及された他のXユーザーを表します。例: “user_mentions”: [ “name”: “X API”, “indices”: [ 4, 15 ], “screen_name”: “xapi”, “id”: 6253282, “id_str”: “6253282” ] |
symbols | Symbol Objectsの配列 | Postのテキストに含まれるシンボル($cashtagsなど)を表します。例: “symbols”: [ “indices”: [ 12, 17 ], “text”: “twtr” ] |
polls | Poll 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 つ要素がある場合にマッチします。
フィールド | 型 | 説明 |
indices | Array of Int | Post のテキスト内でハッシュタグが開始・終了する位置を示す整数配列。最初の整数は Post のテキスト文字列における「#」文字の位置、2 つ目の整数はハッシュタグ直後の最初の文字の位置を表します。したがって、2 つの数値の差はハッシュタグ名の長さに 1(「#」文字分)を加えた値になります。例: “indices”:[32,38] |
text | String | 先頭の「#」文字を除いたハッシュタグ名。例: “text”:“nodejs” |
メディアオブジェクト
entities
セクションには、Post にメディアオブジェクトが「添付」されている場合、単一のメディアオブジェクトを含む media
配列が含まれます。ネイティブメディアが添付されていない場合、entities
に media
配列はありません。以下の理由から、Post のネイティブメディアを処理する際は extended_entities
セクションを使用してください:
- メディアの
type
は、動画や GIF が Post に添付されている場合でも常に「photo」になります。 - 写真は最大4枚まで添付できますが、
entities
セクションには最初の1枚しか表示されません。
has:media
オペレーターは、この配列に要素がある場合に一致します。
フィールド | タイプ | 説明 |
display_url | String | クライアントに表示するメディアのURL。例: “display_url”:“pic.x.com/rJC5Pxsu” |
expanded_url | String | display_urlの展開版。メディア表示ページにリンクします。例: “expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1” |
id | Int64 | 64ビット整数として表現されたメディアのid。例: “id”:114080493040967680 |
id_str | String | 文字列として表現されたメディアのid。例: “id_str”:“114080493040967680” |
indices | Array of Int | Postテキスト内でURLが開始および終了する位置を示す整数の配列。最初の整数はPostテキスト内のURLの最初の文字の位置を表します。2番目の整数はURL後に続く最初の非URL文字の位置(またはURLがPostテキストの最後の部分である場合は文字列の終端)を表します。例: “indices”:[15,35] |
media_url | String | アップロードされたメディアファイルを直接指すhttp:// URL。例: “media_url”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg” ダイレクトメッセージ内のメディアの場合、 media_url はmedia_url_https と同じhttps URLであり、OAuth 1.0aを使用してユーザーのaccess tokenでリクエストに署名してアクセスする必要があります。認証されたx.comセッション経由で画像にアクセスすることはできません。これらの最近の変更に対応する方法については、このページをご覧ください。 これらの画像をWebページに直接埋め込むことはできません。 利用可能な sizes に基づいてmedia_url_https などの写真のURLをフォーマットする方法については、Photo Media URLフォーマットをご覧ください。 |
media_url_https | String | httpsページに埋め込むための、アップロードされたメディアファイルを直接指す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フォーマットをご覧ください。 |
sizes | Size 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_id | Int64 | Null許可。元々異なるPostに関連付けられていたメディアを含むPostの場合、このidは元のPostを指します。例: “source_status_id”: 205282515685081088 |
source_status_id_str | Int64 | Null許可。元々異なるPostに関連付けられていたメディアを含むPostの場合、この文字列ベースのidは元のPostを指します。例: “source_status_id_str”: “205282515685081088” |
type | String | アップロードされたメディアのtype。可能なtypeには、photo、video、animated_gifが含まれます。例: “type”:“photo” |
url | String | メディアリンクのラップされたURL。これは生のPostテキストに直接埋め込まれたURLに対応し、indices パラメータの値と一致します。例:“url”:“http://t.co/rJC5Pxsu” |
メディアサイズオブジェクト
Sizes オブジェクト
フィールド | 型 | 説明 |
thumb | Size Object | メディアのサムネイルサイズ版に関する情報。例: “thumb”:“h”:150, “resize”:“crop”, “w”:150} サムネイルサイズの写真メディアは 150×150 の境界いっぱいに塗りつぶし(fill)で合わせられ、トリミングされます。 |
large | Size Object | メディアの大サイズ版に関する情報。例: “large”:“h”:454, “resize”:“fit”, “w”:680} 小サイズの写真メディアは 680×680 の境界内にフィット(fit)するよう制限されます。 |
medium | Size Object | メディアの中サイズ版に関する情報。例: “medium”:“h”:800, “resize”:“fit”, “w”:1200} 中サイズの写真メディアは 1200×1200 の境界内にフィット(fit)するよう制限されます。 |
small | Size Object | メディアの小サイズ版に関する情報。例: “small”:“h”:1366, “resize”:“fit”, “w”:2048} 大サイズの写真メディアは 2048×2048 の境界内にフィット(fit)するよう制限されます。 |
Size オブジェクト
フィールド | 型 | 説明 |
w | Int | このサイズの幅(ピクセル単位)。例: “w”:150 |
h | Int | このサイズの高さ(ピクセル単位)。例: “h”:150 |
resize | String | このサイズを得るために用いられたリサイズ手法。値が fit の場合、メディアは元のアスペクト比を保ったまま一方の辺に収まるようにリサイズされます。値が crop の場合、特定の解像度に合わせるためにメディアが切り抜かれます。例: “resize”:“crop” |
写真メディアURLのフォーマット
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 |
Name | Name は読み込むサイズのフィールド名です。 例: “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 となります。 |
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&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
属性に対するマッチに使用します。
Field | Type | Description |
display_url | String | Post に貼り付け/入力された URL。例: “display_url”:“bit.ly/2so49n2” |
expanded_url | String | display_url の展開版。例:“expanded_url”:“http://bit.ly/2so49n2” |
indices | Array of Int | Post テキスト内で URL が開始・終了する位置を示すオフセットの整数配列。1 つ目の整数は Post テキスト内の URL の先頭文字の位置、2 つ目の整数は URL の末尾直後の非 URL 文字の位置を表します。例: “indices”:[30,53] |
url | String | ラップされた URL。生の Post テキストに直接埋め込まれた値および indices パラメータの値に対応します。例: “url”:“https://t.co/yzocNFvJuL” |
unwound
属性配下で利用できます:
Field | Type | Description |
url | String | Post に含まれるリンクの完全に展開されたバージョン。例: “url”:“https://blog.x.com/en_us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html” |
status | Int | 展開処理の最終 HTTP ステータス。‘200’ は成功を示します。例: 200 |
title | String | リンクの HTML タイトル。例: “title”:“Using X as a ‘go-to’ communication channel during severe weather” |
description | String | リンクの HTML 説明。例: “description”:“Using X as a ‘go-to’ communication channel during severe weather” |
ユーザーメンションオブジェクト
entities
セクションには、Post 本文に含まれる各ユーザーメンションに対応するオブジェクトを要素とする user_mentions
配列が含まれます。ユーザーメンションが存在しない場合は空配列になります。
PowerTrack の @
オペレーターは screen_name
属性に対するマッチングに使用されます。has:mentions
オペレーターは、配列内に少なくとも 1 件の要素がある場合にマッチします。
Field | Type | Description |
id | Int64 | 言及されたユーザーの ID(整数)。例: “id”:6253282 |
id_str | String | 言及されたユーザーの ID(文字列)。例: “id_str”:“6253282” |
indices | Array of Int | ユーザー参照が Post テキスト内で開始・終了する位置のオフセットを表す整数配列。最初の整数はユーザーメンションの「@」文字の位置、2 番目の整数はメンションに続く最初の非 screen_name 文字の位置を表します。例: “indices”:[4,15] |
name | String | 参照されたユーザーの表示名。例: “name”:“API” |
screen_name | String | 参照されたユーザーの screen_name。例: “screen_name”:“api” |
シンボルオブジェクト
entities
セクションには、Post 本文に含まれる各 $cashtag に対応するオブジェクトを格納した symbols
配列が含まれ、シンボルが存在しない場合は空配列が含まれます。
PowerTrack の $
演算子は text
属性に対するマッチに使用されます。has:symbols
演算子は、配列内に少なくとも 1 つの項目がある場合にマッチします。
Field | Type | Description |
indices | Array of Int | シンボル/cashtag が Post テキスト内で開始および終了する位置(オフセット)を示す整数の配列。最初の整数は Post テキスト文字列内の 」文字分)を加えたものになります。例: “indices”:[12,17] |
text | String | 先頭の「$」文字を除いた cashtag の名前。例: “text”:“twtr” |
Poll オブジェクト
entities
セクションには単一の poll
オブジェクトを含む polls
配列が入ります。投票が含まれていない場合、entities
セクションに polls
配列は存在しません。
これらの Poll のmetadataは、以下の Enterprise API でのみ利用可能です。
- ボリューム stream(Decahose)
- Real-time PowerTrack
- X Search API(Full-Archive Search および 30-Day Search)
フィールド | type | 説明 |
options | Option オブジェクトの配列 | 各選択肢の位置と、その位置のテキストを持つ選択肢の配列。例: “options”: [ “position”: 1, “text”: “I read documentation once.” } ] } |
end_datetime | 文字列 | 投票が終了する時刻のタイムスタンプ(UTC)。例: “end_datetime”: “Thu May 25 22:20:27 +0000 2017” |
duration_minutes | 文字列 | 投票の実施時間(分)。例: “duration_minutes”: 60 |
リツイートと引用Tweetの詳細
リツイート













引用ツイート
ユーザーオブジェクトのエンティティ
JSON の例
X 拡張エンティティ
はじめに
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 枚までサポートするため、ネイティブメディアにおける推奨メタデータソースです。
Posts と JSON ペイロードの例
この Post の
entities
セクションは次のとおりです:
extented_entities
セクションは次のとおりです:
ネイティブ動画付きのPost
video_info
オブジェクトは additional_media_info
オブジェクトに置き換えられます。
additional_media_info
には、title
、description
、embeddable flag
といった、パブリッシャー提供の追加メディア情報が含まれます。embeddable=false
の場合、動画コンテンツはXの公式クライアントにのみ提供されます。この場合、ペイロードで提供されるすべての動画URLはX由来のものとなり、ユーザーはリンクをクリックしてXの自社プロパティ上で動画を開くことができます。
この状況で extended entities オブジェクトがどのようになるかの例を次に示します:
type
が ‘photo’ に誤って設定されている entities
セクションは以下のとおりです。重ねてになりますが、‘video’ や ‘animated_gif’ を含むすべてのネイティブメディアタイプには、extended_entities
セクションの使用が推奨されます。
アニメーションGIF付きのPost
以下は、このアニメーションGIF付きPostのextended entities metadataです:
ネイティブ拡張されたサンプルペイロード
Post
Post への返信
拡張Post
extended_entities を含む Post
リツイート
引用Tweet
リツイートされた引用Tweet
Enterprise Activity Streams データオブジェクト
Activity Streams のデータ形式が X API v2 の形式にどのようにマッピングされるか、詳しく知りたい方へ。
注意: Enterprise のデータ API には、Enriched Native 形式の使用を強く推奨します。
- Enriched Native 形式には、poll metadata など 2017 年以降の新しいメタデータに加え、reply_count や quote_count などの追加の metrics が含まれます。
- Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントで更新されていません。
Activity Object
データ辞書
属性 | 型 | 説明 |
id | string | Postの一意のIRI。詳細には、“tag”がスキーム、“search.x.com”がスキームのドメインを表し、2005年はスキームが派生した年です。 Postsを保存する際は、これを一意の識別子またはプライマリキーとして使用してください。 “id”: “tag:search.x.com,2005:1050118621198921728” |
objectType | string | オブジェクトの型、常に”activity”に設定されます ”objectType”: “activity” |
object | object | 投稿または共有されている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_object | object | Postテキストが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_range | array | Postテキストが140文字を超える場合の表示範囲。 “display_text_range”: [ 0, 142 ] |
verb | string | ユーザーが実行しているアクションの種類。 Posts、“post” リツイート、“share” 削除されたPosts、“delete” verbは、Tweetとtrueリツイートを区別する適切な方法です。ただし、これはtrueリツイートにのみ適用され、Xのリツイート機能を使用しない修正されたまたは引用されたTweetsには適用されません。ASのverbsの説明についてはこちらをクリックしてください。 削除については、以下のサンプルペイロードに示すように、限られた数のフィールドのみが含まれることに注意してください。 “verb”: “post” |
postedTime | date (ISO 8601) | アクションが発生した時刻、例えばPostが投稿された時刻。 “postedTime”: “2018-10-10T20:19:24.000Z” |
generator | object | Postを投稿するために使用されたユーティリティを表すオブジェクト。Postを生成するソースアプリケーションの名前(“displayName”)とリンク(“link”)が含まれます。 “generator”: “displayName”: “X Web Client”, “link”: “http://x.com” |
provider | object | アクティビティのプロバイダーを表すJSONオブジェクト。objectType(“service”)、プロバイダーの名前(“displayName”)、およびプロバイダーのウェブサイトへのリンク(“link”)が含まれます。 “provider”: “objectType”: “service”, “displayName”: “X”, “link”: “http://www.x.com” |
link | string | Postのパーマリンク。 “link”: “http://x.com/API/statuses/1050118621198921728” |
body | string | Postテキスト。 リツイートでは、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_range | array | 表示されるPostを示すbodyテキスト内の文字範囲を記述します。先頭に@メンションがあるPostsは0より大きい値から始まり、メディアが添付されているまたは140文字を超えるPostsは、long_objectでdisplay_text_rangeを示します。 “display_text_range”: [ 14, 42 ] または “long_object”: “display_text_range”: [ 0, 277 ]… |
actor | object | 投稿したXユーザーを表すオブジェクト。Actor ObjectはXユーザーを参照し、そのユーザーに関連するすべてのmetadataを含みます。 actor objectの詳細を参照してください |
inReplyTo | object | 該当する場合、返信されているPostを参照するJSONオブジェクト。Postへのリンクが含まれます。 “inReplyTo”: “link”: “http://x.com/GOP/statuses/349573991561838593” |
location | object | Postが作成されたXの”Place”を表すJSONオブジェクト。これはXプラットフォームから渡されるオブジェクトです。 location objectを参照してください |
twitter_entities | object | Xのデータフォーマットのentitiesオブジェクトで、URL、メンション、ハッシュタグのリストが含まれています。こちらのEntitiesに関するXドキュメントを参照してください。リツイートでは、Xがルートレベルで抽出するentitiesの値を切り詰める場合があることにご注意ください。そのため、リツイートの場合、アプリケーションはobject.twitter_entitiesを確認して、切り詰められていない値を使用していることを確認する必要があります。 twitter_entitiesオブジェクトの詳細を参照 |
twitter_extended_entities | object | 「media」を含むXのネイティブデータフォーマットからのオブジェクトです。これは、twitter_entitiesオブジェクトの「media」フィールドにデータが存在するPostに対して表示され、Postに複数の写真が存在する場合はそれらを含みます。これは複数写真のPostのメディア情報を取得する正しい場所であることにご注意ください。 複数の写真は「media」配列内でカンマ区切りのJSONオブジェクトとして表現されます。 twitter_extended_entitiesオブジェクトの詳細を参照 |
gnip | object | マッチングルールを示すためにアクティビティペイロードに追加されるオブジェクトで、streamまたは製品でアクティブなエンリッチメントに基づいてエンリッチされたデータが追加されます。 gnipオブジェクトの詳細を参照 |
edit_history | Object | Postのすべてのバージョンを示す一意の識別子です。編集されていないPostの場合、1つのIDが存在します。編集履歴があるPostの場合、複数のIDが存在し、編集の順序を反映して昇順に配列され、最新バージョンが配列の最後の位置に配置されます。 Post IDを使用して、Postの以前のバージョンをハイドレートして表示できます。 例: edit_history”: “initial_tweet_id”: “1283764123” “edit_tweet_ids”: [“1283764123”, “1394263866”] |
edit_controls | Object | 存在する場合、Postがまだ編集可能な期間と残りの編集回数を示します。Postは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。 Post IDを使用して、Postの以前のバージョンをハイドレートして表示できます。 例: “edit_controls”: “editable_until_ms”: 123 “edits_remaining”: 3 |
editable | Boolean | 存在する場合、Postが公開時に編集可能であったかどうかを示します。このフィールドは動的ではなく、Postが編集可能時間制限または最大編集回数に達してもTrueからFalseに切り替わりません。以下のPost機能により、このフィールドはfalseになります: _ Postがプロモートされている _ Postに投票がある _ Postが非セルフスレッドの返信である _ Postがリツイートである(Quote Tweetsは編集可能であることに注意) _ Postがnullcastである _ Community Post _ Superfollow Post _ Collaborative Post |
追加の Post 属性
Attribute | Type | Description |
---|---|---|
twitter_lang | string | |
favoritesCount | int | Nullable. この Post が X のユーザーにどれくらい like されたかのおおよその数を示します。 “favoritesCount”:298 |
retweetCount | int | この Post がリツイートされた回数。例: “retweetCount”:153 |
非推奨属性
フィールド | Type | 説明 |
geo | object | Post が作成された地点。 |
twitter_filter_level | string | 互換性を損なわないように残されている非推奨フィールド。 |
ネストされた Post アクティビティオブジェクト
{ "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } }
リツイートされた引用 Tweet:
Long オブジェクト
Actor オブジェクト
データ辞書
属性 | 型 | 説明 |
---|---|---|
objectType | string | ”objectType”: “person” |
id | string | この著者の一意識別子の文字列表現。例: “id:x.com:2244994945” |
link | ”http://www.x.com/XDevelopers” | |
displayName | String | ユーザーが定義した名前。必ずしも個人名とは限りません。通常は最大 50 文字ですが、変更される場合があります。例: “displayName”: “XDevelopers” |
preferredUsername | string | このユーザーが自身の識別に用いるスクリーンネーム/ハンドル/別名。一意ですが変更されることがあります。可能な限りユーザー識別子として id を使用してください。通常は最大 15 文字ですが、より長い名前の歴史的アカウントが存在する場合があります。例:“preferredUsername”: “XDevelopers” |
location | object | ** “location”: “objectType”:** “place”, “displayName”: “127.0.0.1” ** }** |
links | array | Nullable。プロフィールに関連してユーザーが提供した URL。例: ** “links”: [ { “href”:** “https://developer.x.com/en/community”, “rel”: “me” ** } ]** |
summary | string | Nullable。アカウントを説明するユーザー定義の UTF-8 文字列。例: “summary”: “The voice of the #XDevelopers team…“ |
protected | Boolean | true の場合、このユーザーが自分の Posts を非公開にしていることを示します。詳しくは About Public and Protected Posts を参照。例: “protected”: true |
verified | Boolean | true の場合、ユーザーが認証済みアカウントであることを示します。詳しくは Verified Accounts を参照。例: “verified”: false |
followersCount | Int | このアカウントの現在のフォロワー数。特定の障害時には、このフィールドが一時的に「0」を示すことがあります。例: “followers_count”: 21 |
friendsCount | Int | このアカウントがフォローしているユーザー数(いわゆる「フォロー中」)。特定の障害時には、このフィールドが一時的に「0」を示すことがあります。例: “friends_count”: 32 |
listedCount | Int | このユーザーがメンバーである公開 List の数。例: “listed_count”: 9274 |
favoritesCount | Int | このユーザーがアカウントの存続期間中に like した Posts の数。フィールド名は歴史的理由によりイギリス英語の綴りを使用。例: “favourites_count”: 13 |
statusesCount | Int | ユーザーが投稿した Posts(リツイートを含む)の数。例: “statuses_count”: 42 |
postedTime | date | このユーザーアカウントが X で作成された UTC 日時。例: “postedTime”: “2013-12-14T04:35:55.036Z” |
image | string | ユーザーのプロフィール画像を指す HTTPS ベースの URL。例: “image”: “https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg” |
非推奨(廃止予定)属性
フィールド | 型 | 説明 |
---|---|---|
utcOffset | null | 値は null に設定されます。GET account/settings で引き続き利用可能 |
twitterTimeZone | null | 値は null に設定されます。GET account/settings の tzinfo_name として引き続き利用可能 |
languages | null | 値は null に設定されます。GET account/settings の language として引き続き利用可能 |
例:
Location オブジェクト
位置データ辞書
フィールド | 型 | 説明 |
---|---|---|
objectType | string | 詳細はこちらを参照。例: “objectType”: “place” |
displayName | string | その場所の正式名称。 “displayName”: “United States” |
name | string | X の place JSON 形式における場所名。 |
link | string | その場所の X における完全な JSON 表現へのリンク。 “link”: “https://api.x.com/1.1/geo/id/27c45d804c777999.json” |
geo | object | X の地理座標オブジェクト。ポリゴンまたはポイントのいずれか。 geoを参照 |
countryCode | String | 当該場所を含む国を示す短縮国コード。例: “countryCode”: “US” |
country | String | 当該場所を含む国名。例: “country”: “United States” |
profileLocations 派生オブジェクト
Field | Type | Description |
address | object | gnip object 内の profileLocation の location オブジェクトに含まれます。 profile geo enrichment によって導出された場所の住所。 粒度はケースにより異なります。 “address”: { ** “country”: “United States”, “countryCode”: “US”, “locality”: “Providence”, “region”: “Rhode Island”, “subRegion”: “Providence County” }** |
geo | object | gnip object 内の profileLocation の location オブジェクトに含まれます。 profile geo enrichment によって導出された場所の重心座標。 “geo”: { ** “coordinates”: [ -98.5, 39.76 ], “type”: “point” }** |
X entities object
twitter_entities
はネイティブの拡張形式で示されている entities オブジェクト と同一の形式およびデータ辞書になります。
例:
X 拡張エンティティオブジェクト
例:
Gnip オブジェクト
データ辞書
フィールド | タイプ | 説明 |
matching_rules | array | アクティビティが一致したルールを示すマッチングルールオブジェクトの配列。 “matching_rules”: [ ** { “tag”: null, “id”:** 1026514022567358500**, “id_str”:** “1026514022567358464” ** } ]** |
urls | array | アクティビティ内のリンクの配列と、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” ** } ]** |
profileLocations | array of location objects | Profile 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” ** } ] }** |
例:
Activity streams のペイロード例
twitter_extended_entities
を含む Post のアクティビティ
Tweet メタデータ タイムライン
はじめに**
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、可変性、更新、最新性
「ネイティブ」メディア
has:videos
、has:images
、has: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 は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
- 2月 - Post作成画面で、検索可能なGIFをネイティブに提供。
- 5月 - “Doing More with 140”(dmw140)を発表。Postの140文字制限に関して、返信と添付メディアの新たな取り扱い方針を説明。
- 6月 - ネイティブ動画サポートを導入。
- 6月 - 引用リツイートが一般提供開始。
- 6月 - 写真に追加できるステッカーを導入。
- 9月 - “ネイティブ添付”を導入。末尾のURLが140文字にカウントされないように(“dmw140, part 1”)。
2017
- 2月 - Post の metadata に X Poll の metadata を含めるように変更(ネイティブ拡張形式のみ)。
- 4月 - “Simplified Replies” を導入。返信先アカウントは140文字数に含まれない(“dmw140, part 2”)。
- 5月 - GDPR の更新 により、user.time_zone は null、user.utc_offset は null、user.profile_background_image_url はデフォルト値に設定
- 6月 - quoteTweet のレンダリング/書式変更 を更新
- 9月29日 - Post の編集機能を小規模なテストグループに段階的に展開。編集済み Post の metadata が該当箇所の Post オブジェクトに追加。これには edit_history と edit_controls オブジェクトが含まれる。これらの metadata は、編集機能が追加される前に作成された Posts には返されない。これらの metadata に関連する Operators はなし。Post の編集の仕組みについては、Edit Posts fundamentals を参照。
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 でのマッチングと理解に重要な、これらおよび他の属性クラスの詳細について説明します。
偽陰性を見極める
has:videos
Operator でルールを作成した場合、その句は 2015 年以前の Posts にはマッチしません。
しかし、動画共有は 2015 年よりずっと前から X で一般的でした。当時はユーザーが外部ホストの動画リンクを共有していましたが、2015 年に X はプラットフォームに「動画共有」機能を新たに組み込みました。こうした以前の対象 Posts を見つけるには、url:"youtube.com"
のようなルール句を含めます。
なお、Search APIs では、インデックス再構築に伴い metadata が「バックフィル」される例があります。好例が cashtag operator が導入された後、Search インデックスが再構築され、その過程でシンボルのエンティティがすべての Post 本文から抽出されました。これは、$
が主にスラングとして使われていた 2006 年初頭も含みます(“I hope it $oon!”)。
ユースケースに重要な Post 属性の特定とフィルタリング
X プロフィール
オリジナルのPostとリツイート
is:retweet
オペレーターにより、リツイートを含めるか除外するかを選択できます。2009年8月より前のdataを取得する場合は、リツイートの一致(または非一致)判定のために2つの戦略を用意する必要があります。2009年8月以前は、Post本文自体について「RT @」パターンに対し、厳密なフレーズマッチで一致を確認する必要があります。2009年8月以降は、is:retweet
オペレーターが利用できます。
Postの言語分類
lang:
オペレーターはPostアーカイブ全体で利用できます。Historical PowerTrackでは、Xの言語分類metadataは2013年3月26日以降のアーカイブで利用可能です。
Posts のジオリファレンス
- Post メッセージ内の地理的参照
- ユーザーによってジオタグ付けされた Posts
- ユーザーが設定したアカウントプロフィールの「ホーム」位置情報