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

フィルタードストリームエンドポイントの始め方

このクイックスタートガイドでは、cURL リクエストを使ってフィルタードストリームのエンドポイントグループに最初のリクエストを送る方法を説明します。cURL は、最小限の設定でリクエストを実行できるコマンドラインツールです。 さまざまな言語のサンプルコードを見たい場合は、GitHub の X API v2 sample code リポジトリをご覧ください。
前提条件このガイドを完了するには、リクエストを認証するための keys and tokens が必要です。次の手順に従ってキーとトークンを生成できます。
  • 開発者アカウントにサインアップし、承認を受けてください。
  • 開発者ポータルで Project を作成し、関連付けられた developer App を作成します。
  • アプリの「Keys and tokens」ページに移動して、必要なクレデンシャルを生成します。すべてのクレデンシャルは安全な場所に保存してください。

cURL を使用してフィルタ済みストリームリクエストを構築する手順

ステップ 1: ルールを作成する ルールは、ブール論理と括弧で組み合わせる一つまたは複数のオペレーターで構成され、どの Post がストリームに配信されるかを定義するのに役立ちます。本ガイドでは、キーワード「cat」と画像の両方を含む Post を見つけるようにストリームをフィルタリングします。ルールは次のとおりです。
has:images
ステップ2:ルールにタグを追加する ストリームには複数のルールを同時に追加できます。ストリーミング接続を開始すると、これらのいずれかのルールに一致するPostは同じストリーミング接続を通じて配信されます。どのPostがどのルールに一致したかを判別できるよう、ルール作成リクエストにタグを付与できます。そのルールに一致した各Postには、どのルールに一致したかを示すタグフィールドがPostペイロード内に含まれます。このルールでは、次のタグを割り当てます。
with images
ステップ3:ルールをストリームに追加する このエンドポイントでは、リクエストに 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": "画像付きの猫"}
  ]
}'`
ステップ4:リクエストを認証する フィルタ済みストリームのルールエンドポイントは OAuth 2.0 App-Only 認証 を必要とするため、ステップ3の cURL コマンド内の $APP_ACCESS_TOKEN を、前提条件で生成した App Access Token に置き換える必要があります。  ステップ5:ルールをストリームに追加する 続いて、cURL リクエストを実行してルールをストリームに追加します。cURL コマンドをコマンドラインインターフェースにコピー&ペーストし、Enter キーを押します。  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
    }
  }
}
rules エンドポイントに対して次の 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": "cats with images"
	}],
	"meta": {
		"sent": "2020-06-16T23:14:06.498Z"
	}
}
ステップ6:取得したい fields を特定し、指定する ステップ5の後にストリームへ接続すると、レスポンスにはデフォルトのPost オブジェクトの fields が含まれます:id、text、edit_history_tweet_ids。これら以外の追加の fields を受け取りたい場合は、リクエストで field および/または expansion パラメータを指定する必要があります。 この演習では、異なるオブジェクトから3種類の fields セットをリクエストします:
  1. プライマリの Post オブジェクトにおける追加の tweet.created_at フィールド。
  2. 返される Posts に関連する著者のユーザーオブジェクトのデフォルト fields:id、name、username
  3. 関連するユーザーオブジェクトにおける追加の user.created_at フィールド。  
これらの fields をリクエストするには、リクエストに以下を渡す必要があります:
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
ステップ7:ストリームに接続してレスポンスを確認する ルールを設定し、返したい fields を指定したので、送信したルールに一致する Post オブジェクトを配信するストリームに接続する準備が整いました。ステップ6で取得した 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": "X Dev",
        "username": "XDev"
      }
    ]
  }
}
接続を終了するには、Mac/Windows いずれの環境でもコマンドラインツールで Control-C を押して接続を切断するか、ウィンドウを閉じてください。