跳转到主要内容

介绍

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

默认行为

默认情况下,当你向 X API v2 中任一返回 Post 对象的端点发起 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 在创建时是否可编辑,以及该 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
        }
      }
    ]
  }
}