読者です 読者をやめる 読者になる 読者になる

【Twitter4J】特定のキーワードを呟いた人をフォローする的なやつ【Bot】

Java

※ 追記

こんな記事を書いておいてアレですが、どうやら Twitter では自動フォローは規約で禁止されているみたいです。
ここに書いてあるようなことを実行してバレると、アカウントを凍結されます。注意。

support.twitter.com

=========================

Twitter 上で行えることを自動化してみようと思ったときのメモ。
例として、標題の機能だけここに書いていきます。

TwitterAPI をそのまま使用するのはなにかと面倒なので、今回は Java でその辺をチョロチョロっと書けるようにしてくれる Twitter4J というライブラリを使います。

Twitter アカウントの用意

当然動作させるアカウントが必要です。 作ります。

アプリケーション登録

以下の記事に分かりやすく書いてあるので引用。

Twitter APIの使い方まとめ

一通り読み進めれば下の値が得られているはずなので、メモしておきます。(アプリケーション管理ページの [Keys and Access Tokens] というページに記載)

これらは TwitterAPI を活用する上で必要な OAuth という認証方式で使用する値ですが、説明すると長くなるので割愛します。

OAuthプロトコルの中身をざっくり解説してみるよ - ( ꒪⌓꒪) ゆるよろ日記

OAuth 2.0 の仕組みと認証方法 | murashun.jp

Twitter4J 用意

Twitter4J - A Java library for the Twitter API ここから jar ファイル群をダウンロードできるので、適当に配置した後プログラムから使用できるようにパスを通しておきます。

コード書く

package twitter;

import twitter4j.*;
import twitter4j.auth.*;
import java.util.*;

public class Test {
    final static Twitter twitter = TwitterFactory.getSingleton();

    public static void main(String[] args) {
        // OAuth 認証
        twitter.setOAuthConsumer("ここにConsumer Key (API Key)", "ここにConsumer Secret (API Secret)");
        AccessToken token = new AccessToken("ここにAccess Token", "ここにAccess Token Secret");
        twitter.setOAuthAccessToken(token);

        List<Status> tweets = search("キーワードです");
        for (Status tweet : tweets) {
            try{
                twitter.createFriendship(tweet.getUser().getId()); // フォロー
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

    public static List<Status> search(String keyword) {
        Query query = new Query();
        query.setQuery(keyword);
        query.setCount(100); // 100 -> 1度のリクエストで取得するツイート数
        List<Status> tweets = new ArrayList<>();
        try {
            for (int i = 0 ; i < 15 ; i++) { // 15 -> 検索するページ数 , この場合だと100件×15ページで最大1500件取得
                QueryResult result = twitter.search(query);
                tweets.addAll(result.getTweets());
                if (result.hasNext()) {
                    query = result.nextQuery();
                } else {
                    break;
                }
            }
        } catch (TwitterException e) {
            e.printStackTrace();
        }

        return tweets;
    }
}

おわり

今回は特定のキーワードを呟いた人をフォローするだけでしたが、Twitter上で手動で出来ることならほぼTwitter4Jからでも可能かと思います。