Java で Base64 エンコード, OAuth, JSON を扱うためのライブラリ WSCUtils を公開しました
Java で Twitter クライアントを作ろうと思ったときに、とりあえず 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(); } }