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

はじめに

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

以下の例は、X API v2 を使用して開発者が編集済み Post のメタデータをリクエストする方法を示しています。 注意: 以下の例では User Post Timeline エンドポイントを使用していますが、Post を返すすべてのエンドポイント(例: Post ルックアップ、検索、フィルタ済みストリーム など)に対して、同じパラメータ(fields と expansions)を使用してこのメタデータをリクエストできます。

既定の動作

デフォルトでは、X API v2 で Post オブジェクトを返す任意のエンドポイントに対して API リクエストを送ると、次の情報が返されます。
  • Post ID
  • Post Text
  • 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 が作成時点で編集対象だったか、編集可能な残り時間など、編集済み Post に関する追加のメタデータが必要な場合は、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 オブジェクトを取得する

上記の例では、ポストの編集履歴に含まれるポスト ID の配列を提示しています。これら各ポスト ID に対応する実際の Post オブジェクトが必要な場合は、expansions パラメータを使用し、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": "we have an edit button",
      "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": "we need an eidt button",
        "edit_history_tweet_ids": [
          "1514991667853602822",
          "1514991667853602823"
        ],
        "edit_controls": {
          "is_edit_eligible": true,
          "editable_until": "2022-04-21 09:35:20.311",
          "edits_remaining": 4
        }
      }
    ]
  }
}