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}]}
が返却されてきてしまいますので要注意!