はじめに
Twitter APIでは、開発者に世界中の出来事に関するデータにアクセスする方法を提供しています。開発者は、APIを使用して興味関心のあるイベントをリッスンし、それらのイベントに基づいてアクションをトリガーするアプリケーションを構築します。たとえば、特定のユーザーアカウントから特定の単語(ニュース速報)を含むツイートをリッスンし、それらのアカウントで該当のキーワードを含むツイートがあった場合はいつでもSMSで通知を受け取ることができます。
フィルタリングされたストリームとサンプリングされたストリームのエンドポイントを使用すると、公開ツイートから重要なイベントがリアルタイムで展開されるのをリッスンできます。フィルタリングされたストリームエンドポイントは、設定した条件に一致する特定の一連のツイートを返すのに対し、サンプリングされたストリームエンドポイントは、すべての公開ツイートの約1%のランダムなサンプルをリアルタイムで返します。そのため、フィルタリングされたストリームエンドポイントを使用すれば、探しているツイートの条件を事前に定義できます。サンプリングされたストリームエンドポイントについては、初めにランダムな1%のサンプルを使用したら、その応答から興味関心のあるツイートを特定できます。これらのイベントに関するツイートを取得したら、それに基づいて適切なアクションまたは通知をトリガーできます。
このガイドでは、以下の項目について説明します。
リッスンするツイートの種類を特定する
適切なエンドポイントで認証して接続し、ツイートを受信する
リッスンする興味関心のあるツイートに基づいてアクションまたは通知をトリガーする
前提条件
- 承認済み開発者アカウントを用意し、新しい開発者ポータルエクスペリエンスをアクティブにしておく必要があります。アクセスには、開発者ポータルで作成されたプロジェクトにアタッチされた開発者アプリのアクティブキーとトークンを使用します。
Twitter開発者ポータルのアプリのベアラートークン。
考慮すべき手順
リッスンするツイートの種類を特定する
まず、リッスンするイベントの種類を特定する必要があります。そのために、次のような基本的な質問について検討しましょう。
特定のハッシュタグやキーワードに基づいたツイートを探していますか?
リツイートされたツイートを含めますか/除外しますか?
メディアを含むツイートを特に探していますか?
特定の言語のツイートが必要ですか?
これらの質問への回答が得られたら、次のアプローチを使用して必要なデータを取得できます。
- サンプルストリームのエンドポイントを使用すると、Twitterで発生しているすべてのアクティビティの1%のサンプルをリッスンできます。このストリームに接続すると、このツイートのストリームで人気のあるトピックのトレンドを特定できます。その後、選択したチャンネルに通知できます。
- フィルタリングされたストリームを使用すると、明示的に検索クエリを作成し、探しているデータを定義できます。たとえば、「#Caturday」というハッシュタグの付いたツイートをすべて検索し、画像を含むツイートのみをフィルタリングするように指定できます。この条件を満たすツイートを受信したら、そのツイートのリンクをメールやSMSなどで送信できます。
適切なエンドポイントで認証して接続し、ツイートを受信する
認証
サンプリングされたストリームまたはフィルタリングされたストリームのエンドポイントからデータの受信を開始するには、認証する必要があります。これを行うには、以下のcURL呼び出しの$BEARER_TOKEN
($記号を含む)を、開発者ポータルのアプリから取得したベアラートークンに置き換えます。
興味関心のあるトピックに関する情報を常に入手する
興味関心のある特定のトピックに関する情報を常に入手するために、フィルタリングされたストリームエンドポイントを使用できます。フィルタリングされたストリームエンドポイントのルールを追加して、探しているデータを指定できます。そのためには、フィルタリングされたストリームのルール作成エンドポイントに対してPOST呼び出しを行う必要があります。ルールを作成するためのcURL呼び出しの例は、次のようになります($REPLACE_WITH_RULE
を独自の語句と演算子のセットに置き換えてください)。
curl -X POST 'https://api.x.com/2/tweets/search/stream/rules' \
-H "Content-type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" -d \
'{
"add": [
{"value": "from:twitterdev from:twitterapi has:links"}
]
}'
たとえば、ハッシュタグ「#Caturday」に関する画像付きのツイートを、リツイートを除きすべて取得するルールは以下のようになります。
“#caturday has:images -is:retweet”
使用可能な演算子とルールの構築についての詳細は、こちらを参照してください。
ルールを追加したら、フィルタリングされたストリームエンドポイントに接続して、クライアントへのデータのストリーミングを開始できます。以下の例では、cURLを使ってこれを行う方法を示しています。
curl -X GET -H "Authorization: Bearer $BEARER_TOKEN" "https://api.x.com/2/tweets/search/stream"
いずれかのコードサンプルを使用して、フィルタリングされたストリームエンドポイントに接続することもできます
ストリームへの接続が正常に確立されると、永続的なHTTPストリーミング接続を介してJSON形式で配信されたツイートを受信します。ストリームに接続している間は、以前に定義したルールに一致するツイートのみを受信します。現在一致するツイートがない場合は、アプリがタイムアウトしないように、20秒ごとに復帰改行を受信します。
現在のトレンドを検出する
特定の時点で人気のあるトピックを確認するには、サンプリングされたストリームのAPIを使用します。サンプルストリームAPIに接続するには、エンドポイントにGETリクエストを発行します。以下の例では、cURLを使って追加する方法を示しています。
curl -X GET -H "Authorization: Bearer $BEARER_TOKEN" "https://api.x.com/2/tweets/stream/sample"
いずれかのコードサンプルを使用して、サンプリングされたストリームエンドポイントに接続することもできます
接続すると、投稿されたツイートを継続的に受信します。エンドポイントでツイートを受信すると、キーと値ストアや他のデータストアで繰り返し発生したハッシュタグ、ユーザーの@ツイート、キーワード、注釈をプログラムでスキャンしてカウントできます。
リッスンする興味関心のあるツイートに基づいてアクションまたは通知をトリガーする
興味関心のあるツイートを見つけたら、次に何をするかを決定します。特定のチャンネル(メールの送信、SMSの送信、コミュニケーションアプリへの通知の送信など)を使用して、興味関心のあるツイートへのリンクを添付し、通知できます。
ツイートデータを含むメールの送信
ツイートへのリンクをプログラムで自動的にメール送信するには、メールサービスを使用する必要があります。このようなサービスの例としては、SendGrid Email API、AWS Simple Email Service(SES)などがあります。これらのサービスは通常、SDKを提供しているので、簡単に始めることができます。通常、メールアドレス(宛先と送信元)を確認する必要があり、本文にツイートへのURLを渡すことができます。
ツイートデータを含むSMSの送信
ユースケースによっては、SMSを使用してツイートへのリンクを送信する必要がある場合があります。プログラムで自動的にSMSを送信できるサービスには、Twilio、AWS Simple Notification Service(SNS)などがあります。これらのサービスでもSDKを提供しているので、自分のコード内で使用して始めることができます。Twilioでは、SMSを送信できる電話番号を提供しており、ツイートへのURLをメッセージ本文として使用できます。
コミュニケーションツールへの通知の送信
使用しているコミュニケーションツールにツイートのリンクを送信できます。Slack、DiscordなどのコミュニケーションツールにはAPIが用意されており、これらのアプリのチャンネルにメッセージを送信できます。あらかじめこれらのコミュニケーションツールでアプリを作成し、メッセージを送信するためのWebhook URLを取得する必要がある場合があります。アプリを作成(さらにWebhookなどを取得)したら、選択したチャネルにツイートへのリンクを送信できるようになります。
注:ユースケースで、イベントが発生したときにすぐに通知を受けたくない場合は、最新の検索エンドポイントを使用して定期的に呼び出すこともできます。その後、このエンドポイントからデータを取得してから、適切なチャンネルに通知する方法を決めることができます。
フィルタリングされたストリームエンドポイントを使用してニュース速報をリッスンし、SlackやSMSから通知を送信するサービスを構築する例については、こちらのチュートリアルを参照してください。このアプリはカスタムコーディングを必要とせず、AWSにデプロイできます。
次の手順
フィルタリングされたストリームのクイックスタートガイドを使用して構築を開始する
フィルタリングされたストリームのAPIリファレンスを確認して、利用可能なものを調べる
フィルタリングされたストリームエンドポイントのルール作成エンドポイントを使用してルールの作成方法を学ぶ
サンプリングされたストリームのクイックスタートガイドを使用して構築を始める
サンプリングされたストリームのAPIリファレンスを確認して、利用可能なものを調べる
- その他のユースケースガイドを読む