公開中のFacebook EventをGraph APIから取得する


最近Facebook Eventでイベントを立ち上げて、参加者に連絡をとるようなことが一般的になってきました。IT勉強会系でもFacebook Eventを活用する機会が少しずつ増えてきている用に思えます。

ということでFacebookのGraph APIからOpenなFacebook Eventを取得するためのRubyスクリプトを作成したので備忘録メモ共有です!


🎉 Gemのインストール

まずは、Facebook Graph APIへのAccessをサポートしてくれるGem『nov/fb_graph』の導入です。

Gemfileに以下を追加して、bundle installを実行。

# Facebook Graph API
gem 'fb_graph'

🐰 Facebookのアクセストークンの種類

Facebookのアクセストークンで特に馴染みが深いのは、次の2つ。


  1. Facebookのユーザーに紐付いたトークン。有効期限が1~2時間のものと、60日間のものがある

  2. Facebook アプリに紐づくAccess Token。有効期限が1~2時間のものと、60日間のものがある

🐹 Facebookアプリケーションの登録

アクセストークンを取得するためにはその前にFacebookアプリケーションのApp ID, アプリケーションのシークレットキーが必要。

ということで、Facebook DevelopersからFacebookアプリケーションのApp ID, アプリケーションのシークレットキーを取得。

😀 Facebookのアクセストークの取得

Userアクセストークンは『Graph API Explorer』から取得できます。Userアクセストークンは、「アクセストークンを取得」=>「Select Permissions」でパーミッションを指定できます。

このままだとアクセストークンの期間が短いので、有効期限を60日間に延長します。

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=<App ID>&client_secret=<アプリのシークレットキー>&fb_exchange_token=<Graph API Explorerで取得したアクセストークン>

このURLにブラウザでアクセスすると、有効期限が60日のアクセストークンが取得できます。

🍣 Facebook Graph APIから公開Eventを取得

ようやくFacebook Graph APIにアクセスするためのアクセストークンを取得できました。

ということで、さっそくRubyスクリプトからアクセス。

# Eventを検索するためのキーワード
keyword = "ハッカソン"
# 上で取得したFacebook Userのアクセストークン
access_token = 'xxxx'
# Facebook Eventの公開されているイベントを検索 (sinceは未来のeventに限定する条件)
events = FbGraph::Event.search(keyword, access_token: access_token, since: Time.now.to_i)
# Eventの詳細情報の取得
events.each do |event|
detail = FbGraph::Event.fetch(event.identifier, access_token: access_token)
# 公開されているイベントのみ
if detail.privacy == "OPEN"
# detail をゴニョゴニョ
end
end

ということで、Facebook Eventがますます身近になりそうです!

🎃 所感

Facebookのアクセストークン周りは昔から何度もトライしていますが、いまだにちゃんと理解しきれていないです。もし間違っている部分にお気付きの方がいれば、ぜひコメントください^^

🐡 おまけ:Facebookアプリケーションに紐づくアクセストークンの取得

Facebookアプリケーションに紐づくアクセストークンは、『Access Token Tool』から取得できます。

😼 参考リンク

Facebook API - アクセストークン! - mk-mode BLOG

Search Facebook events and pagination (Graph API) - Stack Overflow

📚 おすすめの書籍