跳转到主要内容

开始使用过滤流端点

本快速入门指南将帮助你使用 cURL 请求首次调用过滤流端点组。cURL 是一个命令行工具,可在最少配置下发起请求。 如果你希望查看不同语言的示例代码,请访问我们的X API v2 示例代码 GitHub 仓库。
先决条件完成本指南,你需要一组用于对请求进行认证的keys and tokens。你可以按照以下步骤生成这些 keys 和 tokens:
  • 注册开发者账号并通过审核。
  • 在开发者门户中创建一个Project以及关联的developer App
  • 前往你的应用的“Keys and tokens”页面以生成所需的凭据。请务必将所有凭据保存在安全位置。

使用 cURL 构建过滤流请求的步骤

步骤一:创建规则 规则由一个或多个不同的运算符组成,并通过布尔逻辑和括号进行组合,以便定义哪些 Post 会传送到你的流中。在本指南中,我们将过滤流以查找同时包含关键词“cat”和图片的 Post。以下是我们的规则:
has:images
步骤二:为你的规则添加标签 你可以为流添加多个并行规则。当你打开流式连接时,凡是满足任一规则的 Post 都会通过同一条连接传输。为便于识别每个 Post 与哪条规则匹配,你可以在创建规则的请求中附带一个标签。每个匹配该规则的 Post 随后都会在其负载中包含一个 tag 字段,用于标注匹配的规则。对于这条规则,我们将使用以下标签:
with images
步骤三:将规则添加到流中 此端点要求你在请求中附带一个 Content-Type 为 application/json 的请求体,其中包含你的规则及其标签。你还会注意到,我们将规则值和标签放在一个 add 对象中,因为我们要把这条规则添加到流中。该 JSON 请求体如下所示:
{
  "add": [
    {
      "value": "cat has:images",
      "tag": "带图片的猫"
    }
  ]
}
现在你已经完成了这个 JSON 正文的设置,可以将其添加到一个 cURL 请求中,形式如下。该请求尚未准备好,请暂时不要提交,稍后步骤再进行。
curl -X POST 'https://api.x.com/2/tweets/search/stream/rules' \
-H "Content-type: application/json" \
-H "Authorization: Bearer $APP_ACCESS_TOKEN" -d \
'{
  "add": [
    {"value": "cat has:images", "tag": "带图片的猫"}
  ]
}'`
步骤四:认证你的请求 由于筛选流规则端点需要OAuth 2.0 仅应用认证,你需要将第 3 步 cURL 命令中的 $APP_ACCESS_TOKEN 替换为你在前置条件中生成的 App 访问令牌 步骤五:将你的规则添加到流中 下一步是执行你的 cURL 请求,这会把规则添加到你的流中。将 cURL 命令复制并粘贴到命令行界面,然后按“Return”。 如果你的 cURL 请求成功,你将收到一条响应,其中包含关于你的 value、tag 和 id(作为规则的唯一标识符)的 data。该响应类似如下:
{
  "data": [
    {
      "value": "cat has:images",
      "tag": "带图片的猫",
      "id": "1273026480692322304"
    }
  ],
  "meta": {
    "sent": "2020-06-16T22:55:39.356Z",
    "summary": {
      "created": 1,
      "not_created": 0,
      "valid": 1,
      "invalid": 0
    }
  }
}
你可以通过向规则端点发送以下 GET 请求来确认你的规则是否已成功添加,并再次将 $APP_ACCESS_TOKEN 替换为你的令牌。该请求会返回你的流中已添加的所有规则的完整列表。
curl -X GET 'https://api.x.com/2/tweets/search/stream/rules' \
-H "Authorization: Bearer $APP_ACCESS_TOKEN"
如果你的 cURL 请求成功,你将会收到以下内容:
{
	"data": [{
		"id": "1273028376882589696",
		"value": "cat has:images",
		"tag": "带图片的猫"
	}],
	"meta": {
		"sent": "2020-06-16T23:14:06.498Z"
	}
}
第六步:确定并指定要检索的 fields 如果你在步骤五之后连接到流,你将在响应中收到默认的 Post 对象 字段:id、text 和 edit_history_tweet_ids。若希望获取这些以外的更多字段,你需要在请求中通过 fields 和/或 expansions 参数来指定这些字段。 在本练习中,我们将从不同对象请求三组不同的字段:
  1. 主 Post 对象中的附加字段 tweet.created_at。
  2. 返回的 Posts 的关联作者的 user 对象 默认字段:id、name 和 username
  3. 关联 user 对象中的附加字段 user.created_at。  
要请求这些字段,你需要在请求中传递以下内容:
KeyValueReturned fields
tweet.fieldscreated_attweets.created_at
expansionsauthor_idincludes.users.id, includes.users.name, includes.users.username
user.fieldscreated_atincludes.users.created_at
现在你已了解这些内容,可以拼接你的请求 URL 来连接到流,其形式如下:
https://api.x.com/2/tweets/search/stream?tweet.fields=created_at&expansions=author_id&user.fields=created_at
步骤七:连接流并查看响应 现在你的规则已生效,且已指定希望返回的 fields,你就可以连接到该流了。它会传送与所提交规则匹配的 Post 对象。将第六步中的 URL 添加到请求后,cURL 命令如下:
curl -X GET -H "Authorization: Bearer $APP_ACCESS_TOKEN" "https://api.x.com/2/tweets/search/stream?tweet.fields=created_at&expansions=author_id&user.fields=created_at"
再次说明,此请求必须使用 OAuth 2.0 App‑Only 进行身份验证,因此在将其复制粘贴到命令行工具之前,请务必将 $APP_ACCESS_TOKEN 替换为你的凭据。 连接到过滤流后,你将开始接收符合你规则的 Post,JSON 格式如下:
{
  "data": [
    {
      "author_id": "2244994945",
      "created_at": "2022-09-14T19:00:55.000Z",
      "id": "1228393702244134912",
      "edit_history_tweet_ids": ["1228393702244134912"],
      "text": "开发者在情人节贺卡上写了什么?\n  \nwhile(true) {\n    I = Love(You);  \n}"
    },
    {
      "author_id": "2244994945",
      "created_at": "2022-09-12T17:09:56.000Z",
      "id": "1227640996038684673",
       "edit_history_tweet_ids": ["1227640996038684673"],
      "text": "医生:上网搜索不会让你成为医生\n\n开发者: https://t.co/mrju5ypPkb"
    },
    {
      "author_id": "2244994945",
      "created_at": "2022-09-27T20:26:41.000Z",
      "id": "1199786642791452673",
      "edit_history_tweet_ids": ["1199786642791452673"],
      "text": "C#"
    }
  ],
  "includes": {
    "users": [
      {
        "created_at": "2013-12-14T04:35:55.000Z",
        "id": "2244994945",
        "name": "Twitter 开发者",
        "username": "TwitterDev"
      }
    ]
  }
}
如果你想关闭连接,可以在 Mac 或 Windows 的命令行工具中按下 Control-C 来中断连接,或者直接关闭窗口。