Twitter4J を使用して 三国志大戦4 に関係のある ハッシュタグ のツイートを取得する

kameyatakefumi.hatenablog.com

前回の続きではないが入力情報として使用する #三国志大戦登用 のツイートをプログラムで取得したい。
ゴールは #三国志大戦登用 のツイートから 解任済み武将カード の 画像URL を取得するまで。

twitter.com

JavaTwitter と言えば Twitter4J なので、こちらを使用する。

Twitter4J - A Java library for the Twitter API

プログラムから Twitter を操作するには Key と Token が必要になるみたい。
Twitter Application Management にアクセスして発行する。

Twitter Application Management

以下、公式のサンプルとJavaDocを眺めつつ参考になるサイトを見て作成。

public class HashTag {

    public static void main(String[] args) {

        Twitter twitter = new TwitterFactory().getInstance();

        try {

            Query query = new Query("#三国志大戦登用 -rt -bot");
            query.setSince("2017-10-23");

            QueryResult result;
            do {

                result = twitter.search(query);
                List<Status> tweets = result.getTweets();

                for (Status tweet : tweets) {
                    for (MediaEntity entity : tweet.getMediaEntities()) {
                        System.out.println(entity.getMediaURL());
                    }
                    System.out.println("----------------------------------------------");
                }

            } while ((query = result.nextQuery()) != null);
            System.exit(0);

        } catch (TwitterException te) {
            te.printStackTrace();
            System.out.println("Failed to search tweets: " + te.getMessage());
            System.exit(-1);
        }
    }

}

重要なのは検索ワードに -rt -bot を含める事。
最低でも -rt は必須。
これを付けないと取得結果にリツイートが含まれる事になり重複した値を何件も取得する事になる。

以下、取得結果です。

...
http://pbs.twimg.com/media/DMzoUU0U8AArVPc.jpg
----------------------------------------------
http://pbs.twimg.com/media/DIHiVpqUMAAi7wh.jpg
----------------------------------------------
http://pbs.twimg.com/media/DMzZzOsVAAALLG6.jpg
----------------------------------------------
----------------------------------------------
http://pbs.twimg.com/media/DMzL2TcVAAAgRt9.jpg
----------------------------------------------
...

ちゃんと画像のみが取得できてます。
Twitter4J まじ便利。