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に格納してキャッシュする。なかった
ら取得しにいくというかんじ。
今回はこんなかんじでーす。