Java OAuth ライブラリを使って Cacoo API にアクセスする

【追記】もっとヨサゲなOAuthライブラリを用いたサンプルコードを、次の日に記載しています。


http://serif.hatelabo.jp/images/cache/1e97986921cd995d8d4bfa0a4a26e662555e9754/66bb6ac816b084598da827992a47c6d447e5c092.gif

というわけで、UssyにRuby OAuth ライブラリを使って Cacoo API にアクセスする - Ussy Diary(2010-07-22)で先をこされて悔しかったので、自分もJavaでやってみました。404 Not Foundをほぼ流用させてもらいましたよっと。

サンプルプログラムは、Githubにあげています。


pom.xml

まずは、OAuthライブラリ(とその他)をMavenで取得するために、POMの設定から。

<!-- リポジトリの設定 -->
<repositories>
  <repository>
    <id>oauth</id>
    <url>http://oauth.googlecode.com/svn/code/maven</url>
  </repository>
</repositories>

<!-- 依存関係の設定 -->
<dependencies>
  <dependency>
    <groupId>net.oauth</groupId>
    <artifactId>oauth-core</artifactId>
    <version>20090531</version>
  </dependency>
  <dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.5</version>
  </dependency>
<dependencies>

Javaソースコード

コンシューマとの連携部分(CacooOauthConsumer.java)では、request token/authorize/access token URLをそれぞれ http://cacoo.com/api の通りに設定します。

  ...

  /** oauth request token URL. */
  public String requestTokenURL = "https://cacoo.com/oauth/request_token";
  /** oauth authorize URL. */
  public String authorizeURL = "https://cacoo.com/oauth/authorize";
  /** oauth access Token URL. */
  public String accessTokenURL = "https://cacoo.com/oauth/access_token";

  ...

その後、クライアントコード(App.java)ではconsumerKey/consumerSecretを適切に設定した上でアクセス先をCacooに変更します。事前にCacoo - Sign inからサンプルアプリケーションを設定して、consumerKey/consumerSecretを取得しておいてください。アプリケーションの種別は「クライアント」で。

  ...

  String consumerKey = "**********";
  String consumerSecret = "************************";

  ...

  // リクエストトークンを取得するのに使うパラメータ
  Map<String, String> params = new HashMap<String, String>();
  params.put("scope", "https://cacoo.com/api/v1/diagrams.xml");
  // リクエストトークンを取得
  Map<String, String> result = consumer.getRequestToken(params);

  ...

  // Cacoo diagramsのデータを取得
  String response = consumer.getResource("https://cacoo.com/api/v1/diagrams.xml", result.get("accessToken"), result.get("tokenSecret"));
  System.out.println(response);

  ...

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

この状態でApp.javaを実行すると、コンソールに下記のようなメッセージが出力されます。

以下のURLをWebブラウザで開いてください。
https://cacoo.com/oauth/authorize?oauth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
verifierを入力してね:

で、指示通りにURLをブラウザで開くと、このようなダイアログが表示されると思うので、"Authorize"してください。

f:id:ikikko:20100723034833p:image

その後、表示されるベリファイアコードをコピペして、コンソールに入力します。

f:id:ikikko:20100723034834p:image

これで、図一覧の情報がコンソールに出力されると思います。


で、API経由でCacooにアクセスできたのはいいことなのですが、実はOAuthの仕組みとかもよく分かっていないんです><。これからサンプルコードをいじりつつ勉強します。。。