ブログを更新しました。元の記事はコチラ
この間から外部APIとの連携をやってみてるけど、いろいろ楽しいね。巨人の肩に乗ると、いきなりサイトがパワーアップした感じがでるので嬉しいこともある。
今回はFacebookのAPIをRails4で使ってみた。便利なGemがあるのでFacebook Developerのドキュメントあまり読まずにいけてしまった。
Gemはこの2つ。
omniauth-facebookは前から入っていたので、そのまま使う事にした。
omniauth-facebook
koala
Gemfile
# Auth
gem 'omniauth-facebook'
# Facebook API
gem 'koala'
とりあえずインストール。
bundle install
###omniauth-facebook
omniauth-facebook使うと /auth/facebook にアクセスすればfacebookの認証画面を出してくれて、許可した後はcallback用のURLに飛ばしてくれる。
そこで受け取るアクションでは env['omniauth.auth'] が使えるので、
token = env['omniauth.auth']["credentials"]["token"]
とかでアクセストークンが取得できる。
このトークンを使って koala でいろいろすると。
omniauthの説明はRailscastが分かりやすい。
Facebook Authentication
omniauthを使う際に、config/initializer/omniauth.rbを作ると思うけど、その中でscopeのオプションを設定してあげないと、koalaでやり取りする時にデータがうまく取れない。権限のエラーを出してくれれば分かりやすいけど、たまにからの配列が返ってきたりするからとまどった。
たとえばこんな感じ。
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], scope: 'basic_info, email, friends_hometown, public_profile, user_friends, user_hometown'
end
scopeをどこで確認するかは、facebook developerのGraph API Explorerがもの凄い便利。すごいねフェイスブック。
Get Access Token を押すといろいろティックボタンが出てくるので実験できる。トークン取得した後にトークンの横にある「Debug」ボタンを押すと画面の一番したにscopeが表示されるので、それをコピペするだけ。
###koala
koalaもRailscastで説明されてた。Railscastすげーな。
Facebook Graph API
さっき取得したtokenを使ってkoalaがFacebookとやり取りしてくれる。
facebook = Koala::Facebook::API.new(token)
facebook.get_object('me')
=> {"id"=>"100000134621172", "name"=>"Shunsuke Sawada", "first_name"=>"Shunsuke", "last_name"=>"Sawada", "link"=>"https://www.facebook.com/shunwitter", ......
###FQL
いろいろ試してみたいけど、時間がかかるので、一番柔軟そうなFQLを試した。FQLはSQLみたいな文法でFacebookのデータベースからデータを取り出す言語です。
FQLを使って、「Facebookの自分の友達の中で「出身地が自分と同じ人たちだけを20件取り出す」ということをやってみた。
facebook = Koala::Facebook::API.new(token)
my_id = facebook['id']
hometown = facebook['hometown']['name']
q = "SELECT uid, first_name, last_name FROM user WHERE hometown_location.name = \'#{hometown}\' AND uid IN ( SELECT uid2 FROM friend WHERE uid1 = #{my_id} ) LIMIT 20"
facebook.fql_query(q)
これで該当する友達がずらーーーーっと取得できる。
楽しいなこれ。