2010年6月末でTwitterのBASIC認証が使えなくなるので、今後は OAuth に乗り換える必要がある。
動作確認環境
* Windows XP SP3
* JDK 1.6
* Twitter4J version 2.1.1
手順1
http://twitter.com/oauth_clients/new にて、
Twitterアプリケーションを登録し、
Consumer key と Consumer secret をメモしておく。
手順2
以下の TwitterOAuthAccessTokenGetter クラスを利用して、
認可キー(TokenとTokenSecret)を取得する。
import java.io.*;
import twitter4j.*;
import twitter4j.http.*;
public class TwitterOAuthAccessTokenGetter {
public static void main(String[] args) throws Exception {
// http://twitter.com/oauth_clients/new にてアプリケーションを登録した際の
// Consumer key と Consumer secret を使用
String consumerKey = ""; // Consumer key をセット
String consumerSecret = ""; // Consumer secret をセット
// 認証用URLを取得
TwitterFactory factory = new TwitterFactory();
Twitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken();
String authorizationURL = requestToken.getAuthorizationURL();
System.out.println(authorizationURL + " にウェブブラウザでアクセスして認証を許可してください。");
System.out.println("認証を許可したらウェブブラウザにPINコードが表示されます。");
System.out.println("PINコードを入力して[Enter]キーを押してください。");
// 入力待ち
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String pin = r.readLine();
// AccessTokenオブジェクトを生成
AccessToken accessToken;
if(pin.length() > 0){
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
}else{
accessToken = twitter.getOAuthAccessToken();
}
// 認証情報を表示
int userId = twitter.verifyCredentials().getId();
String token = accessToken.getToken();
String tokenSecret = accessToken.getTokenSecret();
System.out.println("UserId=" + userId);
System.out.println("Token=" + token);
System.out.println("TokenSecret=" + tokenSecret);
}
}
手順3
Consumer key, Consumer secret, 認可キー(TokenとTokenSecret) を使用して、
Twitter オブジェクトを生成する。
以下の TwitterOAuthSampleWithAccessToken はそのサンプルコード。
import twitter4j.*;
import twitter4j.http.*;
public class TwitterOAuthSampleWithAccessToken {
public static void main(String[] args) throws Exception {
// http://twitter.com/oauth_clients/new にてアプリケーションを登録した際の
// Consumer key と Consumer secret を使用
String consumerKey = ""; // Consumer key をセット
String consumerSecret = ""; // Consumer secret をセット
// TwitterOAuthAccessTokenGetter で取得した Token と TokenSecret を使用
String token = ""; // Token をセット
String tokenSecret = ""; // TokenSecret をセット
// Twitterオブジェクトを生成
TwitterFactory factory = new TwitterFactory();
AccessToken accessToken = new AccessToken(token, tokenSecret);
Twitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret, accessToken);
// ツイートを出力するサンプル
ResponseList<Status> statusList = twitter.getUserTimeline();
for(int i=0; i<statusList.size(); i++){
Status s = statusList.get(i);
String text = s.getText();
System.out.println(text);
}
}
}
参考
OAuth 認可方式を使うとユーザーにユーザID、パスワードを提供してもらうことなくユーザのアカウントにアクセスできます。OAuth を利用するには http://twitter.com/oauth_clients/new で事前にアプリケーションを登録しておき consumer key, consumer secret を取得しておく必要があります。key と secret は Twitter#setOAuthConsumer() でセットするか、システムプロパティで VM パラメータとして以下のように指定しておきます。
-Dtwitter4j.oauth.consumerKey=[consumer key]
-Dtwitter4j.oauth.consumerSecret=[consumer secret]
Twitter4J - コード例 - 7.OAuth認可
ほぼOAuthUpdate.javaでやっていることそのままです。注意が必要なのは、4)~5)で認証ページへリダイレクトして戻ってくるまでの間、何らかの方法でRequestTokenオブジェクトを保持しておく必要があることです。RequestTokenはいわば使い捨てで、認証ページから戻ってきた後にもう一度getRequestTokenメソッドで生成してもAccessTokenは取得出来ません(冷静に考えれば当たり前ですね)。私は4)で認証ページに飛ぶ前に、WicketのSessionの仕組みを使ってRequestTokenを保存するようにしました。
Twitter4jでOAuthを試してみた – 今日の気分はバリいくつ?
tags: zlashdot Java Java OAuth Twitter Twitter4J
Posted by NI-Lab. (@nilab)