跳转到主要内容

介绍

X API v2 的 endpoint 提供已编辑 Post 的 metadata。编辑 Post 功能于 2022 年 9 月 1 日首次向 X 员工进行测试。自该日期起,符合条件的 Post 可在 30 分钟内编辑,最多可编辑 5 次。自 2022 年 9 月 29 日起创建的所有 Post 的对象 都包含 Post 编辑 metadata,即使该 Post 从未被编辑。每次 Post 被编辑时,都会创建一个新的 Post ID。可以通过将这些 ID 串联在一起(从原始 ID 开始)来描述某个 Post 的编辑历史。此外,如果编辑链中的任何一个 Post 被 delete,该链中的所有 Post 也会被删除。 使用 X API v2,开发者可以了解:
  • Post 在创建时是否具备可编辑资格。某些 Post(例如带投票或已排程的 Post)不可编辑。
  • Post 在 30 分钟内可编辑,且最多可编辑 5 次。对于可编辑的 Post,您可以查看是否仍有剩余编辑时间以及还可以编辑多少次。
  • 您是否正在查看某个 Post 的已编辑版本(在大多数情况下,API 会返回该 Post 的最新版本,除非通过 Post ID 请求了特定的历史版本)。
  • 该 Post 的完整编辑历史。
  • 归属于该 Post 各版本的互动数据。
一个 Post 的编辑历史包含三个组成部分:
  1. 默认情况下,Post 负载会包含一个由 Post ID 构成的数组,表示该 Post 的编辑历史。此信息由 edit_history_tweet_ids 指定,它是 Post 负载中的默认字段。该数组至少包含一个 ID,即原始未编辑 Post 的 ID。当只有一个 ID 时,表示该 Post 没有编辑历史。 
  2. 通过在您的 tweet.fields 参数中指定 edit_controls,您可以获取诸如该 Post 在创建时是否可编辑、该 Post 是否仍有剩余可编辑时间,以及剩余可编辑次数等信息。
  3. 最后,您可以通过在 expansion 参数中指定 edit_history_tweet_ids,获取该 Post 的编辑历史中每个 Post 的 Post 对象。
大多数 Post 都符合编辑条件。然而,以下类型的 Post 不符合条件: 
  • 被推广的 Post
  • 含有投票的 Post
  • 非同线程的回复 Post
  • 转发的 Post(注意引用 Tweet 符合编辑条件)
  • nullcast 的 Post
  • 社区 Post
  • Super Follow Post
  • 协作 Post
示例
下面的示例演示了开发者如何使用 X API v2 请求已编辑 Post 的 metadata。  注意:以下示例使用的是用户 Post 时间线 endpoint,但对于所有返回 Post 的 endpoint(例如 Posts 查找、搜索、过滤的流 等),您都可以使用相同的参数(包含 fields 和 expansions)来请求这些 metadata。

默认行为

默认情况下,向 X API v2 中任何返回 Post 对象的 endpoint 发起 API 请求时,您将获得:
  • Post ID
  • Post 文本
  • 一个包含某个 Post 编辑历史所涉及的 Post ID 的数组。如果仅提供一个 ID,则表示该 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 获取更多数据

如果您需要额外的已编辑 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 的编辑历史中所有 Post 的 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