Twitter4JでJavaからツイッターの自動リフォロープログラムを作成

以前Twitter4Jの記事を書き、自動ツイートBOTを作成する為のコードを記述しましたが、今回は自動リフォローをしてみます。

※追記 下の上書きフォローするコードではツイッター側で【フォローリミット(他ユーザーをフォローできません)】エラーが発生してしまいましたので、やはりgetFriendsIDsを使用して、こちらからフォローしていないユーザーのみリフォローするコードに書き直します。
↓フォローリミットエラー詳細↓

Relevant discussions can be found on the Internet at:
        http://www.google.co.jp/search?q=84082483 or

http://www.google.co.jp/search?q=1c1f33dc

TwitterException{exceptionCode=[84082483-1c1f33dc], statusCode=403, message=You are unable to follow more people at this time. Learn more <a href='http://support.twitter.com/articles/66885-i-can-t-follow-people-follow-limits'>here</a>, code=161, retryAfter=-1, rateLimitStatus=null, version=3.0.3}
        at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
        at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
        at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:98)
        at twitter4j.TwitterImpl.post(TwitterImpl.java:1853)
        at twitter4j.TwitterImpl.createFriendship(TwitterImpl.java:451)
        at UpdateMain.main(Unknown Source)
403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - You are unable to follow more people at this time. Learn more <a href='http://support.twitter.com/articles/66885-i-can-t-follow-people-follow-limits'>here</a>
code - 161

↓フォローリミットが発生するコード↓

// フォロワー取得位置を指定するカーソルを-1で初期化
long cursor = -1L;
// カーソル位置で取得できるフォロワーのリストが尽きるまでループ
while(true) {
  // カーソル位置のフォロワーのリストオブジェクトを取得
  IDs followers = twitter.getFollowersIDs(cursor);
  // フォロワーのリストオブジェクトからフォロワーのユーザーID配列を取得
  long[] ids = followers.getIDs();
  // フォロワーのリストが存在しない場合はループを抜ける
  if(0 == ids.length) break;
  // ユーザーID配列のループ
  for(int i = 0;i < ids.length; i++) {
    // カレントのユーザーIDのユーザーをフォローする
    twitter.createFriendship(ids[i]);
  }
  // 次ページのカーソルを取得
  cursor = followers.getNextCursor();
}

以上が、自分をフォローしているアカウント全てをフォローするコードになります。
getFriendsIDsも使用して、相互フォローしているアカウントにはフォローリクエストを送信しないようにする事も考えましたが、フォロワーの件数が増えてくると重くなるだけですので止めて、毎回createFriendshipにて全フォロワーに対するフォローリクエストを上書きで送信しています。

※追記 以下が修正版です。

// 自動リフォロー
List<Long> followersList = new ArrayList<Long>();
List<Long> friendsList = new ArrayList<Long>();

// フォロワーリスト取得
long cursor = -1L;
while(true) {
  IDs followers = twitter.getFollowersIDs(cursor);
  long[] ids = followers.getIDs();
  if(0 == ids.length) break;
  for(int i = 0;i < ids.length; i++) {
    followersList.add(ids[i]);
    log.info(ids[i]);
  }
  cursor = followers.getNextCursor();
}

// フレンドリスト取得
cursor = -1L;
while(true) {
  IDs friends = twitter.getFriendsIDs(cursor);
  long[] ids = friends.getIDs();
  if(0 == ids.length) break;
  for(int i = 0;i < ids.length; i++) {
    friendsList.add(ids[i]);
    log.info(ids[i]);
  }
  cursor = friends.getNextCursor();
}

// フォロワーリストをループし、1件ごとにフレンド登録されているか確認し、されていなければフレンド登録する。
for(Long userId: followersList) {
  if(!friendsList.contains(userId)) {
    twitter.createFriendship(userId);
  }
}

以上です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>