####まえがき
Twitter4Jを使ってTwitterクライアントを作ろうと思ったのですが、OAuth認証についての知識が皆無だったので少しお勉強してみました
####TwitterのOAuth認証
Twitterにはいくつかの認証がありますが、App-Only Authenticationでは、ツイートが呟けなかったり、DMの機能が制限されたりするらしいので今回は通常のOAuthで挑戦します。
######アプリケーションの登録
https://apps.twitter.com/
Twitterのデベロッパーサイトからアプリケーションを登録してAPIキーを取得しておく。
######OAuth認証
Twitterでは、OAuth認証にアクセストークンと呼ばれる鍵を使って処理をします。
なので、このアクセストークンを取得する必要があります。
アクセストークンを取得するのに必要なものが、リクエストトークン。
リクエストトークンを取得するのに必要なものが先に取得したAPIキーです。
APIキーを使ってリクエストトークン取得 → URLで認証画面へ飛び認証(PIN入力あり) → アクセストークン取得
という手順です
######サンプル
public class OAuth {
//フィールド
OAuthAuthorization OAuth;
RequestToken reqToken;
//コンストラクタ
OAuth(Configuration conf) throws TwitterException{
OAuth = new OAuthAuthorization(conf);
OAuth.setOAuthConsumer(conf.getOAuthConsumerKey(), conf.getOAuthConsumerSecret());
//APIキー登録
reqToken = OAuth.getOAuthRequestToken();
}
public void Auth() throws IOException{//URL取得、ブラウザ起動
String url = reqToken.getAuthenticationURL(); //URL取得
Desktop desktop = Desktop.getDesktop();
try {
URI uri = new URI(url);
desktop.browse(uri);
} catch (URISyntaxException ex) {
Logger.getLogger(OAuth.class.getName()).log(Level.SEVERE, null, ex);
}
}
public AccessToken getToken(String pin){//PINによるToken取得
AccessToken accessToken = null;
while(accessToken == null){
try{
if(pin.length() > 0){
accessToken = OAuth.getOAuthAccessToken(reqToken, pin);
}else{
accessToken = OAuth.getOAuthAccessToken();
}
}catch(TwitterException http){
if(http.getStatusCode() == 401){
System.out.println("PINが正しくありません");
break;
}
}
}
return accessToken;
}
}
####まとめ
認証だけならできました
後は、XMLファイルにアクセストークン登録させて複数アカウントにも対応できるようにできるかなって感じです