twitterStreaming API + OAuth with Twitter4J 2.2.5-SNAPSHOT

OAuth 認証にて Twitter Streaming API を利用するプログラム例。

import java.io.*;

import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.TwitterException;
import twitter4j.StatusListener;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.auth.AccessToken;
import twitter4j.json.DataObjectFactory;

public class TwitterStreamingOAuth {
    static TwitterStream authentication(){
       //コンシューマ・キーとコンシューマ・シークレット
        final String m_ConsumerKey = "consumer key";
        final String m_ConsumerSecret = "consumer secret";

        //アクセストークンの読み込み
        AccessToken accessToken = loadAccessToken();
	if(accessToken == null){ return null; }

        TwitterStream twitterStream = null;
	try {
	    //raw JSONを取得するため、setJSONStoreEnabled(true) を設定
	    Configuration conf = new ConfigurationBuilder().setJSONStoreEnabled(true).build();

	    //TwitterStream オブジェクトの生成
	    twitterStream = new TwitterStreamFactory(conf).getInstance();

	    //自分のディレクトリに保存していた Access Token を利用する.
	    twitterStream.setOAuthConsumer(m_ConsumerKey, m_ConsumerSecret);
	    twitterStream.setOAuthAccessToken(accessToken);
	} catch(Exception e){
	    e.printStackTrace();
        }

	return twitter;
    }

    //アクセストークンの読み込み
    private static AccessToken loadAccessToken(){
        File f = createAccessTokenFileName();

        ObjectInputStream is = null;
        try {
            is = new ObjectInputStream(new FileInputStream(f));
            AccessToken accessToken = (AccessToken) is.readObject();
            return accessToken;
        } catch (IOException e) {
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

   // アクセストークンを保存するファイル名を生成する
    static File createAccessTokenFileName() {
        // (メモ) System.getProperty("user.home") の返し値は
        // ホームディレクトリの絶対パス
        String s = System.getProperty("user.home") + "/.twitter/client/sample/accessToken.dat";
        return new File(s);
    }
    
    public static void main(String[] args) {

	//Streaming API のためのリスナ
	StatusListener listener = new StatusListener(){
		public void onStatus(Status status) {
		    //一般には Text がとれれば十分でしょ   。
		    //System.out.println(status.getUser().getName() + " : " + status.getText());
		    //Status を raw JSON へ変換
		    String json = DataObjectFactory.getRawJSON(status);
		    System.out.println(json);
		}
		public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}
		public void onScrubGeo(long userId, long upToStatusId){}
		public void onTrackLimitationNotice(int numberOfLimitedStatuses) {}
		public void onException(Exception e) { e.printStackTrace(); }
	    };

	//認証 & TwitterStream の取得
	TwitterStream twitterStream = authentication();

	//リスナ登録
	twitterStream.addListener(listener);

	//Streaming API のリスニング開始
	//取得したステータスの処理は listener#onStatus() で行う。
	twitterStream.sample();
    }
}

(2011.10.03追記)System.out.println() の出力をリダイレクトしたら,日本語を含む多バイト文字が読めなかった.文字が化ける原因は,上記のプログラムを shell script 中で呼び出している点およびその中で export LANG=ja_JP.UTF-8 が記述されていないという複合的な要因だった。日本語の混じる処理って面倒だ。