はじめに
Twitter APIを使用すると、プラットフォームからの公開ツイートをリアルタイムでストリーミングできるため、公開ツイートとその基本的なメトリックを表示できます。
このチュートリアルでは、以下の項目について説明します。
作業の目的を設定する
必要なデータを処理するための計画と準備を行う
適切なAPIエンドポイントに接続して認証する
エラーと切断に対処する
ツイートとその基本的なメトリックを表示する
前提条件
- 承認済み開発者アカウントを用意し、新しい開発者ポータルエクスペリエンスをアクティブにしておく必要があります。アクセスには、開発者ポータルで作成されたプロジェクトにアタッチされた開発者アプリのアクティブキーとトークンを使用します。
考慮すべき手順
手順1: 作業の目的を設定する
まず、達成したいことを定義し、その目的を達成するために必要なデータを決定します。
興味関心のあるトピックに関する情報を常に入手する。TwitterのAPIに関する最新情報、ニュース、イベントを常に把握したい場合など。
現在のトレンドを検出する。現在のトレンドを検出するのに苦労していて、世界中で議論されていることに関する情報を得たいと考えている場合など。
手順2:必要なデータを処理するための計画と準備を行う
興味関心のあるトピックに関する情報を常に入手する
興味関心のあるトピックに関する情報を常に入手する例では、必要なデータの種類と、それをリアルタイムで取得する方法を決定する必要があります。
たとえば、Twitter APIの更新情報を最新に保つには、@TwitterDevアカウントと@TwitterAPIアカウントから投稿された瞬間にツイートを取得する必要があります。また、リンクを含むツイートのみを取得することで、ツイートで提供されたその他のコンテキストを調べることができます。
このようなデータをリアルタイムで取得するには、フィルタリングされたストリームエンドポイントを使用できます。フィルタリングされたストリームエンドポイントには、フィルタリング条件を定義し、自分に送信されるツイートの種類を設定する必要があります。
フィルタリング条件を定義したら、これをフィルタリングされたストリームエンドポイントに適用する必要があります。
フィルタリング条件は、ルールという形式でフィルタリングされたストリームエンドポイントに適用されます。ルールを使用すると、
一連の演算子を使用することによって、対象となるツイートのみに絞り込むことができます。
フィルターを作成する際には、受信したくないデータのタイプを検討し、そこから逆算して作業するとよいでしょう。正しいキーワードを確認し、不要なツイートがストリームに入らないようにルールを調整する必要があります。より複雑なルールを作成する方法の例については、ルールの作成に関するドキュメントを参照してください。
先ほど定義したフィルタリング条件に基づいて、以下の演算子を含むルールを作成できます。
from:
- has:links
「from:」演算子は特定のユーザーからのツイートにマッチし、「has:links」演算子はツイート本文にリンクを含むツイートにマッチします。これらの演算子を合わせると、以下のようなルールになります。これは、@Twitterdevと@TwitterApiのアカウントからの、リンクを含むツイートを取得するようフィルタリングされたストリームエンドポイントに指示します。
“from:twitterdev from:twitterapi has:links”
このルールを追加するには、ルールと演算子の配列としてペイロードが追加された、フィルタリングされたストリームのルールエンドポイントにPOSTリクエストを発行します。以下の例では、cURLを使って追加する方法を示しています。認証するには、$BEARER_TOKEN
(ドル記号を含む)を開発者ポータルのアプリのベアラートークンに置き換えます。
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"}
]
}'
ルールエンドポイントへのPOSTは、以下のいずれかのコードサンプルも使用可能です
現在のトレンドを検出する
現在のトレンドを検出する例では、分析を実行するために必要なデータのタイプと量を検討する必要があります。たとえば、幅広いが比較的管理しやすい一連のツイートを読み込み、分析する必要がある場合があります。このデータは最新または比較的最新である必要もあります。分析にはツイートのテキストが重要ではありますが、他にも考慮しなければならないデータ要素があります。ツイートのテキスト内でも、ハッシュタグ、@ツイートが必要かどうかや、特定のキーワードを探しているかどうかも考慮する必要があります。
ツイートのテキスト以外にも、ツイートにはさまざまなデータフィールドが含まれているため、どのフィールドがトレンド検出のニーズに最適かを決定する必要があります。決定したフィールドに基づいて、たとえば、ツイートペイロードで利用できるキーワード、ハッシュタグ、@ツイート、またはツイート注釈に対して基本的な頻度分析を実行できます。デフォルトでは、各ツイートのIDとテキストのみが返されます。各ツイートに関する追加データを返す場合は、リクエストURLにフィールドと拡張を追加できます。
データ要件を設定したら、このデータを取得する方法を考える必要があります。この分析のためのデータを取得するには、サンプリングされたストリームエンドポイントから提供される公開ツイートから1%を抽出したランダムサンプルを使用します。これは、公開ツイートの合計量に比例した少量のデータセットを提供するため、このニーズを満たすことができます。さらに、このデータは発生時にリアルタイムで送信されるため、最新のデータという要件を満たします。
手順3: 適切なエンドポイントに接続して認証する
興味関心のあるトピックに関する情報を常に入手する
データを定義し、ルールを使用してフィルタリング条件を設定したら、フィルタリングされたストリームのストリーミングエンドポイントに接続してデータの取得を開始できます。以下の例では、cURLを使って追加する方法を示しています。認証するには、$BEARER_TOKEN
を開発者ポータルのアプリのベアラートークンに置き換えます。
curl -X GET -H "Authorization: Bearer $BEARER_TOKEN" "https://api.x.com/2/tweets/search/stream"
curl -X GET -H "Authorization: Bearer $BEARER_TOKEN" "https://api.x.com/2/tweets/sample/stream"
サンプリングされたストリームエンドポイントへの接続は、以下のいずれかのコードサンプルも使用可能です
手順4:エラーと切断に対処する
フィルタリングされたストリームエンドポイントまたはサンプリングされたストリームエンドポイントのいずれかに接続している間は、常に自発的または非自発的な切断が発生する可能性があります。自発的な切断は、接続がコードによって能動的に閉じられたか、ネットワーク設定によって終了したかに関わらず、ストリーミングエンドポイントへの接続が個別に終了した場合に発生します。非自発的な切断は、いずれかのストリーミングエンドポイントでストリームが能動的にアプリを切断した場合に発生します。このような切断は、次のいずれかの理由で発生します。
フルバッファー: アプリによるデータの読み取り速度が十分でないか、ネットワークのボトルネックによってデータフローが遅くなっている。
接続過多: データストリームに対してアプリが大量の同時接続を確立した。この場合、フィルタリングされたストリームエンドポイントは待機し、1分後にまだ制限を超えている場合は、最後に確立された接続を切断します。
サーバーメンテナンス: Twitterチームがシステムサーバーに変更または更新を行った。
このような非自発的な切断が発生した場合には、自動的に再接続するように、コードに適切なロジックを組み込む必要があります。さらに、限られた時間だけツイートが必要な場合は、必要な期間が経過した後にストリーミングエンドポイントから切断するように、コードに適切なタイミングを組み込むことを検討します。
大量のツイートを受信することによるフルバッファーエラーを回避するには、ストリームを読み込んでいる間はコードで実際の処理を行わないようにする必要があります。ストリームを読み込んだ後、別のスレッドやプロセスにアクティビティを渡して、非同期に処理を行います。この処理には、頻度分析などの負荷の高い処理の実行が含まれます。
アプリケーションに再接続ロジックを組み込む方法の例については、フィルタリングされたストリームエンドポイントを使用する以下のサンプルアプリを参照してください。
手順5: ツイートとその基本的なメトリックを表示する
データを確実に取得したら、次にそれらを使って何をしたいかを考える必要があります。一般的なオプションとしては、時間の経過に合わせて起こっていることを説明する基本的なメトリックとともに、ウェブページや管理画面にデータの一部を表示することが挙げられます。
IDとテキストはツイートの基本的な構成要素であるため常に入力されますが、他のフィールドは常に存在するとは限らないので注意してください。たとえば、すべてのツイートに画像の添付ファイルが含まれるわけではありません。探しているデータがどのフィールドにあり、どのフィールドを表示したいのか、また、ツイートの性質により常に存在するとは限らないのはどのフィールドかを考慮する必要があります。最後に、ツイートを表示する際には、Twitterの表示要件を参照し、準拠する必要があります。埋め込みツイートを使用すると、これらの要件を満たすことができます。
読み込まれたツイート数をリアルタイムで経時的に集計し、これをグラフに表示する場合、ツイートの量は特定の時間にツイートしている人の数の増減に応じて変動することに注意してください。このような経時的な変動を示すように可視化する必要があるかもしれません。さらに、これらのツイートを取り込んで表示する際には、一度に受信できるツイートの量や限られた画面のスペースを考慮して、一時的にデータストアに保存して最新のものを表示したり、ページごとに整理したりするのも良いでしょう。また、リツイート、返信、いいねの数が多いものなど、オーガニックなパフォーマンスメトリックに基づいてツイートを表示することもできます。
最後に、ツイートは、ユーザーがツイートをリツイートしたり、ツイートに返信したりすることで、お互いに結び付くことがあることを考慮してください。目的に役立つ場合は、この関係性を示すような形でツイートを表示することもできます。
次の手順
フィルタリングされたストリームのクイックスタートガイドを使用して構築を開始する
フィルタリングされたストリームのAPIリファレンスを確認して、何が利用可能かを調べる
サンプリングされたストリームエンドポイントの詳細を確認する
サンプリングされたストリームのAPIリファレンスを確認して、何が利用可能かを調べる
サンプリングされたストリームのクイックスタートガイドを使用して構築を開始する
- 他のチュートリアルを読む