TwitterのストリーミングAPIを試してみる(java編)

Twitterが公開しているAPIには、大きく分けて二つあります。

  • REST API:いわゆるAPI。条件を与えてリクエストを投げると、該当のタイムラインやツイートが取得できる。
  • STREAM API:接続している間、投稿されたツイートがじゃんじゃん流し込まれる。詳しくはコチラ

と言ってもTwitterの全投稿が取得できるわけではなくて、取得できるのは全体の1%のツイート、または条件で絞ったツイートのみです。今回は条件を指定して投稿をつらつら眺める、ということをやってみます。Twitter4jを利用します。

サンプルコードはこちら。NHKの番組改編でニュースウォッチ9のキャスターが変わったらしいので、その反応をリアルタイムで見てみました。APIKey等は取得しておいてください。

実行結果です。投稿者名等は伏せてあります。

[Mon Apr 03 21:34:57 JST 2017]Establishing connection.
[Mon Apr 03 21:35:03 JST 2017]Connection established.
[Mon Apr 03 21:35:03 JST 2017]Receiving status stream.
id = ******************, screenName = **********, text = 入社当時の長野時代の桑子アナ、『ブラタモリ』で長野のおばちゃんが言ってた通り「芋ネーちゃん」だ!本当に綺麗になったな。入社当時の有馬さん、『ハンターXハンター』のゲン
スルーみたいだ! #ニュースウォッチ9
id = ******************, screenName = **********, text = 早い時間からお二人が見られてうれしい(^o^)…けど、『これ終わったら寝ないと…』って思っちゃうかも  #ニュースウォッチ9
id = ******************, screenName = **********, text = 中原区のお弁当屋さん!
どこだ? #ニュースウォッチ9 #NHK
id = ******************, screenName = **********, text = 恥ずかしい映像www 桑子真帆 #桑子真帆 #ニュースウォッチ9 #nw9 #NHK https://t.co/DUncSe13Ws
id = ******************, screenName = **********, text = 有馬さんの顔好きだな、おしゃべりが好きそうな口元🙄前回のロマンスグレーの河野さんはイケメン過ぎて苦手だった、あと返しがテキトーでつまんなかった🙄

#ニュースウォッチ9

無事に取得できているようです。

コードの内容的に難しいことは何もやっていませんが、ちょっと躓いたところを解説したいと思います。

StatusListenerの必須メソッドが多い

基本的なイベントは全てonStatusで処理するのですが、それ以外に必須メソッドがいくつもあります。Stream通信を行っているため、接続状態にかかわるものがあるのはわかりましたが、ツイートや位置情報が削除された際にイベントが発生する、というのは最初良くわかりませんでした。「ユーザーが削除したツイートや位置情報は、DBとかファイルとかに保存されてるやつも含めてちゃんと削除せぇよ」ということですね。

TwitterのWEB画面と表示結果が違う

WEB上のTwitterも同時に開いて結果が正しいか眺めてたんですが、微妙に結果が違うんですね。どうやらWEBの方は勝手に記載の揺らぎを考慮しているらしく、「#ニュースウォッチ9」だけではなく「#ニュースウォッチ9」(9が全角)も検索対象に含めているようです。逆に、APIの方はtrackに指定した文字列のみを素直に使用するため、ちょっと考慮が必要かもしれません。

TwitterのWEB画面よりも応答が早い

ストリームAPIで受信してから数秒経ってからWEB上に反映されているような感じです。ちょっと調べた限りでは、WEBではリアルタイムで取得しているわけではなく、10秒に1回問い合わせを投げているようですね。利用人数が膨大なので、全部にコネクションを貼ると大変なことになるのでしょうか。

インターネットの監視業務みたいで楽しい

投稿したツイートがほぼリアルタイムでログ上に流されるため、フィクション等で出てくるネットワークを監視している人ごっこができます。あいにく1つのKEYで1つのコネクションしか張れないようですが、複数ウィンドウを立ち上げることができればまさに「インターネットを監視する人」です。楽しいのでぜひ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です