前回に引き続いてInstagram Graph APIをGASから叩いてインスタグラムアカウントのフォロワー数やインサイト取得処理をGASで実装した過程についてメモしておきます
関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する
前準備
Instagram Graph APIを使用するためにはアクセストークンとプロアカウントになっているインスタアカウントの内部ID(FBアカウントの内部IDではない)が必要になります。
取得方法については以下の記事で紹介しているのでまだの方はそちらを参照してください
→【2023年版】Instagram Graph APIのアクセストークンを取得する方法
Instagram Graph APIを使ってプロフィール画面のインサイト情報を取得する
プロフィールのインサイト情報はInstagram Graph APIの「/insights」というコンポーネントで取得できます。詳しくは以下のAPIドキュメントに記載されています
制限
- 
follower_count、online_followers、audience_*は、フォロワーが100人以下のIGユーザーには利用できません。
- 
online_followers指標のインサイトデータは、過去30日間についてのみ利用できます。
- 
リクエストしたインサイトデータが存在しない場合、または現在アクセスできない場合、APIは個別の指標で0ではなく空のデータセットを返します。
- 
利用者層データ指標で返されるのは、上位45件のみです(例:audience_cityの場合、フォロワー数で上位45の都市が返されます)。
- 
利用者層データ指標の計算で使われるのは、当社に利用者層データがある閲覧者だけです。
- 
利用者層データ指標値を合計しても、フォロワー数より少ない場合があります(前の項目を参照)。
- 
指標計算に使用されるデータは、最大で48時間遅れている可能性があります
リクエストの構文
GET https://graph.facebook.com/{api-version}/{ig-user-id}/insights ?metric={metric} &period={period} &since={since} &until={until} &access_token={access-token}
クエリ文字列パラメーター
| パラメーター | 値 | 
|---|---|
| {access-token}必須 文字列 | アプリユーザーのユーザーアクセストークン。 | 
| {metric}必須 コンマ区切りリスト | 戻り値を取得する指標のコンマ区切りリスト。複数の指標をリクエストする場合には、すべての指標の期間が互換性のある同じものである必要があります。 | 
| {period}必須 文字列 | リクエストしている指標と互換性がある期間。 | 
| {since}UNIXタイムスタンプ | 範囲を定義するために {until}と組み合わせて使用します。sinceとuntilを省略した場合、APIのデフォルトである2日間(昨日から今日まで)が使用されます。注: ページネーションカーソル( | 
| {until}UNIXタイムスタンプ | 範囲を定義するために {since}と組み合わせて使用します。sinceとuntilを省略した場合、APIのデフォルトである2日間(昨日から今日まで)が使用されます。注: ページネーションカーソル( | 
指標と期間
lifetime期間がサポートされている指標では、24時間の期間からなる配列で返されます。各期間はUTC−07:00で終了します。audience_*指標は、sinceとuntilの範囲パラメーターをサポートしません。
| 指標 | 互換性のある期間 | 説明 | 
|---|---|---|
| audience_city | lifetime | Metaが持っている利用者層データのフォロワーの市町村。 
 | 
| audience_country | lifetime | Metaが持っている利用者層データのフォロワーの国。 
 | 
| audience_gender_age | lifetime | Metaが持っている利用者層データのフォロワーの性別と年齢の分布。指定できる値は、 M(男性)、F(女性)、U(指定しない)です。
 | 
| audience_locale | lifetime | Metaが持っている利用者層データのフォロワーの国コード別ロケール。 
 | 
| email_contacts | day | IGユーザーのプロフィールにあるメールリンクの合計タップ数。 | 
| follower_count | day | 指定された期間内の各日の新規フォロワー数の合計。最大30日分のデータが返されます。フォロワーが100人未満のIGユーザーは省かれます。 | 
| get_directions_clicks | day | IGユーザーのプロフィールにある指示リンクの合計タップ数。 | 
| impressions | day、week、days_28 | IGユーザーのIGメディアが閲覧された合計回数。API、Facebook広告インターフェイス、宣伝機能により生成された広告アクティビティを含みます。プロフィールの閲覧は含まれません。 | 
| online_followers | lifetime | IGユーザーのフォロワーのうち、指定された期間にオンラインだったフォロワーの合計数。フォロワーが100人未満のIGユーザーは省かれます。 | 
| phone_call_clicks | day | IGユーザーのプロフィールにあるコールリンクの合計タップ数。 | 
| profile_views | day | 指定された期間内にIGユーザーのプロフィールを閲覧したユーザーの合計数。 | 
| reach | day、week、days_28 | IGユーザーのIGメディアを1つ以上閲覧したユニークユーザーの合計数。ユーザーが、同じIGメディアを繰り返し閲覧した場合や、同一IGユーザーの所有する別のIGメディアを閲覧した場合は、1回の閲覧としてカウントされます。API、Facebook広告インターフェイス、宣伝機能により生成された広告アクティビティを含みます。 | 
| text_message_clicks | day | IGユーザーのプロフィールにあるSMSリンクの合計タップ数。 | 
| website_clicks | day | IGユーザーのプロフィールにあるウェブサイトリンクの合計タップ数。 | 
範囲
このエッジは時間ベースのページネーションをサポートしているため、Unixタイムスタンプを使ってsinceパラメーターとuntilパラメーターを含めることにより範囲を定義できます。例えば、28日分のインプレッションを取得するには(過去10日間の毎日)、10日前と今日のUnixタイムスタンプを生成し、それらをsinceパラメーターとuntilパラメーターに割り当ててリクエストに含めます:
metric=impressions&period=days_28&since=1501545600&until=1502493720
sinceパラメーターとuntilパラメーターには指定された日付が含まれるため、まだ終了していない日(つまり今日)が範囲に含まれる場合は、その日に何度かクエリを行うとそのたびに返される値が増える可能性があります。sinceパラメーターとuntilパラメーターを指定しない場合、APIのデフォルトである2日間(昨日から今日まで)が使用されます。
GASでのサンプルコード
以下がGASからInstagram Graph APIを使ってプロフィール画面のインサイト情報を取得するサンプルコードになります。
// プロフィール画面のインサイト情報を取得してスプレッドシートに書き込む関数
function get_profile_insight(){
  response = UrlFetchApp.fetch(urlOf(endpoint_base + '/insights', {
    "access_token":access_token,
    'metric': 'impressions,follower_count,profile_views,reach,website_clicks',
    'period': 'day',
  }))
  var result = JSON.parse(response.getContentText()); // レスポンスをjsonに変換する
  console.log(result['data'].length)
  return result
}
function main(){
  const access_token='xxxx' // 無期限アクセストークン
  const instagram_account_id = "xxxx" //自分のインスタグラムアカウント内部ID
  const version = 'v16.0' // APIのバージョン
  const graph_domain = 'https://graph.facebook.com/' // APIエンドポイント
  const endpoint_base = graph_domain + version +'/'+instagram_account_id
  data = get_profile_insight()
  console.log(data)
}
実行すると以下のような連想配列にそれぞれのインサイト情報が格納されたレスポンスが返されます
<実行結果>

これをmapとかでいい感じに加工してスプレッドシートに追記すると日ごとのインサイトが自動で取得できるような処理が作れます
関連記事:【GAS】スプレッドシートの最後の行にデータを追加するサンプルコード
 
  
  
  
  

コメント
[…] 関連記事:【GAS】Instagram Graph APIを使ってプロフィール画面のインサイト情報を取得する […]
[…] 関連記事:【GAS】Instagram Graph APIを使ってプロフィール画面のインサイト情報を取得する […]