以下の比較ガイドも参照してください:
X API: エンタープライズ データディクショナリ
はじめに
Enterprise
投稿は、X に関するあらゆるものの最小単位となる基本的な構成要素です。投稿を返すすべての X API は、そのデータを JavaScript Object Notation (JSON) を用いてエンコードして提供します。JSON は、名前付き属性とそれに関連付けられた値からなるキーと値のペアに基づいています。API から取得されるポストオブジェクトには X ユーザーの「ステータス更新」が含まれますが、リツイート、返信、引用ツイートもすべてポストオブジェクトです。あるポストが別のポストとリツイート、返信、引用ツイートとして関連している場合、それぞれはポストオブジェクト内で識別されるか、埋め込まれます。X ネイティブのデータ形式における最も単純なポストであっても、投稿者、メンションされたユーザー、タグ付けされた場所情報、ハッシュタグ、キャッシュタグ記号、メディア、URL リンクなど、ポストの他の属性を表現するために入れ子になった JSON オブジェクトを持ちます。X データを扱う際には、これは理解しておくべき重要な概念です。X API から受け取るポストデータの形式は、受信するポストの種類、利用している X API、およびフォーマット設定によって異なります。
ポストオブジェクトを返す Enterprise エンドポイントは、ポストの編集履歴を理解するために必要なメタデータを提供するよう更新されています。これらのメタデータの詳細については、“ポストの編集」の基本 ページを参照してください。
ネイティブな X フォーマットでは、JSON ペイロードには「ルートレベル」の属性や、
{} 記法で表されるネストされた JSON オブジェクトが含まれます:
利用可能なデータ形式
ご注意:エンタープライズデータ API では、Enriched Native 形式の利用を強く推奨します。エンタープライズデータ API は 2 種類の形式でデータを提供します。エンタープライズ形式のうち、標準 v1.1 のネイティブ形式に最も近いのが Enriched Native です。レガシーのエンタープライズデータ形式が Activity Streams で、当時 X および他のソーシャルメディアデータプロバイダー全体で正規化された形式として、もともと Gnip によって実装・利用されていました。この形式は現在も利用可能ですが、X は 2017 年以降、新機能や開発投資を Enriched Native 形式のみに行ってきました。 Enriched Native 形式は名前のとおり、ネイティブな X オブジェクトに加えて、URL アンワインドのメタデータ、profile geo、poll metadata、追加のエンゲージメントメトリクスなど、エンタープライズデータ製品で利用可能な追加エンリッチメントを含みます。
- Enriched Native 形式には、poll metadata など 2017 年以降に追加されたすべての新しいメタデータや、reply_count・quote_count などの追加メトリクスが含まれます。
- Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントは追加されていません。
- Expanded and enhanced URLs enrichment
- Matching rules enrichment
- Poll metadata enrichment
- Profile geo enrichment
データ形式ごとのオブジェクト比較
| Native Enriched | Activity Streams |
|---|---|
| Link ポストオブジェクト | Link アクティビティオブジェクト |
| Link ユーザーオブジェクト | Link アクターオブジェクト |
| Link Entities オブジェクト | Link X entities オブジェクト |
| Link Extended entities オブジェクト | [Link]/x-api/enterprise-gnip-2.0/fundamentals/data-dictionary#x-extended-entities X extended entities オブジェクト |
| Link Geo オブジェクト | Link Location オブジェクト |
| n/a | Link Gnip オブジェクト |
パースに関するベストプラクティス
- X の JSON は UTF-8 文字でエンコードされています。
- パーサーはフィールドの並び順の違いを柔軟に扱えるようにすべきです。ポストの JSON は順序を持たないハッシュデータとして提供されると想定してください。
- パーサーは「新しい」フィールドが追加されても問題なく処理できるべきです。
- JSON パーサーは「欠落している」フィールドに対しても寛容でなければなりません。すべてのコンテキストで、すべてのフィールドが必ずしも出現するとは限らないためです。
- null が設定されたフィールド、空の集合、フィールドが存在しない状態は、一般的には同一のものとみなして問題ありません。
Enterprise Native Enriched データオブジェクト
Native Enriched ツイートオブジェクト
Native Enriched データ形式が X API v2 形式にどのようにマッピングされるか、さらに詳しく知りたい方は、 比較ガイドをご覧ください: Native Enriched と X API v2 の比較
ポストオブジェクト
id、created_at、text などの基本的な属性を含む、多数の「ルートレベル」属性があります。ポストオブジェクトには、user、entities、extended_entities といった情報を保持するネストされたオブジェクトも含まれます。ポストオブジェクトには、retweeted_status、quoted_status、extended_tweet など、その他のネストされたポストオブジェクト も含まれます。さらに、ネイティブエンリッチ形式には matching_rules オブジェクトが追加されます。
X データディクショナリ
| 属性 | 型 | 説明 |
|---|---|---|
| created_at | String | このポストが作成された日時 (UTC)。例: “created_at”: “Wed Oct 10 20:19:24 +0000 2018” |
| id | Int64 | このポストの一意の識別子を表す整数です。この数値は 53 ビットを超えるため、一部のプログラミング言語では解釈時に問題が発生したり、気づきにくい不具合が生じる可能性があります。この識別子を保存するには、符号付き 64 ビット整数型を使用するのが安全です。安全に識別子を取得するには id_str を使用してください。詳細は X IDs を参照してください。例:“id”:1050118621198921728 |
| id_str | String | このポストの一意な識別子の文字列表現です。実装では、大きな整数値である id ではなく、こちらを使用する必要があります。例:“id_str”:“1050118621198921728” |
| text | String | ステータスアップデートの実際の UTF-8 テキストです。現在有効と見なされている文字の詳細については、X-text を参照してください。例: “text”:“表現の幅を広げるため、今後はすべての絵文字を同等にカウントします ― 性別や肌の色のバリエーションを含むものも同様です t… https://t.co/MkGjXf9aXm” |
| source | String | ポストを投稿する際に使用されたクライアントを表す、HTML 形式の文字列です。X ウェブサイトからの投稿では、source の値は web になります。例: “source”:“X Web Client” |
| truncated | Boolean | text パラメーターの値が切り詰められたかどうかを示します。たとえば、リツイートが元のポストのテキスト長制限である 140 文字を超えた結果として切り詰められた場合などです。切り詰められたテキストは、... のような省略記号で終わります。現在では、X は長すぎる投稿を切り詰めるのではなく拒否するため、ほとんどの投稿ではこのフィールドは false に設定されます。なお、ネイティブリツイートではトップレベルの text プロパティが短くされる場合がありますが、元のテキストは retweeted_status オブジェクト内で利用可能であり、truncated パラメーターは元のステータスの値 (多くの場合 false) に設定されます。例:“truncated”:true |
| in_reply_to_status_id | Int64 | Null 許容。 このオブジェクトが表すポストが返信である場合、このフィールドには元のポストのIDを表す整数値が格納されます。例: “in_reply_to_status_id”:1051222721923756032 |
| in_reply_to_status_id_str | String | Nullable. このオブジェクトが表すポストが返信である場合、このフィールドには元のポストのIDの文字列表現が格納されます。例: “in_reply_to_status_id_str”:“1051222721923756032” |
| in_reply_to_user_id | Int64 | Nullable. ここで表されているポストが返信である場合、このフィールドには元のポストの投稿者のIDの整数表現が格納されます。これは必ずしもポスト内で直接メンションされているユーザーとは限りません。例: “in_reply_to_user_id”:6253282 |
| in_reply_to_user_id_str | String | Null 許容。 対象のポストが返信である場合、このフィールドには元のポストの投稿者 ID の文字列表現が含まれます。これは必ずしもポスト内で直接メンションされているユーザーとは限りません。例: “in_reply_to_user_id_str”:“6253282” |
| in_reply_to_screen_name | String | Null 許容。 このポストが返信である場合、このフィールドには元のポスト作成者のスクリーンネームが含まれます。例: “in_reply_to_screen_name”:“xapi” |
| user | User オブジェクト | このポストを投稿したユーザー。属性の完全な一覧については、User データディクショナリを参照してください。 一部の属性を示す例: { “user”: <br/> “id”: 6253282, “id_str”: “6253282”, “name”: “X API”, “screen_name”: “API”, “location”: “San Francisco, CA”, “url”: “https://developer.x.com”, “description”: “The Real X API. Tweets about API changes, service issues and our Developer Platform. Don’t get an answer? It’s on my website.”, “verified”: true, “followers_count”: 6129794, “friends_count”: 12, “listed_count”: 12899, “favourites_count”: 31, “statuses_count”: 3658, “created_at”: “Wed May 23 06:01:13 +0000 2007”, “utc_offset”: null, “time_zone”: null, “geo_enabled”: false, “lang”: “en”, “contributors_enabled”: false, “is_translator”: false, “profile_background_color”: “null”, “profile_background_image_url”: “null”, “profile_background_image_url_https”: “null”, “profile_background_tile”: null, “profile_link_color”: “null”, “profile_sidebar_border_color”: “null”, “profile_sidebar_fill_color”: “null”, “profile_text_color”: “null”, “profile_use_background_image”: null, “profile_image_url”: “null”, “profile_image_url_https”: “https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg”, “profile_banner_url”: “https://pbs.twimg.com/profile_banners/6253282/1497491515”, “default_profile”: false, “default_profile_image”: false, “following”: null, “follow_request_sent”: null, “notifications”: null } } |
| coordinates | Coordinates オブジェクト | Null 許容。 ユーザーまたはクライアントアプリケーションが報告した、このポストの地理的位置を表します。内部の座標配列は GeoJSON 形式 (経度が先、その後に緯度) で表現されます。例: “coordinates”: <br/> “coordinates”: [ -75.14310264, 40.05701649 ], “type”:“Point” } |
| place | Place オブジェクト | Nullable。存在する場合は、このポストが Place と関連付けられている (ただし必ずしも Place を発信元としているとは限らない) ことを示します。例: “place”: <br/> “attributes”:, “bounding_box”: <br/> “coordinates”: [[ [-77.119759,38.791645], [-76.909393,38.791645], [-76.909393,38.995548], [-77.119759,38.995548] ]], “type”:“Polygon” }, “country”:“United States”, “country_code”:“US”, “full_name”:“Washington, DC”, “id”:“01fbe706f872cb32”, “name”:“Washington”, “place_type”:“city”, “url”:“http://api.x.com/1/geo/id/0172cb32.json” } |
| quoted_status_id | Int64 | このフィールドは、ポストが引用ツイートの場合にのみ出現します。このフィールドには、引用されたツイートのポストID (整数値) が含まれます。例: “quoted_status_id”:1050119905717055488 |
| quoted_status_id_str | String | このフィールドは、ポストが引用ツイートである場合にのみ表示されます。これは、引用ツイートのポストIDを文字列として表したものです。例: “quoted_status_id_str”:“1050119905717055488” |
| is_quote_status | Boolean | 引用ツイートであるかどうかを示します。例: “is_quote_status”:false |
| quoted_status | ポスト | このフィールドは、そのポストが引用ツイートである場合にのみ含まれます。引用された元のポストを表すポストオブジェクトが格納されます。 |
| retweeted_status | ポスト | ユーザーは、他のユーザーが作成した投稿をリツイートすることで、その投稿の拡散を促すことができます。リツイートは、retweeted_status 属性の有無によって通常のポストと区別できます。この属性には、リツイートされた元のポストを表すオブジェクトが含まれます。リツイートをさらにリツイートした場合でも、中間のリツイートの表現は含まれず、元のポストのみが示される点に注意してください。 (ユーザーは、自分が行ったリツイートを削除することで、そのリツイートを取り消すこともできます。) |
| quote_count | Integer | NULL 許容。 このポストが X ユーザーによって引用されたおおよその回数を示します。例: “quote_count”:33 注: このオブジェクトは Premium および Enterprise の各ティア製品でのみ利用できます。 |
| reply_count | Int | このポストに返信された回数。例: “reply_count”:30 注: このオブジェクトは Premium および Enterprise ティアの製品でのみ利用できます。 |
| retweet_count | Int | このポストがリツイートされた回数。例: “retweet_count”:160 |
| favorite_count | Integer | Nullable. このポストがXユーザーから「いいね」されたおおよその回数を示します。例: “favorite_count”:295 |
| entities | Entities | ポストのテキストから抽出されたエンティティです。詳細は X オブジェクト内のエンティティ も参照してください。例: “entities”: <br/> “hashtags”:[], “urls”:[], “user_mentions”:[], “media”:[], “symbols”:[] “polls”:[] } |
| extended_entities | Extended Entities | 1 つ以上 4 つ以下のネイティブ写真、または 1 つの動画、または 1 つのアニメーション GIF がポスト内に含まれている場合、そのメディアのメタデータを格納する配列 ‘media’ を含みます。これは引用ツイートにも含まれます。併せて Entities in X Objects も参照してください。例: “entities”: <br/> “media”:[] } |
| favorited | Boolean | null 許容。 このポストが認証済みユーザーによって「いいね」されているかどうかを示します。例: “favorited”:true |
| retweeted | Boolean | このポストが認証ユーザーによってリツイートされているかどうかを示します。例: “retweeted”:false |
| possibly_sensitive | Boolean | Nullable. このフィールドは、コンテンツがセンシティブとして認識される可能性があることを示します。ポストの投稿者は自身のアカウント設定で「投稿するメディアをセンシティブな内容を含む可能性があるものとしてマークする」を選択でき、その後に作成される各ポストにはこのフラグが設定されます。 これは、X の社内サポート担当者によって判断され、ラベル付けされる場合もあります。 “possibly_sensitive”:false |
| filter_level | String | このフィールドは、このポストをストリーミングする際に使用できる filter_level パラメーターの最大値を示します。したがって、値が medium の場合、このポストは none、low、medium の各ストリームで配信されます。例: “filter_level”: “low” |
| lang | String | NULL 可能。 存在する場合、ポスト本文の機械的に検出された言語に対応する BCP 47 言語識別子を表し、言語を検出できなかった場合は und になります。 例: “lang”: “en” |
| edit_history | Object | ポストのすべてのバージョンを示す一意の識別子です。編集されていないポストの場合は ID が 1 つだけ存在します。編集履歴のあるポストの場合は、編集の順序を反映するよう昇順に並んだ複数の ID が含まれ、配列の最後の要素が最新バージョンになります。 ポスト ID を使用して、ポストの以前のバージョンをハイドレートして取得および表示できます。 Example: edit_history”: <br/> “initial_tweet_id”: “1283764123” “edit_tweet_ids”: [“1283764123”, “1394263866”] } |
| edit_controls | Object | このフィールドが存在する場合、ポストをあとどのくらいの時間編集できるかと、残りの編集回数を示します。ポストは作成後最初の30分間のみ編集可能で、最大5回まで編集できます。 ポストのIDを使用して、ポストの以前のバージョンをハイドレートして表示できます。 Example: “edit_controls”: <br/> “editable_until_ms”: 123 “edits_remaining”: 3 } |
| editable | Boolean | このフィールドが存在する場合、ポストが公開された時点で編集対象だったかどうかを示します。このフィールドは動的ではなく、ポストが編集可能な時間制限や編集回数の上限に達しても、True から False に切り替わることはありません。次のようなポストの特性がある場合、このフィールドは false になります: * ポストがプロモーションされている * ポストに投票 (poll) が含まれている * ポストが自分自身のスレッドではない投稿への返信である * ポストがリツイートである (引用ツイートは編集可能である点に注意) * ポストが nullcast である * コミュニティポストである * Superfollow ポストである * コラボレーションポストである |
| matching_rules | ルールオブジェクトの配列 | X Search や PowerTrack などの フィルタリング対応 プロダクトに存在します。Post にマッチしたルールに関連付けられた id と tag を示します。マッチングルールの詳細はこちらを参照してください。PowerTrack では、1つの Post に複数のルールがマッチする場合があります。 例: “matching_rules”: ” [<br/> “tag”: “xapi emojis”, “id”: 1050118621198921728, “id_str”: “1050118621198921728” }]“ |
追加のポスト属性
| Attribute | Type | Description |
|---|---|---|
| current_user_retweet | Object | Perspectival include_my_retweet パラメーターをサポートし、かつそれが true に設定されているメソッドでのみ表示されます。ユーザー自身によるこのポストのリツイート (存在する場合) のポスト ID を示します。例: “current_user_retweet”: <br/> “id”: 6253282, “id_str”: “6253282” } |
| scopes | Object | ポストの意図されたコンテキストに応じた配信を示す、キーと値のペアの集合です。現在、X の Promoted Products によって使用されています。例: “scopes”:{“followers”:false} |
| withheld_copyright | Boolean | 存在し、かつ “true” に設定されている場合、このコンテンツが DMCA complaint により差し止められていることを示します。例: “withheld_copyright”: true |
| withheld_in_countries | Array of String | 存在する場合、このコンテンツが差し止められている、アルファベット大文字の 2 文字の国コード のリストを示します。X はこのフィールドに対して、以下の国以外を表す値をサポートします: “XX” - コンテンツはすべての国で差し止められています “XY” - コンテンツは DMCA 要求により差し止められています。 例: “withheld_in_countries”: [“GR”, “HK”, “MY”] |
| withheld_scope | String | 存在する場合、差し止められているコンテンツが “status” なのか “user” なのかを示します。 例: “withheld_scope”: “status” |
非推奨属性
| Field | Type | Description |
| geo | Object | 非推奨。 null 許容。 代わりに coordinates フィールドを使用してください。この非推奨属性では、座標は [lat, long] 形式で表現されていますが、他のすべてのポストの geo は [long, lat] 形式で表現されています。 |
ネストされたポストオブジェクト
引用ツイート
Extended Posts
ネイティブ Enriched User オブジェクト
ユーザーデータ辞書
| 属性名 | 型 | 説明 |
|---|---|---|
| id | Int64 | このUserの一意の識別子の整数表現です。この数値は53ビットを超えるため、一部のプログラミング言語では正しく解釈できず、検知されない不具合につながる可能性があります。この識別子を保存するには、符号付き64ビット整数を使用するのが安全です。より安全に識別子を取得するには、id_str を使用してください。詳細については X IDs を参照してください。例:“id”: 6253282 |
| id_str | String | このUserの一意の識別子を文字列で表現したものです。実装では、id に格納される非常に大きく、場合によっては扱えない整数値ではなく、こちらを使用してください。例:“id_str”: “6253282” |
| name | String | ユーザーが設定した名前。必ずしも個人名とは限りません。通常は 50 文字が上限ですが、変更される可能性があります。例: “name”: “API” |
| screen_name | String | このユーザーが自分を名乗る際に使用するスクリーンネーム、ハンドル、または別名。screen_name は一意ですが、変更される可能性があります。可能な限りユーザー識別子として id_str を使用してください。通常は最大 15 文字ですが、より長い名前を持つ古いアカウントが存在することがあります。例:“screen_name”: “api” |
| location | String | Nullable . このアカウントのプロフィールに対してユーザーが設定した位置情報。必ずしも実在の場所を表すとは限らず、機械的に解析できる形式であるとも限りません。Search サービスによってこのフィールドがあいまいに解釈される場合があります。例: “location”: “San Francisco, CA” |
| derived | Enrichment オブジェクトの配列 | Enterprise API 専用。ユーザーに対して導出された Enrichment メタデータのコレクションです。Profile Geo Enrichment メタデータを提供します。JSON データディクショナリを含む詳細については、参照先のドキュメントを参照してください。例: “derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”] |
| url | String | Nullable . ユーザーが自分のプロフィールに関連付けて指定した URL。例: “url”: “https://developer.x.com” |
| description | String | Nullable . ユーザーが自分のアカウントを説明するために定義した UTF-8 文字列。例: “description”: “The Real X API.” |
| protected | Boolean | true の場合、このユーザーが自分の投稿を保護することを選択していることを示します。 公開投稿と非公開投稿について を参照してください。 例: “protected”: true |
| verified | Boolean | true の場合、このユーザーのアカウントが認証済みであることを示します。Verified Accounts を参照してください。例: “verified”: false |
| followers_count | Int | このアカウントが現在保有しているフォロワー数です。特定の過負荷状態などの状況下では、このフィールドが一時的に「0」と表示されることがあります。例: “followers_count”: 21 |
| friends_count | Int | このアカウントがフォローしているユーザー数 (いわゆる「フォロー中」) 。特定の異常時には、このフィールドが一時的に「0」を示す場合があります。例: “friends_count”: 32 |
| listed_count | Int | このユーザーがメンバーになっている公開リストの数。例: “listed_count”: 9274 |
| favourites_count | Int | このユーザーがアカウントの存続期間を通じて「いいね」した投稿の数。フィールド名には歴史的な理由によりイギリス英語の綴りが使用されています。例: “favourites_count”: 13 |
| statuses_count | Int | ユーザーが行った投稿 (リツイートを含む) の数。例: “statuses_count”: 42 |
| created_at | String | ユーザーアカウントが X 上で作成された日時 (UTC) 。例: “created_at”: “Mon Nov 29 21:18:15 +0000 2010” |
| profile_banner_url | String | ユーザーがアップロードしたプロフィールバナーの標準的な Web 表示用の HTTPS を使用する URL です。URL の末尾にパス要素を付加することで、特定の表示向けに最適化された異なる画像サイズを取得できます。サイズのバリエーションについては、User Profile Images and Banners を参照してください。 例: “profile_banner_url”: “https://si0.twimg.com/profile_banners/819797/1348102824” |
| profile_image_url_https | String | ユーザーのプロフィール画像を示す HTTPS ベースの URL。例: “profile_image_url_https”: “https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png” |
| default_profile | ブール値 | true の場合、ユーザーが自分のユーザープロフィールのテーマや背景を変更していないことを示します。例: “default_profile”: false |
| default_profile_image | ブール値 | true の場合、ユーザーがプロフィール画像をアップロードしておらず、デフォルトの画像が使用されていることを示します。例: “default_profile_image”: false |
サポート終了 (非推奨) の属性
| Field | Type | Description |
|---|---|---|
| utc_offset | null | 値は null に設定されます。引き続き GET account/settings から取得可能です |
| time_zone | null | 値は null に設定されます。引き続き GET account/settings の tzinfo_name として取得可能です |
| lang | null | 値は null に設定されます。引き続き GET account/settings の language として取得可能です |
| geo_enabled | null | 値は null に設定されます。引き続き GET account/settings から取得可能です。このフィールドは、現在のユーザーが POST statuses / update を使用して地理情報を付加するには true である必要があります |
| following | null | 値は null に設定されます。引き続き GET friendships/lookup から取得可能です |
| follow_request_sent | null | 値は null に設定されます。引き続き GET friendships/lookup から取得可能です |
| has_extended_profile | null | 非推奨。値は null に設定されます。 |
| notifications | null | 非推奨。値は null に設定されます。 |
| profile_location | null | 非推奨。値は null に設定されます。 |
| contributors_enabled | null | 非推奨。値は null に設定されます。 |
| profile_image_url | null | 非推奨。値は null に設定されます。注: プロフィール画像は profile_image_url_https フィールドでのみ利用可能です。 |
| profile_background_color | null | 非推奨。値は null に設定されます。 |
| profile_background_image_url | null | 非推奨。値は null に設定されます。 |
| profile_background_image_url_https | null | 非推奨。値は null に設定されます。 |
| profile_background_tile | null | 非推奨。値は null に設定されます。 |
| profile_link_color | null | 非推奨。値は null に設定されます。 |
| profile_sidebar_border_color | null | 非推奨。値は null に設定されます。 |
| profile_sidebar_fill_color | null | 非推奨。値は null に設定されます。 |
| profile_text_color | null | 非推奨。値は null に設定されます。 |
| profile_use_background_image | null | 非推奨。値は null に設定されます。 |
| is_translator | null | 非推奨。値は null に設定されます。 |
| is_translation_enabled | null | 非推奨。値は null に設定されます。 |
| translator_type | null | 非推奨。値は null に設定されます。 |
ユーザーオブジェクトの例:
ネイティブ拡張ジオオブジェクト
place オブジェクトは、ポストが Place でジオタグ付けされている場合には必ず存在します。Place は、対応する地理座標を持つ、特定の名前付き位置情報です。ユーザーが自分のポストに位置情報を割り当てることを選択すると、候補となる X Place のリストが提示されます。API を使用して投稿する場合は、投稿時に place_id を指定することで X Place を添付できます。Place に関連付けられたポストは、必ずしもその場所から発信されているとは限らず、その場所「について」のポストである可能性もあります。
geo および coordinates オブジェクトは、ポストに 正確な位置 が割り当てられている場合にのみ (null ではなく) 存在します。正確な位置が指定されている場合、coordinates オブジェクトはその地理座標を表す [long, lat] 配列を提供し、その位置に対応する X Place が割り当てられます。
Place データディクショナリ
| Field | Type | Description |
|---|---|---|
| id | String | この場所を表す ID。整数ではなく文字列として表現される点に注意してください。例: “id”:“01a9a39529b27f36” |
| url | String | この place に関する追加メタデータが配置されている場所を表す URL。例: “url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json” |
| place_type | String | この place が表す位置の種類。例: “place_type”:“city” |
| name | String | この場所の名前を人間が読みやすい形で簡潔に表現したもの。例: “name”:“Manhattan” |
| full_name | String | この場所の名前を人間が読みやすい形で完全に表現したもの。例: “full_name”:“Manhattan, NY” |
| country_code | String | この場所が属する国を表す短縮された国コード。例: “country_code”:“US” |
| country | String | この場所が属する国の名称。例: “country”:“United States” |
| bounding_box | Object | この場所を囲む座標からなるバウンディングボックス。例: “bounding_box”: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ], “type”: “Polygon” |
| attributes | Object | PowerTrack、30-Day および Full-Archive Search API、Volume Streams を使用する場合、このハッシュは null になります。例: “attributes”: |
| Field | Type | Description |
| coordinates | Array of Array of Array of Float | 経度と緯度から成る一連の点で、この境界ボックスが関連付けられている Place エンティティを内包するボックスを定義します。各点は [longitude, latitude] 形式の配列です。点は境界ボックスごとに 1 つの配列にグループ化されます。境界ボックスの配列は、ポリゴン表記との互換性を保つために、さらに 1 つの配列でラップされます。例: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ] |
| type | String | coordinates プロパティに格納されているデータの type。境界ボックスの場合は「Polygon」、正確な座標を持つポストの場合は「Point」になります。例:“type”:“Polygon” |
Geo オブジェクト データディクショナリ
| Field | Type | Description |
| coordinates | Collection of Float | ポストの位置の経度と緯度を、[latitude, longitude] という形式のコレクションで表したものです。例: ** “geo”: “type”:** “Point”, ** “coordinates”: [ 54.27784, -0.41068 ] ** |
| type | String | coordinates プロパティに格納されているデータの type です。ポストの座標フィールドの場合は「Point」になります。例:“type”: “Point” |
| Field | Type | Description |
| coordinates | Collection of Float | ポストの位置の経度と緯度を、[longitude, latitude] という形式のコレクションで表したものです。例: ** “coordinates”: “type”:** “Point”, ** “coordinates”: [ -0.41068, 54.27784 ] ** |
| type | String | coordinates プロパティに格納されているデータの type です。ポストの座標フィールドの場合は「Point」になります。例:“type”: “Point” |
導出された位置情報
| Field | Type | Description |
| derived | locations object | プロフィールの geo エンリッチメントから導出された位置情報 “derived”: “locations”: [ ** “country”:** “United Kingdom”, “country_code”: “GB”, “locality”: “Yorkshire”, “region”: “England”, “full_name”: “Yorkshire, England, United Kingdom”, ** “geo”: “coordinates”: [ -1.5, 54 ], “type”:** “point” ** ] ** |
使用例
X エンティティ
はじめに
entities は、X 上にポストされたコンテンツに関するメタデータおよび追加的なコンテキスト情報を提供します。entities セクションには、ポストに含まれる一般的な要素の配列が含まれます。具体的には、ハッシュタグ、ユーザーへのメンション、リンク、株式ティッカー (symbols) 、X の投票、添付メディアなどです。これらの配列によって、X がテキスト本文を実質的にあらかじめ前処理 (パース) しているため、開発者が投稿を取り込む際に便利です。ポスト本文の中からこれらの entity を明示的に検索・抽出する必要はなく、パーサーはこの JSON セクションを直接参照するだけで済みます。
パースを容易にするだけでなく、entities セクションは有用な「付加価値」のあるメタデータも提供します。たとえば、Enhanced URLs enrichment を使用している場合、URL メタデータには完全に展開された URL に加えて、関連するウェブサイトのタイトルや説明が含まれます。別の例として、ユーザーへのメンションがある場合、entities メタデータには数値のユーザー ID が含まれており、多くの X API にリクエストを送信する際に役立ちます。
すべてのポストの JSON ペイロードには entities セクションが含まれており、hashtags、urls、user_mentions、symbols 属性の最小セットが、これらの entity がポストメッセージの一部でない場合でも必ず存在します。たとえば、本文が「Hello World!」でメディアが添付されていないポストの JSON を確認すると、entity 配列に要素が 0 件の状態で、次のような内容が含まれていることが分かります。
- media と polls エンティティは、その種類のコンテンツがポストに含まれている場合にのみ返されます。
- ネイティブメディア (写真、動画、GIF) を扱う場合は、Extended Entities object を使用することを推奨します。
Entities オブジェクト
entities と extended_entities セクションはどちらも、エンティティ オブジェクト の配列で構成されています。以下では、これらそれぞれのエンティティ オブジェクトについて説明し、オブジェクトの属性名、type、簡潔な説明を示したデータディクショナリを記載しています。また、どの PowerTrack オペレーターがこれらの属性にマッチするかを示し、JSON ペイロードのサンプルも含めます。
投稿内で一般的に見られるエンティティ (ハッシュタグ、リンク、ユーザーへの言及など) の集合です。この entities オブジェクトには media 属性も含まれていますが、entiites セクションでの実装が完全に正確なのは、写真が 1 枚だけの投稿に対してのみです。複数の写真、動画、またはアニメーション GIF を含むすべての投稿については、extended_entities セクションを参照してください。
Entities データディクショナリ
entities オブジェクトは、ほかのエンティティのサブオブジェクト配列を保持するコンテナです。entities の構造を示したあとで、これらのサブオブジェクト向けのデータディクショナリと、それらにマッチする Operators を提示します。
| フィールド | type | 説明 |
|---|---|---|
| hashtags | Hashtag オブジェクトの配列 (Hashtag Objects) | ポスト本文から抽出されたハッシュタグを表します。例: “hashtags”: [ “indices”: [ 32, 38 ], “text”: “nodejs” ] |
| media | Media オブジェクトの配列 | ポストにアップロードされたメディア要素を表します。例: “media”: [ “display_url”: “pic.x.com/5J1WJSRCy9”, “expanded_url”: “https://x.com/nolan_test/status/930077847535812610/photo/1”, “id”: 9.300778475358126e17, “id_str”: “930077847535812610”, “indices”: [ 13, 36 ], “media_url”: “http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg” “sizes”: “thumb”: “h”: 150, “resize”: “crop”, “w”: 150 , “large”: “h”: 1366, “resize”: “fit”, “w”: 2048 , “medium”: “h”: 800, “resize”: “fit”, “w”: 1200 , “small”: “h”: 454, “resize”: “fit”, “w”: 680 , “type”: “photo”, “url”: “https://t.co/5J1WJSRCy9”, ] |
| urls | URL オブジェクト の配列 | ポストのテキスト中に含まれるURLを表します。 例 (Enhanced URLs エンリッチメント機能が有効になっていない場合) : “urls”: [ “indices”: [ 32, 52 ], “url”: “http://t.co/IOwBrTZR”, “display_url”: “youtube.com/watch?v=oHg5SJ…”, “expanded_url”: “http://www.youtube.com/watch?v=oHg5SJYRHA0” ] 例 (Enhanced URLs エンリッチメント機能が有効になっている場合) : “urls”: [ “url”: “https://t.co/D0n7a53c2l”, “expanded_url”: “http://bit.ly/18gECvy”, “display_url”: “bit.ly/18gECvy”, “unwound”: “url”: “https://www.youtube.com/watch?v=oHg5SJYRHA0”, “status”: 200, “title”: “RickRoll’D”, “description”: “http://www.facebook.com/rickroll548 As long as trolls are still trolling, the Rick will never stop rolling.” , “indices”: [ 62, 85 ] ] |
| user_mentions | User Mention オブジェクト の配列 | ポスト本文に含まれる他のXユーザーへの言及を表します。例: “user_mentions”: [ “name”: “X API”, “indices”: [ 4, 15 ], “screen_name”: “xapi”, “id”: 6253282, “id_str”: “6253282” ] |
| symbols | Symbol Objects の配列 | ポストのテキストに含まれるシンボル ($cashtag など) を表します。例: “symbols”: [ “indices”: [ 12, 17 ], “text”: “twtr” ] |
| polls | Poll Objects の配列 | ポストに含まれる X の投票を表します。例: “polls”: [ “options”: [ “position”: 1, “text”: “ドキュメントを一度読んだ。” , “position”: 2, “text”: “ドキュメントを二度読んだ。” }, “position”: 3, “text”: “ドキュメントを何度も繰り返し読んだ。” } ], “end_datetime”: “Thu May 25 22:20:27 +0000 2017”, “duration_minutes”: 60 ] |
Hashtag object
entities セクションには、ポスト本文に含まれる各ハッシュタグごとに 1 つのオブジェクトを要素とする hashtags 配列が含まれ、ハッシュタグが存在しない場合は空配列が含まれます。
PowerTrack の # 演算子は、text 属性に対するマッチングに使用されます。has:hashtags 演算子は、配列に 1 つ以上の要素が存在する場合にマッチします。
| Field | Type | Description |
| indices | Array of Int | ポスト本文内でハッシュタグが開始および終了する位置のオフセットを示す整数の配列です。1 つ目の整数はポスト本文の文字列内における # 文字の位置を表します。2 つ目の整数はハッシュタグの直後の最初の文字の位置を表します。したがって 2 つの数値の差は、ハッシュタグ名の長さに 1 (「#」文字の分) を加えた値になります。例: “indices”:[32,38] |
| text | String | 先頭の「#」文字を除いたハッシュタグ名。例: “text”:“nodejs” |
Media object
entities セクションには、ポストに何らかのメディアオブジェクトが「添付」されている場合、1 つのメディアオブジェクトを格納した media 配列が含まれます。ネイティブメディアが添付されていない場合、entities 内に media 配列は存在しません。次の理由から、ポストのネイティブメディアを処理する際は extended_entities セクションを使用する必要があります。
- メディアの
typeは、動画や GIF がポストに添付されている場合でも常に「photo」を示します。 - 最大 4 枚の写真を添付できますが、
entitiesセクションには最初の 1 枚しか一覧表示されません。
has:media オペレーターは、この配列に要素が含まれている場合に一致します。
| フィールド | 型 | 説明 |
| display_url | String | クライアントに表示されるメディアの URL。例: “display_url”:“pic.x.com/rJC5Pxsu” |
| expanded_url | String | display_url を展開したバージョンです。メディア表示ページへのリンクです。Example: “expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1” |
| id | Int64 | メディアのIDを64ビット整数で表した値。例: “id”:114080493040967680 |
| id_str | String | メディアのIDを文字列として表したもの。例: “id_str”:“114080493040967680” |
| indices | Int 配列 | URL がポスト本文内のどの位置からどの位置まで現れるかを示す整数オフセットの配列です。最初の整数は、ポスト本文内で URL の最初の文字がある位置を表します。2 番目の整数は、URL の直後に現れる最初の URL 以外の文字の位置 (または、URL がポスト本文の末尾にある場合は文字列の末尾) を表します。例: “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 を使用してユーザーのアクセストークンでリクエストに署名してアクセスする必要があります。認証済みの x.com セッション経由で画像にアクセスすることはできません。最近のこれらの変更への対応方法については、 this page を参照してください。 これらの画像を Web ページに直接埋め込むことはできません。 利用可能な sizes に基づいて、media_url_https などの写真の URL をどのようにフォーマットするかについては、Photo Media URL formatting を参照してください。 |
| media_url_https | String | https ページに埋め込むための、アップロードされたメディアファイルを直接指す https:// URL。例: “media_url_https”:“https://p.twimg.com/AZVLmp-CIAAbkyy.jpg” ダイレクトメッセージ内のメディアについては、OAuth 1.0A を用いてユーザーのアクセストークンでリクエストに署名することで、 media_url_https にアクセスする必要があります。認証済みの x.com セッション経由で画像にアクセスすることはできません。最近の変更への対応方法については this page を参照してください。 これらの画像をウェブページに直接埋め込むことはできません。 利用可能な sizes に基づいて、media_url_https などの写真の URL をどのようにフォーマットするかについては、Photo Media URL formatting を参照してください。 |
| sizes | Size オブジェクト | メディアファイルで利用可能な各種サイズを示すオブジェクトです。例: “sizes”: “thumb”: “h”: 150, “resize”: “crop”, “w”: 150 }, “large”: “h”: 1366, “resize”: “fit”, “w”: 2048 }, “medium”: “h”: 800, “resize”: “fit”, “w”: 1200 }, “small”: “h”: 454, “resize”: “fit”, “w”: 680 } } } 利用可能な sizes に基づいて media_url_https など写真の URL をどのようにフォーマットするかについては、Photo Media URL formatting を参照してください。 |
| source_status_id | Int64 | Null 許容値。メディアがもともと別のポストに関連付けられていた投稿の場合、この ID は元のポストを指します。例: “source_status_id”: 205282515685081088 |
| source_status_id_str | Int64 | null 許容。元々は別のポストに関連付けられていたメディアを含む投稿の場合、この文字列型のIDは元のポストを指します。例: “source_status_id_str”: “205282515685081088” |
| type | String | アップロードされたメディアの種別。取り得る値としては、photo、video、animated_gif があります。例: “type”:“photo” |
| url | String | メディアリンクのラップされた URL です。これは、生のポストテキストに直接埋め込まれている URL と、indices パラメータの値に対応するものです。例:“url”:“http://t.co/rJC5Pxsu” |
メディアサイズオブジェクト
Sizes object
| Field | Type | Description |
| thumb | Size Object | メディアのサムネイルサイズ版に関する情報。例: “thumb”:“h”:150, “resize”:“crop”, “w”:150} サムネイルサイズの写真メディアは、150x150 の境界を fill で満たし、クロップされた状態に制限されます。 |
| large | Size Object | メディアのラージサイズ版に関する情報。例: “large”:“h”:454, “resize”:“fit”, “w”:680} スモールサイズの写真メディアは、680x680 の境界内に fit するように制限されます。 |
| medium | Size Object | メディアのミディアムサイズ版に関する情報。例: “medium”:“h”:800, “resize”:“fit”, “w”:1200} ミディアムサイズの写真メディアは、1200x1200 の境界内に fit するように制限されます。 |
| small | Size Object | メディアのスモールサイズ版に関する情報。例: “small”:“h”:1366, “resize”:“fit”, “w”:2048} ラージサイズの写真メディアは、2048x2048 の境界内に fit するように制限されます。 |
Size オブジェクト
| Field | Type | Description |
| w | Int | このサイズの幅 (ピクセル単位) 。例: “w”:150 |
| h | Int | このサイズの高さ (ピクセル単位) 。例: “h”:150 |
| resize | String | このサイズを取得するために使用されたリサイズ方法。値が fit の場合、メディアはネイティブの縦横比を保ったまま、いずれか一方の辺に収まるようにリサイズされます。値が crop の場合、特定の解像度に収めるためにメディアがクロップされます。例: “resize”:“crop” |
写真メディア URL のフォーマット
media_url または media_url_https 単体でも読み込むことができ、その場合はデフォルトで medium バリアントが読み込まれます。ただし、可能な場合は、完全にフォーマットされた写真メディア URL を指定することを推奨します。
写真メディア URL は次の 3 つの要素で構成されます。
| Base URL | Base URL は、拡張子を除いたメディア URL です。 例: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, このとき Base URL は次のようになります。 https://pbs.twimg.com/media/DOhM30VVwAEpIHq |
| Format | Format は、画像がどの種類の写真としてフォーマットされているかを表します。指定可能な format は jpg または png で、メディア URL の拡張子として提供されます。 例: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, このとき format は 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 } } } large サイズの写真を読み込む場合の name は large となります。 |
| レガシー形式 | レガシー形式は非推奨です。写真メディアの読み込みはすべてモダン形式へ移行する必要があります。 <base_url>.<format>:<name> 例: https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large |
| モダン形式 | 写真を読み込むためのモダン形式は、2015 年に X で導入され、2017 年以降は事実上の標準となっています。すべての写真メディアの読み込みはこの形式へ移行する必要があります。 <base_url>?format=<format>&name=<name> 例: https://pbs.twimg.com/media/DOhM30VVwAEpIHq?format=jpg&name=large 注意: 写真メディア URL のクエリ文字列内の項目は、アルファベット順に並んでいます。メディア読み込みでクエリ項目を新たに追加する場合でも、アルファベット順を維持する必要があります。たとえば、仮に preferred_format という新しいクエリ項目があった場合、クエリ文字列内では format と name の後に配置されます。 |
URL オブジェクト
entities セクションには、ポスト本文内に含まれるすべてのリンクごとに 1 つのオブジェクトを要素として持つ urls 配列が含まれ、リンクが存在しない場合は空の配列になります。
has:links 演算子は、配列に少なくとも 1 つ要素がある場合にマッチします。url: 演算子は expanded_url 属性にマッチするために使用されます。Expanded URL enrichment を使用している場合、url: 演算子は unwound.url (完全に展開された URL) 属性にマッチするために使用されます。Exhanced URL enrichment を使用している場合、url_title: および url_decription: 演算子は、それぞれ unwound.title と unwound.description 属性にマッチするために使用されます。
| Field | Type | Description |
| display_url | String | ポスト内で貼り付け/入力された URL。例: “display_url”:“bit.ly/2so49n2” |
| expanded_url | String | display_url の展開版。例:“expanded_url”:“http://bit.ly/2so49n2” |
| indices | Array of Int | ポスト本文内で URL が開始および終了する位置を表す整数の配列。最初の整数は、ポスト本文内で URL の最初の文字がある位置を表します。2 つ目の整数は、URL の末尾の直後にある、URL ではない最初の文字の位置を表します。例: “indices”:[30,53] |
| url | String | ラップされた URL。生のポスト本文内に直接埋め込まれた値と、indices パラメータの値に対応します。例: “url”:“https://t.co/yzocNFvJuL” |
unwound 属性の下に含まれます:
| Field | Type | Description |
| url | String | ポストに含まれるリンクの、完全に展開されたバージョン。例: “url”:“https://blog.x.com/en_us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html” |
| status | Int | アンワインド処理の最終 HTTP ステータス。‘200’ は成功を示します。例: 200 |
| title | String | リンクの HTML title。例: “title”:“Using X as a ‘go-to’ communication channel during severe weather” |
| description | String | リンクの HTML description。例: “description”:“Using X as a ‘go-to’ communication channel during severe weather” |
ユーザー言及オブジェクト
entities セクションには、ポスト本文に含まれるユーザー言及ごとに 1 つのオブジェクトを要素とする 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 | ポスト本文内でユーザー参照が開始および終了する位置 (オフセット) を表す整数の配列です。最初の整数はユーザー言及の「@」文字の位置を表します。2 つ目の整数は、ユーザー言及に続く最初の非スクリーンネーム文字の位置を表します。例: “indices”:[4,15] |
| name | String | 参照されているユーザーの表示名。例: “name”:“API” |
| screen_name | String | 参照されているユーザーのスクリーンネーム。例: “screen_name”:“api” |
Symbol オブジェクト
entities セクションには、ポスト本文に含まれる各 $cashtag ごとに 1 つのオブジェクトを格納した symbols 配列が含まれ、シンボルが存在しない場合は空の配列が含まれます。
PowerTrack の $ 演算子は text 属性に対してマッチさせるために使用されます。has:symbols 演算子は、配列内に 1 件以上の要素がある場合にマッチします。
| Field | Type | Description |
| indices | Array of Int | ポストのテキスト内でシンボル / cashtag が開始および終了する位置を示す整数の配列です。最初の整数は、ポストテキスト文字列内の 」文字分) を加えたものになります。例: “indices”:[12,17] |
| text | String | 先頭の「$」文字を除いた cashtag の名称です。例: “text”:“twtr” |
投票オブジェクト
entities セクションには、ポストに投票が含まれている場合、単一の poll オブジェクトを要素とする polls 配列が含まれます。投票が含まれていない場合、entities セクション内に polls 配列は存在しません。
これらの投票メタデータは、次の Enterprise API でのみ利用可能である点に注意してください。
- ボリュームストリーム (Decahose)
- Real-time PowerTrack
- X Search APIs (Full-Archive Search と 30-Day Search)
| フィールド | 型 | 説明 |
| options | Option オブジェクトの配列 | 各投票オプションの位置と、その位置に対応するテキストを持つオプションの配列です。例: “options”: [ “position”: 1, “text”: “I read documentation once.” } ] } |
| end_datetime | String | 投票が終了する時刻 (UTC) のタイムスタンプ。例: “end_datetime”: “Thu May 25 22:20:27 +0000 2017” |
| duration_minutes | String | 投票の継続時間 (分) 。例: “duration_minutes”: 60 |
Retweet と Quote Tweet の詳細
リツイート
text 属性は、元のポストのテキストの先頭に「RT @username: 」を付与して構成されます。
場合によっては、特にユーザー名が長いアカウントでは、これら新しい文字と元のポスト本文を組み合わせることで、元のポストのテキスト長制限である 140 文字を簡単に超えてしまうことがあります。140 文字ベースの表示および保存のサポートを維持するために、トップレベルの本文はポスト本文の末尾を切り詰め、省略記号 (「…」) を追加します。その結果、元のポスト末尾に位置していた一部のトップレベルの entities が、切り詰められたハッシュタグや URL エントリなどのケースにおいて、不正確になったり欠落したりする可能性があります。
このポスト、 https://x.com/FloodSocial/status/907974220298125312 には、次のポストテキストがあります。
Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag 











http://wapo.st/2w8iwPQ #Testing
上記の例では、URL とハッシュタグの両方が影響を受けました。ハッシュタグは完全に切り詰められ、URL も一部が切り詰められたため、これらはトップレベルの entities から欠落しています。また、text フィールドの先頭に付与される「RT @floodsocial: 」プレフィックスにより、追加の user_mentions トップレベル entity が存在することにも気付くでしょう。
しかし、retweeted_status 内のポストテキストと entities は、切り詰めや誤った entities なしに元のポストを完全に反映しています。そのため、リツイートについては、ネストされた retweeted_status オブジェクト に依存することを推奨します。
引用ツイート
引用ツイートは 2016 年に導入されました。リツイートと異なり、ポストを「引用」すると、共有されたポストに対して、その「上に」新しいコンテンツを追加する形になります。この新しいコンテンツには、新しいテキスト、ハッシュタグ、メンション、URL など、元のポストが持ちうるほとんどすべての要素を含めることができます。 引用ツイートにはネイティブメディア (写真、動画、GIF) を含めることができ、その情報はentities オブジェクトの下に現れます。
X の entities は追加できるため、引用部分の entities は元の entities とは異なることがよくあります。
次の例では、新しい URL とハッシュタグが引用ツイートの末尾に配置されています。
このポスト https://x.com/FloodSocial/status/907983973225160704 のポストテキストは次のとおりです。
strange and equally tragic when islands flood… trans-atlantic testing of quote tweets | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing
この場合、トップレベルの entities には引用の詳細は反映されていません。
しかし、extended_tweet 内のポストテキストと entities は、切り捨てや誤った entities もなく、引用ツイートを完全に反映しています。そのため、引用ツイートでは、ネストされた _extended_tweet_ オブジェクトに依拠することを推奨します。
user オブジェクトの Entities
JSON のサンプル
X 拡張エンティティ
はじめに
extended_entities セクションも含まれます。ネイティブメディア (写真、動画、GIF) を扱う場合、いくつかの理由から extended_entities が推奨されるメタデータソースとなります。現在、1つのポストには最大4枚の写真を添付できます。entities メタデータには最初の1枚の写真しか含まれません (2014年までは1枚のみ添付可能でした) が、extended_entities セクションには添付されたすべての写真が含まれます。ネイティブメディアに関しては、entities.media メタデータには別の制約があり、添付されたメディアが動画やアニメーションGIFである場合でも、メディアの種別が常に「photo」となってしまう点があります。実際のメディア種別は extended_entities.media[].type 属性で指定され、photo、video、または animated_gif のいずれかが設定されます。これらの理由から、ネイティブメディアを扱う場合は extended_entities メタデータを利用することを推奨します。
写真、動画、アニメーションGIFが添付されているすべてのポストには、extended_entities JSON オブジェクトが含まれます。extended_entities オブジェクトには、media オブジェクトからなる単一の media 配列が含まれます (データディクショナリについては entities セクションを参照してください) 。ハッシュタグやリンクなど、その他のエンティティタイプは extended_entities セクションには含まれません。extended_entities セクション内の media オブジェクトは、entities セクションに含まれるものと構造的に同一です。
ポストには1種類のメディアのみ添付できます。写真については最大4枚まで添付できます。動画およびGIFについては1つのみ添付できます。extended_entities セクション内のメディア type メタデータはメディア種別 (「photo」「video」「animated_gif」) を正しく示し、最大4枚の写真をサポートするため、ネイティブメディア向けの推奨メタデータソースとなっています。
投稿例とJSONペイロード
entities メタデータを示します。
4枚のネイティブ写真を含むポスト
ハッシュタグ、ユーザー名のメンション、キャッシュタグ、URL、および4枚のネイティブ写真を含むポスト:
このポストの
entities セクションは以下のとおりです:
extented_entities セクションは次のとおりです。
ネイティブ動画付きポスト
video_info オブジェクトは additional_media_info オブジェクトに置き換えられます。
additional_media_info には、title、description、embeddable flag のような、パブリッシャーによって提供される追加のメディア情報が含まれます。embeddable=false の場合、動画コンテンツはX公式クライアントにのみ提供されます。この場合、ペイロード内で提供されるすべての動画URLはXに基づくものとなるため、ユーザーはリンクをクリックしてXが所有・運営するプロパティ上で動画を開くことができます。
このような状況で、extended entities オブジェクトがどのような形になるかの例を以下に示します。
type が誤って「photo」に設定されている entities セクションを示しています。繰り返しになりますが、video や animated_gif を含むすべてのネイティブメディア type には、extended_entities セクションを使用することを推奨します。
アニメーション GIF を含むポスト
以下は、このアニメーション GIF を含むポストの extended entities メタデータです。
ネイティブエンリッチされたペイロード例
ポスト
返信ポスト
拡張ポスト
extended_entitites を含むポスト
リツイート
引用ツイート
引用ツイートのリツイート
Enterprise Activity Streams データオブジェクト
Activity Streams データ形式が X API v2 の形式にどのようにマッピングされるのか、詳しく知りたい方は次をご覧ください。
注意: エンタープライズ向けデータ API には、Enriched Native 形式の利用を強く推奨します。
- Enriched Native 形式には、poll metadata など、2017 年以降に追加されたすべての新しいメタデータや、reply_count や quote_count などの追加メトリクスが含まれます。
- Activity Streams 形式は、2017 年の character update 以降、新しいメタデータやエンリッチメントで更新されていません。
Activity Object
twitter_quoted_status、long_object を含む、その他のネストされたポストの activity オブジェクトを持たせることができます。
ベースレベルのオブジェクト type である “activity” は、ネイティブ enriched 形式のポストのベースレベルオブジェクトに似ています。Activity Streams 形式のペイロード例はこちらで確認できます。
データディクショナリ
| 属性 | 型 | 説明 |
| id | 文字列 | ポストの一意の IRI です。さらに詳しくいうと、“tag” はスキーム、“search.x.com” はそのスキームのドメイン名を表し、2005 はそのスキームが策定された年を示します。 投稿を保存する際には、これを一意の識別子または主キーとして使用してください。 “id”: “tag:search.x.com,2005:1050118621198921728” |
| objectType | 文字列 | オブジェクトの種類で、常に “activity” に設定されます “objectType”: “activity” |
| object | オブジェクト | 投稿または共有されるポストを表すオブジェクト。 リツイートの場合、ここにはこのスキーマで説明されている関連フィールドを含む完全な「activity」が含まれます。 元のポストの場合、ここにはここで説明されているフィールドを持つ「note」オブジェクトが含まれます。 “object”: “object”: “objectType”: “note”, “id”: “object:search.x.com,2005:1050118621198921728”, “summary”: “To make room for more expression, we will now count all emojis as equal—including those with gender and skin t… https://t.co/MkGjXf9aXm”, “link”: “http://x.com/API/statuses/1050118621198921728”, “postedTime”: “2018-10-10T20:19:24.000Z” |
| long_object | オブジェクト | ポスト本文が140文字を超える場合の全文を表すオブジェクト。 “long_object”: “body”: “より多くの表現ができるようにするため、絵文字は性別や肌の色のバリエーション 👍🏻👍🏽👍🏿 を含め、すべて同じ文字数としてカウントするようにしました。これは現在、当社のオープンソースライブラリである Twitter-Text に反映されています。 \n\nTwitter-Text を利用していますか? 詳細についてはフォーラムのポストをご覧ください: https://t.co/Nx1XZmRCXA”, “display_text_range”: [ 0, 277 ], “twitter_entities”: “hashtags”: [], “urls”: [ “url”: “https://t.co/Nx1XZmRCXA”, “expanded_url”: “https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607”, “display_url”: “devcommunity.com/t/new-update-t…”, “indices”: [ 254, 277 ] ], “user_mentions”: [], “symbols”: [] |
| display_text_range | 配列 | ポストのテキストが 140 文字を超える場合 “display_text_range”: [ 0, 142 ] |
| verb | 文字列 | ユーザーが実行しているアクションの種類を表します。 投稿, “post” リツイート, “share” 削除された投稿, “delete” この verb によって、ツイートと真のリツイートを正しく区別できます。ただし、これは真のリツイートにのみ適用され、X のリツイート機能を使用しない編集済みツイートや引用ツイートには適用されません。Activity Streams (AS) の verbs の説明については こちらを参照してください。 削除 (Delete) の場合、下記のサンプルペイロードに示すように、含まれるフィールドは一部に限られる点に注意してください。 “verb”: “post” |
| postedTime | 日付 (ISO 8601 形式) | アクションが発生した時刻。例えば、ポストが投稿された時刻です。 “postedTime”: “2018-10-10T20:19:24.000Z” |
| generator | オブジェクト | ポストを投稿するために使用されたアプリケーション (ユーティリティ) を表すオブジェクトです。これには、ポストを生成したソースアプリケーションの名前 (“displayName”) とリンク (“link”) が含まれます。 “generator”: “displayName”: “X Web Client”, “link”: “http://x.com” |
| provider | オブジェクト | アクティビティのプロバイダーを表す JSON オブジェクトです。これには objectType (“service”) 、プロバイダー名 (“displayName”) 、およびプロバイダーの Web サイトへのリンク (“link”) が含まれます。 “provider”: “objectType”: “service”, “displayName”: “X”, “link”: “http://www.x.com” |
| link | 文字列 | ポストへのパーマリンク。 “link”: “http://x.com/API/statuses/1050118621198921728” |
| body | 文字列 | ポストの本文。 リツイートでは、ルートレベルの body の値が、先頭に “RT @username” を追加し、元のテキストを末尾で切り詰めて三点リーダーを付与することで X によって変更される点に注意してください。したがって、リツイートの場合は、リツイートされている元のポストの変更されていないテキストを抽出していることを確認するために、アプリでは object.body を参照する必要があります。 “body”: “With Cardiff, Crystal Palace, and Hull City joining the EPL from the Championship it will be a great relegation battle at the end.” |
| display_text_range | 配列 | 本文テキスト内の、表示されるポストを示す文字範囲を表します。先頭に @メンションがある投稿では開始位置が 0 より大きくなり、メディアが添付されている投稿や 140 文字を超える投稿では、long_object 内で display_text_range が示されます。 “display_text_range”: [ 14, 42 ] or “long_object”: “display_text_range”: [ 0, 277 ]… |
| actor | オブジェクト | ポストを行った X ユーザーを表すオブジェクトです。Actor オブジェクトは X ユーザーを指し、そのユーザーに関するすべてのメタデータを含みます。 参照 Actor オブジェクトの詳細 |
| inReplyTo | オブジェクト | 該当する場合、返信先のポストを参照し、そのポストへのリンクを含む JSON オブジェクト。 “inReplyTo”: “link”: “http://x.com/GOP/statuses/349573991561838593” |
| location | オブジェクト | ポストが作成された X「Place」を表す JSON オブジェクトです。これは X プラットフォームからそのまま渡されるオブジェクトです。 詳細は location オブジェクト |
| twitter_entities | オブジェクト | URL、メンション、ハッシュタグの一覧を含む、X のデータ形式における entities オブジェクトです。Entities については X のドキュメントを参照してください。なお、リツイートでは、X がルートレベルで抽出する entities の値を途中で切り詰める場合があります。そのため、リツイートの場合は、切り詰められていない値を使用していることを確認するために、アプリは object.twitter_entities を参照する必要があります。 twitter_entities オブジェクトの詳細を参照してください |
| twitter_extended_entities | オブジェクト | X のネイティブなデータ形式において、“media” を含むオブジェクトです。twitter_entities オブジェクトの “media” フィールドにデータが存在する任意のポストにはこのオブジェクトが含まれ、投稿内に複数の写真がある場合にはそれらも含まれます。複数枚の写真を含むポストのメディア情報を取得する正しい場所は、このオブジェクトである点に注意してください。 複数の写真は、“media” 配列内のカンマ区切りの JSON オブジェクトとして表現されます。 twitter_extended_entities オブジェクトの詳細を参照してください。 |
| gnip | オブジェクト | アクティビティペイロードに追加され、マッチングルールを示すとともに、ストリームまたはプロダクトで有効なエンリッチメントに基づいて追加されたエンリッチ済みデータを含むオブジェクト。 gnip オブジェクトの詳細を参照してください。 |
| edit_history | オブジェクト | 投稿のすべてのバージョンを示す一意の識別子です。編集のない投稿の場合、IDは1つだけです。編集履歴がある投稿の場合、複数のIDがあり、編集の順序を反映する昇順で並んでおり、配列の最後の要素が最新バージョンになります。 これらの投稿IDを使用して、投稿の以前のバージョンをハイドレート (再取得) して表示できます。 例: edit_history”: “initial_tweet_id”: “1283764123” “edit_tweet_ids”: [“1283764123”, “1394263866”] |
| 編集コントロール | オブジェクト | このフィールドが存在する場合、投稿をどれくらいの時間まで編集できるかと、残りの編集回数を示します。投稿は作成後最初の30分間のみ編集でき、最大5回まで編集可能です。 これらの投稿IDを使用して、過去バージョンの投稿をハイドレートして表示できます。 例: “edit_controls”: “editable_until_ms”: 123 “edits_remaining”: 3 |
| 編集可能 | ブール値 | このフィールドが存在する場合、そのポストが公開時点で編集対象だったかどうかを示します。このフィールドは動的に変化せず、ポストが編集可能時間の上限または編集回数の上限に達しても、True から False に切り替わることはありません。次のようなポストの特性がある場合、このフィールドは False になります: * ポストがプロモーションされている * ポストに投票 (poll) が含まれている * ポストが自分自身のスレッドではない返信である * ポストがリツイートである (ただし Quote Tweet は編集の対象になります) * ポストが nullcast である * Community ポストである * Superfollow ポストである * Collaborative ポストである |
追加のポスト属性
| Attribute | Type | Description |
|---|---|---|
| twitter_lang | string | |
| favoritesCount | int | Null の場合があります。 このポストが X ユーザーにより「いいね」されたおおよその回数を示します。 “favoritesCount”:298 |
| retweetCount | int | このポストがリツイートされた回数を示します。例: “retweetCount”:153 |
非推奨属性
| フィールド | 型 | 説明 |
| geo | object | ポストが作成された地点を表す Point 位置情報。 |
| twitter_filter_level | string | 後方互換性を維持するために残されている非推奨フィールド。 |
ネストされたポストアクティビティオブジェクト
{ "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } }
リツイートされた引用ツイート:
Long オブジェクト
Actor オブジェクト
データディクショナリ
| Attribute | Type | Description |
|---|---|---|
| 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 の場合、このユーザーが自分の投稿を非公開にすることを選択していることを示します。「公開ポストと非公開ポストについて」を参照してください。例: “protected”: true |
| verified | Boolean | true の場合、このユーザーのアカウントが認証済みであることを示します。「認証済みアカウント」を参照してください。例: “verified”: false |
| followersCount | Int | このアカウントが現在持っているフォロワー数。特定の異常な状況下では、このフィールドは一時的に「0」を示す場合があります。例: “followers_count”: 21 |
| friendsCount | Int | このアカウントがフォローしているユーザー数 (いわゆる「フォロー中」) 。特定の異常な状況下では、このフィールドは一時的に「0」を示す場合があります。例: “friends_count”: 32 |
| listedCount | Int | このユーザーがメンバーになっている公開リストの数。例: “listed_count”: 9274 |
| favoritesCount | Int | このユーザーがアカウントの存続期間中に「いいね」した投稿の数。フィールド名には歴史的な理由によりイギリス英語の綴りが使用されています。例: “favourites_count”: 13 |
| statusesCount | Int | ユーザーによって投稿された投稿 (リツイートを含む) の数。例: “statuses_count”: 42 |
| postedTime | date | このユーザーアカウントが X で作成された日時 (UTC) 。例: “postedTime”: “2013-12-14T04:35:55.036Z” |
| image | string | ユーザーのプロフィール画像を指す HTTPS ベースの URL。例: “image”: “https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg” |
サポート終了 (非推奨) の属性
| Field | Type | 説明 |
|---|---|---|
| utcOffset | null | 値は null に設定されます。引き続き GET account/settings で取得できます。 |
| twitterTimeZone | null | 値は null に設定されます。引き続き GET account/settings の tzinfo_name として取得できます。 |
| languages | null | 値は null に設定されます。引き続き GET account/settings の language として取得できます。 |
例
Location Object
Location データディクショナリ
| Field | Type | Description |
|---|---|---|
| objectType | string | より詳細な情報はこちらを参照してください。例: “objectType”: “place” |
| displayName | string | 場所の完全な名称。 “displayName”: “United States” |
| name | string | X の place JSON フォーマットにおける場所名。 |
| link | string | 場所を表す X JSON の完全な表現へのリンク。 “link”: “https://api.x.com/1.1/geo/id/27c45d804c777999.json” |
| geo | object | X からの geo 座標オブジェクト。ポリゴンまたはポイントのいずれか。 geo を参照してください |
| countryCode | String | この場所が含まれる国を表す短縮された国コード。例: “countryCode”: “US” |
| country | String | この場所が含まれる国の名称。例: “country”: “United States” |
profileLocations から派生したオブジェクト
| Field | Type | Description |
| address | object | gnip object 内の profileLocation の location オブジェクト内に含まれます。 profile geo enrichement によって導出されたロケーションの住所情報です。 詳細度 (粒度) は場合によって異なります。 “address”: { ** “country”: “United States”, “countryCode”: “US”, “locality”: “Providence”, “region”: “Rhode Island”, “subRegion”: “Providence County” }** |
| geo | object | gnip object 内の profileLocation の location オブジェクト内に含まれます。 profile geo enrichement によって導出されたロケーションのセントロイド座標です。 “geo”: { ** “coordinates”: [ -98.5, 39.76 ], “type”: “point” }** |
X entities オブジェクト
例:
X 拡張エンティティオブジェクト
twitter_extended_entities は、ネイティブ拡張 (enriched) フォーマットで示されている extended_entities オブジェクト と同じ形式とデータディクショナリです。
例:
Gnip オブジェクト
gnip オブジェクトには、アクティブなエンリッチメントによって追加されたメタデータと、そのアクティビティがどのルールにマッチしたかを示す情報が含まれます。
データディクショナリ
| Field | Type | Description |
| matching_rules | array | アクティビティがマッチしたルールを示す matching rule オブジェクトの配列です。 “matching_rules”: [ ** { “tag”: null, “id”:** 1026514022567358500**, “id_str”:** “1026514022567358464” ** } ]** |
| urls | array | アクティビティ内に含まれるリンクおよび、URL アンワインド (unwinding) エンリッチメント用の展開済み URL メタデータの配列です。 ** “urls”: [ { “url”:** “https://t.co/tGQqNxxyhU”, “expanded_url”: “https://www.youtube.com/channel/UCwUxW2CV2p5mzjMBqvqLzJA”, “expanded_status”: 200**, “expanded_url_title”:** “Birdys Daughter”, “expanded_url_description”: “Premium, single-origin, handpicked Jamaica Blue Mountain Coffee” ** } ]** |
| profileLocations | array of location objects | Profile Geo エンリッチメントから導出された location オブジェクトの配列です。 ** “profileLocations”: [ { “address”: { “country”:** “Canada”, “countryCode”: “CA”, “locality”: “Toronto”, “region”: “Ontario” ** }, “displayName”:** “Toronto, Ontario, Canada”, ** “geo”: { “coordinates”: [ -79.4163, 43.70011 ], “type”:** “point” ** }, “objectType”:** “place” ** } ] }** |
例:
アクティビティストリームのペイロード例
twitter_extended_entities を含むポストのアクティビティ
ツイートメタデータタイムライン
はじめに**
X は本質的に、公開され、リアルタイムで、グローバルなコミュニケーションネットワークです。2006 年以降、X の進化は、ユーザーの利用パターンや慣習に加え、新しいプロダクト機能や機能拡張によって推進されてきました。X データを歴史研究に活用する場合、この進化のタイムラインを理解することは、データアーカイブから関心のある投稿を見つけ出すうえで重要です。 X はシンプルな SMS モバイル App としてローンチされ、その後、包括的なコミュニケーションプラットフォームへと成長しました。完全な API 群を備えたプラットフォームです。API は常に X ネットワークの柱でした。最初の API は、X のローンチ直後に公開されました。2009 年にポストのジオタグ機能が初めて導入された際には、その機能は Geo API を通じて提供されました (その後、「ジオタグ」をポストに付与する機能は X.com のユーザーインターフェースに統合されました) 。現在、X の API は双方向のコミュニケーションネットワークを支えており、このネットワークは速報ニュースや情報共有のソースとなっています。このグローバルでリアルタイムなコミュニケーションチャネルの上に構築できる機会は無限にあります。 X では、すべての公開ポストにアクセスできる 2 つの歴史データ向け API を提供しています。Historical PowerTrack と Full-Archive Search API です。どちらの API も、関心のある投稿をクエリして収集するための一連の オペレーター を提供します。これらのオペレーターは、各ポストに関連付けられたさまざまな属性、たとえばポストのテキストコンテンツ、投稿者のアカウント名、ポスト内で共有されているリンクなど、数百におよぶ属性にマッチします。ポストおよびその属性は、テキストベースの一般的なデータ交換フォーマットである JSON でエンコードされています。そのため、新機能が導入されると新しい JSON 属性が追加されることが多く、通常はその属性にマッチする新しい API オペレーターも追加されてきました。ユースケースに、世界中の人々が X 上で「何を言ってきたか」に 耳を傾ける 必要が含まれる場合、各オペレーターに対応する JSON メタデータがいつから存在しているのかをよく理解しているほど、Historical PowerTrack フィルターをより効果的に構築できます。 次に、ポストのメタデータの更新が、関心のあるデータシグナルの発見にどのような影響を与えるかを理解する前提となる、いくつかの主要な概念を紹介します。重要な概念**
ユーザー主導の慣習から X の_第一級オブジェクト_へ
ポストのメタデータ、可変性、更新、最新性
「ネイティブ」メディア
has:videos、has:images、has:media などがあります。これらは、X の機能を通じて共有されたメディアコンテンツにのみマッチします。X プラットフォーム外でホストされているその他のメディアにマッチさせるには、URL メタデータに対してマッチする演算子を使用する必要があります。
Historical PowerTrack と Full-Archive Search の製品詳細に入る前に、プロダクトおよびプラットフォームとしての X が時間の経過とともにどのように進化してきたかを見ていきましょう。
X のタイムライン
以下に、X に関する タイムライン の一部を示します。これらの X のアップデートのほとんどは、ユーザー行動、ポストの JSON コンテンツ、クエリ演算子、あるいはそのすべてに、何らかの形で根本的な影響を与えました。X を API プラットフォームとして見ると、これらのイベントは、ポストをエンコードするために使用される JSON ペイロードに何らかの形で影響してきました。その結果、その JSON の詳細が、X の履歴 API がそれらにどのようにマッチするかにも影響します。
このタイムライン一覧は、概ね正確ではありますが、網羅的ではない点に注意してください。
2006
- 10月
- @replies が慣習として使われるようになる。
- Cashtags は 2012 年 6 月にクリック可能/検索可能なリンクになった。
- 11月 - 「お気に入り」 (Favorites) 機能が導入される。
2007
- 1月 - @replies が
in_reply_toメタデータを持つ UI の返信ボタンを備えた第一級のオブジェクトとなる。 - 4月 - リツイートが慣習として広く用いられるようになる。
- 8月 - #ハッシュタグが投稿を検索・整理するための主要な手段として使われ始める。
2009
- 2月 - 株式ティッカーシンボルを議論する際の一般的な表記法として、$cashtags の利用が一般化する。
- 5月 - Post 本文の先頭に「Via @」を付加する Retweet の「ベータ版」が導入される。
- 6月 - 認証済みアカウントが導入される。
- 8月 - 「RT @」パターンと新しい
retweet_statusメタデータを伴い、Retweet がファーストクラスのオブジェクトとして扱われるようになる。 - 10月 - リスト機能が公開される。
- 11月 - Post Geotagging API が公開され、サードパーティ製 App を通じてユーザーが位置情報を共有できる最初の方法が提供される。
2010
- 6月 - 投稿にジオタグを付けるための X Places を導入。
- 8月 - ウェブサイト向けの Post ボタンをリリース。リンク共有が容易になった。
2011
- 5月 - Followボタンが導入され、ウェブサイトと関連付けられたアカウントをより簡単にフォローできるようになりました。
- 8月 - ネイティブな写真投稿機能が導入されました。
2012
- 6月 - $Cashtags がクリックおよび検索可能なリンクになる。
2014
- 3月 - 写真へのタグ付けと最大4枚までの写真に対応。拡張版 X Entities メタデータが導入されました。
- 4月 - 絵文字が X の UI でネイティブにサポートされました。絵文字は少なくとも 2008 年以降、投稿で一般的に使用されていました。
2015
- 4月 - X の「ポスト」ユーザーインターフェースデザインの変更により、位置情報付きの投稿数が減少。
- 10月 - X Polls introduced。Polls は当初、24時間の投票期間で 2 つの選択肢に対応していた。11月には、投票期間 5 分〜7 日で 4 つの選択肢に対応するようになった。Poll メタデータは、2017 年 2 月に利用可能になった (拡張ネイティブ形式のみ) 。
2016
- 2月 - ポスト作成画面でネイティブにホストされたGIFを検索して利用できる機能。
- 5月 - 「140文字でもっとできること」 (dmw140) を発表し、ポストの140文字メッセージに関して、リプライや添付メディアを扱う新しい方法を導入する計画を明らかにしました。
- 6月 - ネイティブ動画サポート。
- 6月 - 引用リツイートが一般提供開始。
- 6月 - 写真に追加するためのステッカーを導入。
- 9月 - 「ネイティブアタッチメント」を導入。末尾のURLが140文字数にカウントされないようにするもの (「dmw140 パート1」) 。
2017
- 2月 - X Poll メタデータがポストのメタデータに含まれるようになる (拡張ネイティブ形式のみ) 。
- 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日 - 投稿の編集機能が一部のテストグループにロールアウトされる。編集されたポストのメタデータが、該当する場合はポストオブジェクトに追加される。これには edit_history オブジェクトおよび edit_controls オブジェクトが含まれる。これらのメタデータは、編集可能機能が追加される前に作成された投稿については返されない。これらのメタデータに関連する Operator は存在しない。ポストの編集がどのように機能するかの詳細については、Edit Posts fundamentals を参照。
lang: Operator があります。X は言語分類サービス (50 を超える言語に対応) を提供しており、X API は各ポストに対して生成される JSON 内でこのメタデータを提供します。たとえば、あるポストがスペイン語で書かれている場合、その JSON 属性「lang」は「es」に設定されます。このため、lang:es という句を含むフィルターを作成すると、スペイン語として分類された投稿メッセージのみにマッチします。
タイムライン情報は、受信した投稿データをより適切に解釈するうえでも役立ちます。たとえば、2008 年と 2012 年の夏季オリンピックに関するコンテンツの共有を調査しているとします。is:retweet Operator だけを適用してリツイートにマッチさせた場合、2008 年にはデータは 1 件もマッチしません。しかし、2012 年については、おそらく数百万件のリツイートが存在するでしょう。このことから誤って、2008 年にはリツイートがユーザーの慣行ではなかった、もしくは単に誰もそのオリンピックについてリツイートしなかった、と結論づけてしまう可能性があります。リツイートは 2009 年にファーストクラスのオブジェクトになったため、2008 年のリツイートを特定するには ”RT @” というルール句を追加する必要があります。
リツイートと言語分類はいずれも、長い歴史と多くのプロダクト上の詳細を持つ投稿属性の例です。以下では、X データのマッチングと理解に重要な、これらおよびその他の属性クラスについて、さらに詳しく説明します。
偽陰性を見分ける
has:videos Operator を使ってルールを作成しても、その条件は 2015 年以前の投稿にはマッチしません。
しかし、X では 2015 年よりずっと前から、動画の共有は一般的に行われていました。当時は、ユーザーは他の場所にホストされている動画へのリンクを共有していましたが、2015 年に X はプラットフォームに新しい「動画共有」機能を直接実装しました。こうしたそれ以前の対象ポストを見つけるには、url:”youtube.com” のようなルール句を追加します。
なお、Search API では、インデックスの再構築時にメタデータが「バックフィル」される例もあります。よい例としては、株式銘柄を議論する際に 2009 年に広く使われるようになった cashtag オペレーターが導入された後、Search インデックスが再構築され、その過程でシンボルエンティティが、2006 年初期を含むすべてのポスト本文から抽出されました。当時は $ は主にスラングとして使われており、「I hope it $oon!」のような使われ方をしていました。
ユースケースにとって重要なポスト属性の特定とフィルタリング
X プロフィール
元のポストとリツイート
is:retweet 演算子を使うことで、リツイートを含めるか除外するかを制御できます。2009年8月より前のデータを取得する場合、ユーザーはリツイートにマッチさせる (あるいはマッチさせない) ための 2つ の戦略を持つ必要があります。2009年8月以前については、ポストメッセージ自体を、「@RT 」パターンに対して完全一致検索を行うことでチェックする必要があります。2009年8月以降の期間については、is:retweet 演算子が利用可能です。
ポストの言語分類
lang: 演算子はポストの全アーカイブに対して利用できます。一方、Historical PowerTrack では、X の言語分類メタデータは 2013 年 3 月 26 日以降のアーカイブで利用可能です。
投稿の位置参照
- ポスト本文中の地理的な参照情報
- ユーザーによって位置情報タグが付けられた投稿
- ユーザーがアカウントプロフィールで設定した「ホーム」ロケーション