概要
Facebook の Graph API を Ruby からコールしてみました
Facebook Graph API をコールするために OAuth によって取得できたアクセストークの取得が必要になるので Web アプリとして作成しています
環境
- macOS 10.15.2
- Ruby 2.6.2p47
- koala 3.0.0
Facebook アプリの作成
過去に Facebook Developer のページでアプリの作成方法を紹介しているのでそちらを参考にして事前に作成しておいてください
Facebook OAuth の実装
Facebook の OAuth は JavaScript 側で行います
Facebook の OAuth の方法も過去の記事で紹介しているのでそれを参考にします
JavaScript 側で取得したアクセストークンを Web アプリ側に渡して Facebook Graph API をコールしていきます
サンプルアプリの作成
冒頭紹介した通り Web アプリ (Sinatra) として作成します
JavaScript 側で取得したセッショントークンを使ってコールします
また Facebook Graph API は koala というライブラリを使います
vim Gemfile
gem "koala"
bundle install --path vendor
vim app.rb
require 'sinatra/base'
require 'sinatra/cookies'
require 'koala'
class App < Sinatra::Base
helpers Sinatra::Cookies
get '/' do
if cookies.has_key?(:fb_access_token)
graph = Koala::Facebook::API.new(cookies[:fb_access_token])
profile = graph.get_object("me")
@id = profile['id']
end
erb :index
end
end
cookies にセッショントークンがある場合は Graph API をコールします
今回はユーザ ID を取得しているだけです
ビューの作成
Facebook Graph API をコールして取得できた情報を HTML として表示するビューを作成します
vim views/index.erb
<html>
<head>
<title></title>
</head>
<body>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxxxx',
cookie : true,
xfbml : true,
version : 'v5.0'
});
FB.AppEvents.logPageView();
FB.getLoginStatus(function(response) {
console.log(response);
if (response.status === 'connected') {
console.log(response.authResponse.accessToken);
document.cookie = 'fb_access_token=' + response.authResponse.accessToken;
}
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function checkLoginState() {
FB.getLoginStatus(function(response) {
console.log(response);
if (response.status === 'connected') {
console.log(response.authResponse.accessToken);
document.cookie = 'fb_access_token=' + response.authResponse.accessToken;
}
});
}
</script>
<fb:login-button
scope="public_profile,email"
onlogin="checkLoginState();">
</fb:login-button>
<div><%= @id %></div>
</body>
</html>
ログインしている状態でページにアクセスするとユーザ ID が表示されます
ログインしていない場合はログインボタンを押してログインするとユーザ ID が表示されるようになります
動作確認
bundle exec rackup config.ru -o 0.0.0.0
localhost:9292 にアクセスしてログインして動作確認しましょう
Tips: Instagram の Graph API をコールするには
どうやら Instagram の Graph API も同じエンドポイントでコールできるようです
が、Instagram ビジネスアカウントの作成と Facebook ページの作成が必須なので少し勝手が違うようです
当然ですが API のスコープも違います (instagram_basic, pages_show_list が必須?)
詳しくはチュートリアルの手順を御覧ください
また Instagram API は廃止になり Instagram Graph API を使うようになっているので後者を使いましょう
Instagram Graph API を追加する
Facebook アプリはコールされる API をプロダクトとして追加します
左メニューにあるプロダクトから「Instagram」を追加しましょう (スクリーンショットは追加後の状態)
0 件のコメント:
コメントを投稿