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

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

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

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

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