Java で Base64 エンコード, OAuth, JSON を扱うためのライブラリ WSCUtils を公開しました

JavaTwitter クライアントを作ろうと思ったときに、とりあえず OAuth や JSON を扱えるようにする必要があったのでライブラリを作ってみました。 既に twitter4j とかあるんで需要はない気はしますが興味のある方はどうぞ。

フィードバックなど頂けると嬉しいです。

例 : Twitter の OAuth request token を取得するコード

このライブラリを使うと、Twitter の OAuth request token を取得するコードが以下のように書けます。 Consumer key と consumer secret をちゃんとした値にすると、正しいレスポンスを取得できるはずです。 ただ、例外処理は全然ちゃんとしてないので実際に使う際はちゃんと例外処理を行ってください。

import info.vividcode.util.oauth.OAuthRequestHelper;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.Date;

public class OAuthTest {
    
    public static void main( String[] args ) throws GeneralSecurityException, IOException {

        // Twitter に Request token を求める際の例
        
        // 送信先 URL
        String url = "https://api.twitter.com/oauth/request_token";
        // リクエストメソッド
        String method = "POST";
        // Consumer key と secret
        String consumerKey    = "XXXXXX";
        String consumerSecret = "XXXXXX";
        // 今回は request token を求める例で token secret はないので空文字列
        String tokenSecret = "";
        // secrets 文字列 (Consumer secret と token secret を繋いだもの)
        String secrets = consumerSecret + "&" + tokenSecret;
        // OAuth 関係のパラメータ
        OAuthRequestHelper.ParamList paramList = new OAuthRequestHelper.ParamList( 
              new String[][]{
                { "oauth_consumer_key", consumerKey },
                { "oauth_nonce", OAuthRequestHelper.getNonceString() },
                { "oauth_signature_method", "HMAC-SHA1" },
                { "oauth_timestamp", Long.toString( new Date().getTime() / 1000 ) },
                { "oauth_version", "1.0" },
                { "oauth_callback", "oob" },
              } );
        // OAuthRequestHelper のインスタンス化
        // 今回はクエリパラメータにもリクエストボディにも情報を載せないので, 後ろ 2 つの引数は null
        OAuthRequestHelper helper = new OAuthRequestHelper( url, method, secrets, paramList, null, null );
            // インスタンス化と同時にシグニチャ生成もされるので, あとは helper から情報を取って
            // リクエストを送信するだけ
        
        // リクエスト先への connection 生成
        URL u = new URL( helper.getUrlStringIncludeQueryParams() );
        HttpURLConnection conn = (HttpURLConnection)u.openConnection();
        // リクエストメソッドのセット
        conn.setRequestMethod( helper.getRequestMethod() );
        // Authorization ヘッダのセット
        conn.addRequestProperty( "Authorization", helper.getAuthorizationHeaderString("") );
        // 接続
        conn.connect();
            // 後はレスポンスを受け取って処理する
        if( conn.getResponseCode() == 200 ) {
            BufferedReader br = new BufferedReader( new InputStreamReader( conn.getInputStream() ) );
            String line = null;
            while( ( line = br.readLine() ) != null ) {
                System.out.println( "> " + line );
            }
            br.close();
        } else {    
            System.out.println( "ERROR : " + conn.getResponseMessage() );
        }
        conn.disconnect();
        
    }

}