読者です 読者をやめる 読者になる 読者になる

Java OAuth ライブラリを使って Cacoo API にアクセスする(oauth-signpost バージョン)

http://serif.hatelabo.jp/images/cache/1e97986921cd995d8d4bfa0a4a26e662555e9754/107b580783f5899dab0e8471168af8a9d1bec52f.gif

昨日のエントリOAuth本家(?)のライブラリでしたが、oauth-signpostというもっとシンプルなライブラリがありました。こっちの方がよさそうですね。


サンプルプログラム作成に当たっては、またまたTwitter APIをOAuth認証で利用する方法(Javaの場合) | inquisitorをほぼそのまんま流用させていただきました。作成したコードは、前回と同じくGithubにあげています。

pom.xml

oauth-signpostはセントラルリポジトリに登録されているので、今回はリポジトリの設定は不要。

<dependency>
  <groupId>oauth.signpost</groupId>
  <artifactId>signpost-core</artifactId>
  <version>1.2.1.1</version>
</dependency>

Javaソースコード

TokenCreator.javaでは、ベリファイア(PIN)コードを取得しています。ブラウザ上で手動でauthorizeする必要があるのは、前回と一緒。

OAuthConsumer consumer = new DefaultOAuthConsumer("***** Concumer key *****", "***** Consumer secret *****");

OAuthProvider provider = new DefaultOAuthProvider(
  "https://cacoo.com/oauth/request_token",
  "https://cacoo.com/oauth/access_token",
  "https://cacoo.com/oauth/authorize");

String authUrl = provider.retrieveRequestToken(consumer, OAuth.OUT_OF_BAND);
System.out.println("このURLにアクセスし、表示されるPINを入力してください。");
System.out.println(authUrl);
System.out.print("PIN:");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String pin = br.readLine();

provider.retrieveAccessToken(consumer, pin);
System.out.println("Access token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());

Diagrams.javaでは、Cacoo APIから図一覧を取得しています。標準のjava.net.HttpURLConnectionに、署名する処理をかぶせてリクエストしている感じですね。

// これはユーザによらない
OAuthConsumer consumer = new DefaultOAuthConsumer("***** Concumer key *****", "***** Consumer secret *****");

// これはユーザごとに異なる
consumer.setTokenWithSecret("***** Access token *****",	"***** Token secret *****");

// HTTPリクエスト
URL url = new URL("https://cacoo.com/api/v1/diagrams.xml");
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.setRequestMethod("POST"); // HTTPメソッドはPOST
consumer.sign(request); // リクエストに署名

// レスポンスコード
System.out.println(request.getResponseCode() + " " + request.getResponseMessage());

...

サンプルアプリケーション実行

基本的な流れは、前回と一緒です。

  1. TokenCreator.javaを実行する
    1. コンソールにURLが出力されるのでブラウザに貼り付けて表示
    2. "Authorize"ボタンを押して、ベリファイアコードを表示
    3. ベリファイアコードをコピペして、コンソールでペースト
  2. Diagrams.javaを実行する
    1. 自分の図一覧情報が出力


なお、その他の言語のOAuthサンプルコードは
Code — OAuth
に列挙されています。これを見ると、Javaだと他にはOAuth for Spring SecurityとかScribeとかあるみたい。Scribeはパッと見結構よさそうだったけど、まだMavenで取れなかったので試すのヤメました。

Maven(とかIvyとか依存管理ができるやつ)が使えないと、依存ライブラリも考慮しながらJarダウンロードしないといけないので、ちょっと試すのにはシンドイですw