跳转到主要内容

使用 X API 的会话线程

观察 X 上的会话走向时,一个 Post 可能引发多条会话线程,随着更多人参与,每条线程的长度和复杂度都会增加。识别各个 Post 之间的关系并理解会话线程,是 X API v2 响应负载和搜索能力所提供的功能。当某个 Post 收到回应(即“回复”),或对该回复再进行回应时,每条回复上都会带有一个明确的 conversation_id,其值与开启该会话的原始 Post 的 Post ID 相同。 对某个 Post 的回复,以及对这些回复的再次回复,都会被归入由这条原始 Post 引发的同一个会话中。无论产生多少条回复分支,它们都会共享指向最初引发会话的那条原始 Post 的同一个 conversation_id。使用 X API v2,你可以检索并重建整条会话线程,从而理解讨论内容以及会话与想法的演变过程。

示例会话串

下面是一个示例会话串,涉及五位不同的参与者,其中包含对某条回复的再次回复。
{
  "data": [
    {
      "conversation_id": "1279944223114900000",
      "in_reply_to_user_id": "1102323333",
      "author_id": "63044444",
      "created_at": "2020-07-06T15:58:10.000Z",
      "id": "1280169177479744444",
      "referenced_tweets": [
        {
          "type": "replied_to",
          "id": "1280155225706433333"
        }
      ],
      "text": "@ThirdPerson333 @OriginalPerson000 回复第三条回复!"
    },
    {
      "conversation_id": "1279944223114900000",
      "in_reply_to_user_id": "3001960000",
      "author_id": "1102323333",
      "created_at": "2020-07-06T15:02:44.000Z",
      "id": "1280155225706433333",
      "referenced_tweets": [
        {
          "type": "replied_to",
          "id": "1279944223114900000"
        }
      ],
      "text": "@OriginalPerson000 第三条回复"
    },
    {
      "conversation_id": "1279944223114900000",
      "in_reply_to_user_id": "3001960000",
      "author_id": "199562222",
      "created_at": "2020-07-06T15:02:36.000Z",
      "id": "1280155190306340864",
      "referenced_tweets": [
        {
          "type": "replied_to",
          "id": "1279944223114900000"
        }
      ],
      "text": "@OriginalPerson000 第二条回复"
    }
  ],
  "includes": {
    "users": [
      {
        "name": "原发帖人",
        "id": "3001960000",
        "username": "OriginalPerson000"
      },
      {
        "name": "第一位用户",
        "id": "179201111",
        "username": "FirstPerson111"
      }
    ]
  },
  "meta": {
    "newest_id": "1280169177479744444",
    "oldest_id": "1279945722494811111",
    "result_count": 4
  }
}
conversation_id 作为 tweet.fields 参数检索 要在 v2 端点中为返回的所有 Post 请求 conversation_id,请在请求参数中添加 tweet.fields=conversation_id。conversation_id 始终是该会话回复线程中原始 Post 的 Post ID。属于同一回复线程的所有 Post(包括由较早回复线程派生的回复线程)都会显示相同的 conversation_id。

使用 conversation_id 参数的请求

curl --request GET \
  --url 'https://api.x.com/2/tweets?ids=1225917697675886593&tweet.fields=author_id,conversation_id,created_at,in_reply_to_user_id,referenced_tweets&expansions=author_id,in_reply_to_user_id,referenced_tweets.id&user.fields=name,username' \
  --header 'Authorization: Bearer $ACCESS_TOKEN'

响应

{
  "data": [
    {
      "id": "1225917697675886593",
      "text": "@TwitterEng *ahem* https://t.co/aroJHt2zQ1",
      "created_at": "2020-02-07T23:02:10.000Z",
      "author_id": "2244994945",
      "in_reply_to_user_id": "6844292",
      "conversation_id": "1225912275971657728",
      "referenced_tweets": [
        {
          "type": "quoted",
          "id": "1200517737669378053"
        },
        {
          "type": "replied_to",
          "id": "1225912275971657728"
        }
      ]
    }
  ],
  "includes": {
    "users": [
      {
        "username": "TwitterDev",
        "name": "Twitter 开发",
        "id": "2244994945"
      },
      {
        "username": "TwitterEng",
        "name": "Twitter 工程团队",
        "id": "6844292"
      }
    ],
    "tweets": [
      {
        "id": "1200517737669378053",
        "text": "| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|\n             周五不要            \n             部署到生产            \n               环境                  \n|___________| \n(\\__/)",
        "created_at": "2019-11-29T20:51:47.000Z",
        "author_id": "2244994945",
        "conversation_id": "1200517737669378053"
      }
    ]
  }
}

conversation_id 用作过滤运算符

conversation_id 可在“近期搜索”中作为查询参数使用,或在规则中作为运算符用于过滤流。这将返回整条会话线程中的 Post:要么通过过滤流实时返回,要么通过搜索 Tweets按时间倒序返回。你也可以将此运算符与Posts 计数结合使用,以获取某个会话中的 Post 数量。

通过 conversation_id 查询的请求

curl --request GET \
  --url 'https://api.x.com/2/tweets/search/recent?query=conversation_id:1279940000004973111&tweet.fields=in_reply_to_user_id,author_id,created_at,conversation_id' \
  --header 'Authorization: Bearer $ACCESS_TOKEN'

响应

注意:搜索 Post 的结果按时间逆序显示。
{
  "data": [
    {
      "id": "1280169000000704333",
      "text": "@attributeisland @iterationjoe 多么美丽的生物啊!#seaturtleweek 快乐",
      "conversation_id": "1279940000004973111",
      "public_metrics": {
        "retweet_count": 0,
        "reply_count": 0,
        "like_count": 7,
        "quote_count": 0
      }
    }
  ],
  "meta": {
    "newest_id": "1280169000000704333",
    "oldest_id": "1279940000004973111",
    "result_count": 5
  }
}