GAS(GoogleAppScript) GCP

【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する

この記事は約8分で読めます。

 

案件で「Instagram Graph API」を用いたインスタグラムの投稿ごとのインサイト情報を取得する処理を実装したので概要をメモしておきます。

 

APIの使用条件とアクセストークンについて

 

まずInstagram Graph APIを使用するためには、該当インスタグラムアカウントがビジネスもしくはプロである必要があります。またInstagram Graph APIはFacebookから提供されているのでFacebookのアカウントも必要になります。取得方法や注意点については別の記事で説明しているのでそちらを参照してください

 

関連記事:【2023年版】Instagram Graph APIのアクセストークンを取得する方法

 

またAPIに関連する各種仕様は公式ドキュメントを参照してください。

 

Instagram Graph APIを使って投稿ごとのインサイト数を取得する

 

というわけでここでは「Instagram Graph APIを使って投稿ごとの統計情報とインサイトを取得する」処理について紹介していきます。

 

投稿の内部IDを取得する

 

まずインサイトを取得するためには各投稿の内部ID(URLに付随している英語文字列ではないです)を確認する必要があります。これはbusiness_discoveryというコンポーネントで提供されています

 

// 各投稿の統計情報を取得する関数
function get_post_stat(user_id){ 
  api_url = encodeURI("https://graph.facebook.com/v3.2/"+ instagram_account_id +"?fields=business_discovery.username(" + user_id + "){followers_count,media_count,media{comments_count,like_count}}&access_token=" + access_token)
  response = UrlFetchApp.fetch(api_url)
  var result = JSON.parse(response.getContentText()); // レスポンスをjsonに変換する
  // console.log(71,result)
  return result['business_discovery']['media']['data']
}


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
  res = get_post_stat(user_id='xxx')
  console.log(res)
}

 

<実行結果>

 

こんな感じで指定したアカウントの各投稿内部IDとそれのいいね数とコメント数が取得できます。ただこれは指定したアカウントがプロアカウントでないと取得できないみたいで個人アカウントに対しては機能しません。

 

これで内部IDが取得できたので、次はこれを使って投稿のインサイトを取得します

 

投稿別のインサイト情報を取得する

 

投稿ごとのメディアインサイトの取得については「ig-media/insights」というエンドポイントで提供されています。パラメーターや引数設定については以下を記載されています

 

https://developers.facebook.com/docs/instagram-api/reference/ig-media/insights

 

// 各投稿の統計情報を取得する
function get_post_stat(user_id){ 
  api_url = encodeURI("https://graph.facebook.com/v3.2/"+ instagram_account_id +"?fields=business_discovery.username(" + user_id + "){followers_count,media_count,media{comments_count,like_count}}&access_token=" + access_token)
  response = UrlFetchApp.fetch(api_url)
  var result = JSON.parse(response.getContentText()); // レスポンスをjsonに変換する
  // console.log(71,result)
  return result['business_discovery']['media']['data']
}



// 記事ごとのインサイトを取得する関数(ストーリーの閲覧数などを取得する)
function get_post_insight(post_id_data){
  var array = [];
  var post_id = String(post_id_data);

  response = UrlFetchApp.fetch(urlOf(graph_domain + version + '/' + post_id +'/insights', {
    "access_token":access_token,
    'metric': 'engagement,impressions,reach,saved,video_views',
    'period': 'day',
    'metric_type':'total_value'
  }))

  var result = JSON.parse(response.getContentText()); // レスポンスをjsonに変換する
  // console.log(result['data'].length)
  for (let i = 0; i < result['data'].length; i++){
      log = result['data'][i]
      // console.log('165', log)
      array.push([log['values'][0]['value'],log['description'],log['name'],log['title'],post_id])
  }
  // console.log(217,array);
  return array
}


function main(){
  const  access_token='xxx' // 無期限アクセストークン
  const instagram_account_id = "xxx" //インスタグラムの内部ID
  const version = 'v16.0' // APIのバージョン
  const graph_domain = 'https://graph.facebook.com/' // APIエンドポイント
  const endpoint_base = graph_domain + version +'/'+instagram_account_id
  let array = []
  res = get_post_stat(user_id='<アクセストークンと紐づいているインスタアカウントID>')
  for (let i = 0; i < res.length; i++){
    data = res[i]
    try{
      insight_data = get_post_insight(data['id'])
    }
    catch(e){
      insight_data = []
    }
    if (insight_data.length!=0){
      array.push(insight_data)
    }

  }
  console.log(array)
}

 

<実行結果>

 

get_post_insight()が指定した内部IDのインサイトを取得する関数でmain()で投稿の内部IDを一覧で取得し、それをfor文で一つずつget_post_insight()に渡してインサイト情報を取得しています

 

こんな感じで各インサイトが取得できます。コード内で例外処理を挟んでいるのはプロアカウントに移行する前に投稿したインサイト情報は取得することができず引数エラーを起こすことがあるためです。

 

【参考】Instagram Graph APIで認証エラーになるときのよくある原因

 

前述のコード実行後にエラーが発現した場合、以下の理由でInstagram Graph APIが呼び出せていない可能性があります。

  • FacebookとInstagramがリンクしていない
  • アクセストークン発行時にInstagram利用の権限が正しく付与されていない
  • App ID・Appシークレットが間違っている
  • インスタグラムビジネスアカウントIDが間違っている
  • APIのバージョンが間違っている

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]

  2. […] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]

  3. […] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]

タイトルとURLをコピーしました