Sinatraを使ってInstagram APIのアクセストークンを取得する

Instagram APIに関する日本語情報は、現時点ではこのページが一番良くまとまっていて素晴らしい。ただ、アクセストークンを取得する具体的な例は載っていなかったので(記事を読む限りPHPを使って取ってるっぽい?)、自分が取得した方法を備忘録がてらにまとめてみた。Instagram公式のRuby用APIラッパーライブラリを使って、さらにSinatraで記述するととても簡単にOAuth認証できる例が載っているので、これを少し書き換えて、アクセストークンを表示するようにした。

Sinatraでアクセストークン取得

Instagram APIのページのManageから、アクセストークンを取得したいアプリを新規作成にして、「OAuth redirect_uri」に http://localhost:4567/oauth/callback と入れる。あとは、表示されている「Client ID」と「Client Secret」をメモっておく。

次に、ローカルでSinatraを動かしてアクセストークンを取得するコードは、Instagram公式なRuby用APIラッパーが公開されているGitHubにサンプルコードがあるので、それをベースにする。最後の部分だけちょっと書き換えて、認証後にアクセストークンを表示するようにしたのが以下のコード。

コード内のYOUR_CLIENT_IDYOUR_CLIENT_SECRETに、先ほどメモった「Client ID」と「Client Secret」を入力するのを忘れずに。

require "rubygems"
require "sinatra"
require "instagram"
enable :sessions
CALLBACK_URL = "http://localhost:4567/oauth/callback"
Instagram.configure do |config|
  config.client_id = "YOUR_CLIENT_ID"
  config.client_secret = "YOUR_CLIENT_SECRET"
end
get "/" do
  '<a href="/oauth/connect">Connect with Instagram</a>'
end
get "/oauth/connect" do
  redirect Instagram.authorize_url(:redirect_uri => CALLBACK_URL)
end
get "/oauth/callback" do
  response = Instagram.get_access_token(params[:code], :redirect_uri => CALLBACK_URL)
  response.access_token
end

このSinatraコードをtoken.rbとか名前をつけて保存しておく。このアプリを実行するには、sinatrainstagramのgemが必要なのでインストールする。

$ gem install sinatra instagram

あとは、以下のコマンドを実行して起動して、

$ ruby token.rb

http://localhost:4567/ にアクセスして表示される「Connect with Instagram」のリンクを踏めば、Instagramに飛ばされてInstagramの通常アカウントでのログイン画面になる。んで、ログイン後に上記のアプリを認証すればコールバックURLに戻されて1、アクセストークンが表示される。


Instagram/instagram-ruby-gem - GitHub instagramAPI公開!OAuth触りました | tech.kayac.com - KAYAC engineers’ blog