Twitter OAuth 対応(Twitter4J編)

Python編は未定!w書きました。(2010/07/01)
@blaue_bot をOAuth対応させるにあたって、色々調べたのですが、
ConsumerKey 取得→ PID 取得→ Token 取得 を一気でやってるサイトばかりで、
ConsumerKey の取得と、Token の取得を分けてる所が見つけられなかったのでメモがてらに書いておきます。

Consumer Key の取得

Consumer Key と Secret を New Twitter Application | dev.twitter.com で取得してください。
細かいところは色々なサイトで紹介されてるので割愛。

PID から Access Token, Access Token Secret の取得

例えば「GetToken」というクラスを作って、以下のように記述。
ほぼ例の OAuthUpdate.java のままです。
Java Application」で実行すると、Console に出力されます。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.http.HttpServlet;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.TwitterException;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;
import twitter4j.Status;

public class GetAccessToken extends HttpServlet {
  private static final long serialVersionUID = 1L;
  public static void main(String[] args) { 
    try {
      Twitter twitter = new TwitterFactory().getInstance();
      // ↓ ここに取得した Key と Secret をコピペ。
      twitter.setOAuthConsumer("your consumer key", "your consumer secret");

      RequestToken requestToken = twitter.getOAuthRequestToken();

      System.out.println("Got request token.");
      System.out.println("Request token: "+ requestToken.getToken());
      System.out.println("Request token secret: "+ requestToken.getTokenSecret());
      AccessToken accessToken = null;

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      while (null == accessToken) {
        System.out.println("Open the following URL and grant access to your account:");
        // ↓ここで表示されたURLにアクセス
        System.out.println(requestToken.getAuthorizationURL());
        // ↓ 表示されたPIDを Console に入力
	System.out.print("Enter the PIN(if available) and hit enter after you granted access.[PIN]:");
	String pin = br.readLine();

	try{
	  if(pin.length() > 0){
	    accessToken = twitter.getOAuthAccessToken(requestToken, pin);
	  }else{
	     accessToken = twitter.getOAuthAccessToken(requestToken);
	  }
	} catch (TwitterException te) {
	  if(401 == te.getStatusCode()){
	    System.out.println("Unable to get the access token.");
	  }else{
	    te.printStackTrace();
	  }
	}
      }
      // 成功すれば Token Key と Secret が表示される
      System.out.println("Got access token.");
      System.out.println("Access token: "+ accessToken.getToken());
      System.out.println("Access token secret: "+ accessToken.getTokenSecret());

      System.exit(0);
    } catch (TwitterException te) {
      System.out.println("Failed to get timeline: " + te.getMessage());
      System.exit( -1);
    } catch (IOException ioe) {
      System.out.println("Failed to read the system input.");
      System.exit( -1);
    }
  }
}


で、表示された Access Token, Access Token Secret を保存しておきます。

OAuthを使用してログインからPOST

例えば「PostOAuthTest」とかクラス作って以下のように記述。
POSTテストだけなので「Java Application」で実行してもPOSTします。

import javax.servlet.http.HttpServlet;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.http.AccessToken;
import twitter4j.Status;

public class PostOAuthTest extends HttpServlet {
  // ↓ ここに取得した Key と Secret をコピペ。
  String consumerKey = " your consumer key ";
  String consumerSecret = " your consumer secret ";
  String tokenKey = " your token key ";
  String tokenSecret = " your token secret ";

  public static void main(String args[]) throws Exception{
    TwitterFactory factory = new TwitterFactory();
    AccessToken at = new AccessToken(tokenKey, tokenSecret);
    Twitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret, at);
    // POST
    Status status = twitter.updateStatus("テスト");
    System.out.println("Successfully updated the status to [" + status.getText() + "].");
    System.exit(0);
  }
}


あとは上記の「main」な感じを応用すればPOSTも出来ますよ、と。
ご参考までに。