案件で「Instagram Graph API」を用いたインスタグラムの投稿ごとのインサイト情報を取得する処理を実装したので概要をメモしておきます。
Contents [hide]
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のバージョンが間違っている
コメント
[…] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]
[…] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]
[…] 関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する […]