Twitter4JでUser StreamによるTwitterタイムラインのリアルタイム更新に挑戦


Twitterクライアントの動作検証をする目的で、TwitterのUser Stream APIを使ったTwitterタイムラインのリアルタイム更新に挑戦してみました。とはいえAPIをナマで叩くのはちょっとハードルが高すぎたので、Twitter APIのJavaラッパーである「Twitter4J」を利用します。

作ったアプリはこんな感じ。Twitter4JはJavaのライブラリなので、アプリもSwingを使ったJavaアプリです。Swingなんて触ったの何年ぶりだろうw。動作検証なのでGUIは超手抜きw。モザイクをかけているところが受信したTwitterタイムラインですが、これじゃなんのことかさっぱりわかりませんねww。

TwitterUserStream

これだけだと何なので、最低限のサンプルコードなど置いておきますね。

<br />
// User Stream APIを開始する<br />
private void startUserStream()<br />
{<br />
	// Configureationを生成するためのビルダーオブジェクトを生成<br />
	ConfigurationBuilder builder = new ConfigurationBuilder();</p>
<p>	// コンシューマーキーとアクセスキーを設定<br />
	builder.setOAuthConsumerKey( CONSUMER_KEY );<br />
	builder.setOAuthConsumerSecret( CONSUMER_SECRET );<br />
	builder.setOAuthAccessToken( ACCESS_TOKEN );<br />
	builder.setOAuthAccessTokenSecret( ACCESS_TOKEN_SECRET );</p>
<p>	// 現行のTwitter4JではAPIのデフォルト呼び先がbetastream.twitter.comになっているので修正<br />
	builder.setUserStreamBaseURL( "https://userstream.twitter.com/2/" );</p>
<p>	// Configurationを生成<br />
	Configuration conf = builder.build();</p>
<p>	// TwitterStreamを生成<br />
	TwitterStreamFactory factory = new TwitterStreamFactory(conf);<br />
	twitterStream = factory.getInstance();</p>
<p>	// イベントを受け取るリスナーオブジェクトを設定<br />
	twitterStream .setUserStreamListener( new MyStreamAdapter());</p>
<p>	// User Streamの取得をスタート<br />
	twitterStream.user();<br />
}</p>
<p>// イベントを受け取るリスナーオブジェクト<br />
class MyStreamAdapter extends UserStreamAdapter<br />
{</p>
<p>	// ステータス更新のハンドラ<br />
	@Override<br />
	public void onStatus(Status status) {<br />
	super .onStatus(status);</p>
<p>	// ステータスを受け取って何かをする<br />
	System.out.println(status.getText());<br />
}<br />

処理の流れはコメントを見ていただければ大筋分かるのではないでしょうか。注意する点は、現行バージョンのTwitter4JではUser Stream APIの呼び先がbetastream.twitter.comになっているので、Configurationオブジェクトで設定を上書きすることくらいでしょうか。まあそのうちアップデートで修正されるとは思いますが。

これでstartUserStreamメソッドを実行すると、User Stream APIによりタイムラインの更新がズラズラと表示されます。結構感動しましたw。せっかくなのでこのサンプルコードが何かの参考になれば幸いです。