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_ID
とYOUR_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
とか名前をつけて保存しておく。このアプリを実行するには、sinatra
とinstagram
の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