実装したいこと
- facebookページでかけた広告結果データを取得して画面描画したい
- 広告結果データ取得にはfacebook-ruby-business-sdkを使う
- グラフ描画にはchartkickを使用する
トークン取得
developer for facebookにアクセスしてアクセストークンを取得します、下記キャプチャから取得できます
画面左側メニューの「設定 > ベーシック」から「app secret」も取得できるので、これも控えておきます。
ここで取得したトークンとシークレットをcredentialsに入れておきます。
Railsアプリから呼び出す
トークンを設定できたら呼び出す準備は完了しているので、必要な記述を追加していきます。
taskテーブル
カラム名 | 型 |
---|---|
name | string |
ad_id | string |
dataテーブル
カラム名 | 型 |
---|---|
impressions | integer |
country_name | string |
task_id | bigint |
task has_many datas
タスクを登録した時に、広告結果を取得してみます。
app/models/task.rb
require 'facebookbusiness'
class Video < ApplicationRecord
# facebook marketing API
FacebookAds.configure do |config|
config.access_token = Rails.application.credentials.dig(:facebook_ads, :access_token)
config.app_secret = Rails.application.credentials.dig(:facebook_ads, :app_secret)
end
# callback
after_save :fetch_facebook_insights
def fetch_facebook_insights
ad = FacebookAds::Ad.get(ad_id)
insightss = ad.insights(
fields: 'impressions',
breakdowns: 'country',
date_preset: 'this_quarter'
)
insightss.all.each do |insight|
data.create(
country_name: insight.country,
impressions: insight.impressions.to_i
)
end
end
end
地味に気を付けたい点としては、
- impressionsが
String
で返ってくるので型変換が必要 - countryは
AU
などの略称で返ってくるので、UIで日本語表示したい場合は対応が必要
2点目については、facebookの国コード一覧などが役に立つかと思います。
chartkickでグラフ化
READMEに沿って進めれば簡単にグラフ化できます。
show.html.erb
<%= bar_chart @task.datas.group(:country_name).sum(:impressions) %>