Java OAuth ライブラリを使って Cacoo API にアクセスする(oauth-signpost バージョン)
昨日のエントリは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()); ...
サンプルアプリケーション実行
基本的な流れは、前回と一緒です。
なお、その他の言語のOAuthサンプルコードは
Code — OAuth に列挙されています。これを見ると、Javaだと他にはOAuth for Spring SecurityとかScribeとかあるみたい。Scribeはパッと見結構よさそうだったけど、まだMavenで取れなかったので試すのヤメました。
Maven(とかIvyとか依存管理ができるやつ)が使えないと、依存ライブラリも考慮しながらJarダウンロードしないといけないので、ちょっと試すのにはシンドイですw