Twitter4Jで凍結されていないフレンドのユーザIDだけ取得する
しばらくはまっていたのでメモ.
Twitter4Jでフレンド(フォローしている人)のユーザIDをすべて取得するとき,Twitter#getFriendsIDs(longcursor)メソッドを使って
Twitter twitter = new TwitterFactory().getInstance(); List<Long> friendIds = new ArrayList<Long>(); long cursor = -1L; do { IDs ids = twitter.getFriendsIDs(cursor); for (long id : ids.getIDs()) { friendIds.add(id); } cursor = ids.getNextCursor(); } while (cursor > 0);
とすると,凍結されているユーザ(suspended user)もfriendIdsに入ってしまうときがあるようです.これはTwitterの仕様なんですかね.
凍結されているユーザのステータスを取得しようとしたりすると403エラーが返ってきてしまいます.これではちょっと困る場面がありました.
凍結されていないフレンドのユーザIDだけ取得するには,Twitter#getFriendsStatuses(long cursor)メソッドを使うといいみたいです.このメソッドを使うと凍結ユーザが除かれたフレンドのリストを取得できます.ただし,このメソッドは最大100人ずつしか取得できないので,上の方法よりもAPI使用回数が多くなってしまいます.ちなみにTwitter#getFriendsIDs(long cursor)メソッドは最大5000人ずつ取得できます.
Twitter twitter = new TwitterFactory().getInstance(); List<Long> validFriendIds = new ArrayList<Long>(); long cursor = - 1L; do { PagableResponseList<User> response = twitter.getFriendsStatuses(cursor); for (User user : response) { validFriendIds.add(user.getId()); } cursor = response.getNextCursor(); } while (cursor > 0);
こうすれば,validFriendIdsに凍結されていないすべてのフレンドのユーザIDが入ります.ユーザID以外の情報を捨てているのがもったいないですね・・・.何か他の方法があるんでしょうか.