メインコンテンツへスキップ

はじめに

X API v2 の endpoint は、編集済みの Post の metadata を提供します。Edit Posts 機能は 2022 年 9 月 1 日に X 社員向けのテストとして初めて導入されました。その日以降、対象となる Post は 30 分間、最大 5 回まで編集可能です。2022 年 9 月 29 日以降に作成された Post のオブジェクトはすべて、Post が一度も編集されていなくても Post の編集 metadata を含みます。Post が編集されるたびに新しい Post ID が作成されます。Post の編集履歴は、元の ID から始めてこれらの ID を連結することで表現できます。さらに、編集チェーン内のいずれかの Post が削除されると、そのチェーン内のすべての Post も削除されます。 X API v2 を使用すると、開発者は次のことを把握できます:
  • 作成時点で Post が編集対象だったかどうか(一部の Post、たとえば投票付きや予約投稿は編集不可)。
  • Post は 30 分間編集可能で、最大 5 回まで編集できます。編集可能な Post については、残りの編集可能時間と残り編集回数を確認できます。
  • 表示している Post が編集済みバージョンかどうか(多くの場合、特定の過去バージョンを Post ID で要求しない限り、API は最新バージョンを返します)。
  • 当該 Post の完全な編集履歴。
  • 各バージョンの Post に紐づくエンゲージメント。
Post の編集履歴は次の 3 要素で構成されます:
  1. 既定では、Post ペイロードには、Post の編集履歴に含まれる Post ID の配列が含まれます。この情報は edit_history_tweet_ids によって示され、これは Post ペイロードの既定フィールドです。この配列には少なくとも 1 つ、元の未編集の Post の ID が含まれます。ID が 1 つだけの場合は、その Post に編集履歴がないことを意味します。 
  2. 作成時点で Post が編集可能だったか、編集可能な残り時間があるか、残り編集回数はいくつかといった情報は、tweet.fields パラメータで edit_controls を指定することで取得できます。
  3. 最後に、expansion パラメータで edit_history_tweet_ids を指定することで、編集履歴内の各 Post に対応する Post オブジェクトを取得できます。
ほとんどの Post は編集可能です。ただし、次の種類の Post は対象外です: 
  • プロモーション対象の Post
  • 投票付きの Post
  • 自己スレッド以外への返信の Post
  • リツイートの Post(引用ツイートは編集可能)
  • nullcast の Post
  • Community Post
  • Superfollow Post
  • Collaborative Post
Examples
以下の例は、X API v2 を使用して編集済み Post の metadata を開発者がどのようにリクエストできるかを示しています。  Note: 以下の例では User Post Timeline endpoint を使用していますが、Posts を返すすべての endpoint(例: Posts lookup、search、filtered stream など)で、同じパラメータ(fields および expansions)を使って同様に metadata をリクエストできます。

既定の動作

既定では、X API v2 で Post オブジェクトを返す任意の endpoint に対する API リクエストは、次の項目を返します。
  • Post ID
  • Post のテキスト
  • Post の編集履歴に含まれる Post ID の配列。ID が 1 つだけの場合、その Post は編集されていないことを意味します。
リクエスト: curl --request GET 'https://api.x.com/2/users/:id/tweets' --header 'Authorization: Bearer $BEARER_TOKEN' サンプルレスポンス:
  "data": [
    {
      "id": "1514991667853602823",
      "text": "編集ボタンがあります",
      "edit_history_tweet_ids": ["1514991667853602822", "1514991667853602823"]
    }
  ]
}

edit_controls で追加の data を取得する

Post の作成時点で編集の対象だったかどうかや、編集可能な残り時間など、編集に関する追加の metadata が必要な場合は、tweet.fields パラメータに edit_control を指定して、この情報を取得できます。 リクエスト: curl --request GET 'https://api.x.com/2/users/:id/tweets?tweet.fields=edit_control' --header 'Authorization: Bearer $BEARER_TOKEN' サンプルレスポンス:
  {
  "data": [
    {
      "id": "1514991667853602823",
      "text": "編集ボタンがあります",
      "edit_history_tweet_ids": ["1514991667853602822", "1514991667853602823"],
      "edit_controls": {
        "is_edit_eligible": true,
        "editable_until": "2022-04-21 09:35:20.311",
        "edits_remaining": 4
      }
    }
  ]
}

Post の編集履歴に含まれるすべての Posts の Post オブジェクトを取得する

上記の例では、Post の編集履歴に含まれる Post ID の配列を示しています。これら各 Post ID に対応する実際の Post オブジェクトが必要な場合は、拡張パラメータを使用し、edit_history_tweet_ids を指定します。編集履歴を構成する Post オブジェクトは “includes” オブジェクト内で返されます。  リクエスト:
      curl --location --request GET 'https://api.x.com/2/users/:id/tweets?tweet.fields=edit_control&expansions=edit_history_tweet_ids' --header 'Authorization: Bearer $BEARER_TOKEN'`
サンプル応答:
  {
  "data": [
    {
      "id": "1514991667853602823",
      "text": "編集ボタンがあります",
      "edit_history_tweet_ids": ["1514991667853602822", "1514991667853602823"],
      "edit_controls": {
        "is_edit_eligible": true,
        "editable_until": "2022-04-21 09:35:20.311",
        "edits_remaining": 4
      }
    }
  ],
  "includes": {
    "tweets": [
      {
        "id": "1514991667853602822",
        "text": "編集ボタンが必要です",
        "edit_history_tweet_ids": [
          "1514991667853602822",
          "1514991667853602823"
        ],
        "edit_controls": {
          "is_edit_eligible": true,
          "editable_until": "2022-04-21 09:35:20.311",
          "edits_remaining": 4
        }
      }
    ]
  }
}
I