2010年12月24日金曜日

TwitterStreamingAPIを使って日本語だけを取り出す

以前書いたTwitterStreamingAPIを使う話は,Twitter4jを使っていなかったので,今度はTwitter4jを使ったバージョンを書いてみる.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;


public class StreamReader implements StatusListener{

   /**
    * @param args
    */
   public static void main(String[] args) {
      StreamReader streamReader = new StreamReader(User, Password);
      streamReader.start();

   }
   
   
   /**
    * ユーザ名
    */
   String userName;

   /**
    * パスワード
    */
   String password;

   /**
    * stream
    */
   private TwitterStream streamTwitter;
   
   
   
   
   public StreamReader(String userName, String password) {
      super();
      this.userName = userName;
      this.password = password;
   }

   public void start() {
      TwitterStreamFactory factory = new TwitterStreamFactory();
      streamTwitter = factory.getInstance(userName, password);
      streamTwitter.addListener(this);
      streamTwitter.sample();
   }

   @Override
   public void onStatus(Status status) {
      if(isJapanese(status.getText())){
         System.out.printf("%d\t%s\t%s\n", status.getId(), status.getUser().getScreenName(), status.getText());
         //得られたStatusに対する処理をする
      }
      
   }

   /**
    * 日本語かどうかを返す
    * @param text
    * @return 日本語ならtrue
    */
   boolean isJapanese(String text){
      Matcher m = Pattern.compile("([\\p{InHiragana}\\p{InKatakana}])").matcher(text);
      return m.find();
   }
   

   @Override
   public void onDeletionNotice(StatusDeletionNotice arg0) {
      
   }



   @Override
   public void onException(Exception arg0) {
      
   }

   @Override
   public void onTrackLimitationNotice(int arg0) {
      
   }

}
多分,これで動くはず.
おまけで日本語だけを取得するようにしておいた.

0 件のコメント: