Twitter4JでフォロワーのIDを取得する(最大175万人)
以前書いた記事を見に来た人のGoogleの検索ワードを見ていたら、5000人以上取得したいニーズが高そうなので書いてみる。
これで理論上175万人(5000人×API制限の350リクエスト毎時)まで取得出来ることになります。
twitter4j-coreのバージョン
- 2.2.3-SNAPSHOT
package manipulate; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import twitter4j.IDs; import twitter4j.Twitter; import twitter4j.TwitterException; import common.Authentificate; import common.T4jCommon; /** * @author eiryu * */ public class Samp { private static int ID_COUNT_PER_REQUEST = 5000; private static Twitter tw = new Authentificate().getAuthObject(); /** * @param args * @throws TwitterException */ public static void main(String[] args) throws TwitterException { getFollowers(); T4jCommon.showRestAPIRequestCount(tw); } /** * フォロワーを取得する。 * * @throws TwitterException */ private static void getFollowers() throws TwitterException { // 取得対象のユーザ名 String targetScreenName = "takapon_jp"; // カーソル初期値。現状のt4jのjavadocは 1オリジンだが、Twitter API Documentでは -1オリジンなのでそちらに準拠 long cursor = -1L; // 一時的にIDを格納するオブジェクト IDs ids; // IDを全てストックするオブジェクト List<Long> followerIDs = new ArrayList<Long>(); long page = 1L; do { // フォロワーが多いユーザだと無反応で寂しい&不安なので状況表示 System.out.println(String.format("%dページ目取得中。。(%d <= %d)", page, ID_COUNT_PER_REQUEST * (page - 1), ID_COUNT_PER_REQUEST * page++)); ids = tw.getFollowersIDs(targetScreenName, cursor); // 取得したIDをストックする for (long id : ids.getIDs()) { followerIDs.add(id); } // 次のページへのカーソル取得。ない場合は0のようだが、念のためループ条件はhasNextで見る cursor = ids.getNextCursor(); } while (ids.hasNext()); // ファイル出力 output(String.format("C:\\%s.txt", targetScreenName), followerIDs); } /** * ファイルへIDを出力 * * @param fileName * @param ids */ private static void output(String fileName, List<Long> ids) { BufferedWriter wr = null; try { wr = new BufferedWriter(new FileWriter(fileName, false)); for (long eachId : ids) { wr.write(String.valueOf(eachId)); wr.newLine(); } wr.flush(); wr.close(); } catch (IOException e) { e.printStackTrace(); System.exit(-1); } } }
(English description)
Get specific user's follower ids. (5000ids/page, max 1.75 million ids.)