LoginSignup
3
4

More than 5 years have passed since last update.

Twitter4J で Application-only authentication の bearer トークンを用いて Twitter API を呼び出す

Posted at

Ruby で Twitter API の Application-only authentication のトークンを取得する方法 の続きみたいなメモ書きです(言語が Ruby → Java に変わっていますが、単に Java で bearer トークンを取得するのが面倒くさかっただけで他意はありません)。

すでに bearer トークンを取得している前提で話を進めるとして、Java で Twitter API を呼び出すときの定番ライブラリ Twitter4J を利用して bearer トークンを使えるようにする&実際に呼び出す手順を示したコードが以下になります。

BearerAuthenticateByTwitter4JDemo.java
package demo.twitter4j;

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.Authorization;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.internal.http.HttpRequest;

/**
 * Twitter4J で Application-only authentication の取得済み bearer トークンを設定して Twitter API を呼び出す
 * 手順を示すデモアプリです。
 */
public class BearerAuthenticateByTwitter4JDemo {
    /** ここに取得済みの Application-only authentication のアクセストークン (bearer トークン) を設定する */
    private static final String bearer = "トークンをここに設定する";

    public static void main(String[] args) throws TwitterException {
        // bearer トークンを用いて通信をする場合は、SSL 通信が必須となる
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.setUseSSL(true);

        // Configuration および Authorization のオブジェクトを設定して Twitter オブジェクトを
        // 生成するようにする
        Twitter twitter =
                new TwitterFactory(builder.build())
                        .getInstance(new BearerAuthorization(bearer));

        // あとは、Application-only authentication で許可された API を好きなだけ叩くのみ
        System.out.println(twitter.getRateLimitStatus().toString());
    }

    /**
     * bearer トークンを利用して Twitter API を呼び出すための Authorization 実装クラスです。
     * <p>
     *     HTTT リクエスト時の "Authorization" ヘッダに設定される文字列を getAuthorizationHeader() メソッドで生成して返却します。
     * </p>
     */
    public static class BearerAuthorization implements Authorization {
        private String bearer;

        BearerAuthorization(String bearer) {
            this.bearer = bearer;
        }

        @Override
        public String getAuthorizationHeader(HttpRequest req) {
            return "Bearer " + bearer;
        }

        @Override
        public boolean isEnabled() {
            return bearer != null;
        }
    }
}

Twitter4J のライブラリの設計がイケてるおかげで、新たな認証方法を追加するのもとっても楽ちんですね!

ポイントは以下の3点です。

  • SSL 通信 (HTTPS) を有効にする。
  • bearer トークン設定用に twitter4j.auth.Authorization インタフェースの実装クラスを用意する。
  • Twitter オブジェクトの生成は、Configuration オブジェクトおよび Authorization オブジェクトを指定して生成するようにする。

特に1点目、これを忘れると HTTP ステータスコード 400 で

{"errors":[{"message":"Bad Authentication data","code":215}]}

が返却されてきてしまいますので要注意!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4