Twitterのタイムラインを取るソースを書いてみた

前回同様Twitter4Jを使って書いてみた
所要時間は約20分

package nanoha;

import java.util.HashMap;

public class Receive {
  
  private static HashMap<Integer, String> nameMap = new HashMap<Integer, String>();
  private static final String ID = "****";
  private static final String PASSWORD = "*****";

  public static void main(String[] args) {
    
    try{
      Twitter twitter = new Twitter(ID,PASSWORD);
      List<Status> timeLine = twitter.getFriendsTimeline();
      
      System.out.println("タイムラインとるよ");
      for (Status element : timeLine) {
        StringBuilder stb = new StringBuilder();
        
        stb.append(element.getUser().getScreenName());
        stb.append(":");
        stb.append(element.getText());
        
        if(element.getInReplyToStatusId() != -1){
          stb.append("  返信:");
          stb.append(getName(element.getInReplyToUserId(),twitter));
        }
        
        System.out.println(stb.toString());
        
      }
      
      System.out.println("タイムラインとってきたよ");
    }catch(Exception e){
      System.out.println(e.getMessage());
    }

  }
  
  /**
   * ユーザー名を返却する
   * @param id
   * @param twitter
   * @return name
   * @throws Exception
   */
  private static String getName(int id,Twitter twitter) throws Exception{
    String name = "";
    try{
      if(nameMap.get(id) == null){
        name = twitter.getUserDetail(String.valueOf(id)).getName();
        nameMap.put(id, name);
      }else{
        name =  nameMap.get(id);
      }
    }catch(Exception e){
      throw e;
    }
    return name;
  }

}

twitter.getTimeLine()でタイムラインを取得。
このとき返ってくるのはList
この中にメッセージやら、ユーザーIDやらが入っている。
getterつかってアクセスするだけなので簡単に取得できる。

簡単に書くと
本文:getText()
ユーザー情報:getUser() @return Userなのでこの中から名前とかを取得する
Ex)名前 getUser().getScreenName()
こんなかんじ。

返信かどうかを判定してるのがgetInReplyToStatusId()。
これが-1でなければ返信のようなので返信:の文字列を作ってる。

後の処理はほとんど文字列結合してるだけ。

List<Status> timeLine = twitter.getFriendsTimeline();

List<Status> timeLine = twitter.getReplies()

に書き換えるとあなたへの返信ページの内容が取得できる。

書き換えて動かしてみると、途中で400帰ってきた。
特にへんなrequestを投げているともおもえないんで単純に処理時間がかかり
すぎたのかなと勝手に解釈。

で追加したのがgetName(int id,Twitter twitter)
単純に取得したidと名前を紐付けてMapに格納してキャッシュする。なかった
ら取得しにいくというかんじ。

今回はこんなかんじでーす。