16日にデベロッパー登録が不要になったばかりのロケタッチAPIをRubyから呼び出してみます。
インストール
ロケタッチAPIは認証にOAuth2を利用しているので、利用するためにgemをインストールします。ただ、9/18時点でgem installして入るバージョンには問題があるため、Bundlerを利用してGitHubにある最新バージョンを利用します。
Gemfileに以下の行を追加してbundle installを実行します。
Client IDの取得
アプリケーション管理ページでアプリケーションを登録し、Client IDとClient Secretを取得します。
認証
ここではWebアプリケーションでロケタッチAPIを利用するときの認証について説明します。
認証は以下の流れで行います。
- authorize_urlの生成
- ユーザの認証・許可
- codeの受け取り
- アクセストークンの取得
最後に取得するアクセストークンを使ってAPIの呼び出しを行います。
authorize_urlの生成
ユーザが認証の操作を行うページのURL(authorize_url)を生成します。
authorize_url/token_urlはurlですがredirect_uriはuriになっています。なんでこんな仕様なのかよくわかりませんが、ミスしやすいので要注意。
ユーザの認証・許可
生成したauthorize_urlにリダイレクトします。Sinatraであれば以下のような記述でリダイレクトできます。
codeの受け取り
ユーザによる認証が完了すると、リダイレクトによってredirect_uriが呼び出されます。この時、引数としてアクセストークンの取得に必要となるcodeが付加されています。
例えばredirect_uriが”http://example.com/auth/callback”に設定されている場合、“http://example.com/auth/callback?code=…”にリダイレクトされます。
アクセストークンの取得
先ほどのcodeを使ってアクセストークンを取得します。戻り値のアクセストークンオブジェクトを利用してAPIを呼び出します。
access_token.tokenの返す値を保存しておけば、再度認証を行うことなくAPI呼び出しが可能です。以下のコードでは、保存しておいたトークンからアクセストークンオブジェクトを生成しています。
API呼び出し
getメソッドでGET、postメソッドでPOSTリクエストをそれぞれ実行します。
自分の情報を取得する/v1/users/@selfであれば以下のような感じ。戻り値はOAuth2::Responseクラスのオブジェクトですが、そのままparsedメソッドを呼んであげるとjsonをパースしてHashとして返してくれます。
パラメータが必要な場合は、以下のように第2引数のハッシュにparamsを渡します。
APIの詳細についてはAPI一覧をご覧ください。
サンプル
簡単なサンプルを作成してみました。Ruby 1.9.2で動作を確認しています。
Gemfile
config.ru
app.rb