39
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsとFacebook API / 地元出身の友達を探してみる

Posted at

ブログを更新しました。元の記事はコチラ


この間から外部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)

これで該当する友達がずらーーーーっと取得できる。
楽しいなこれ。

http://workabroad.jp/posts/2052

39
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?