見出し画像

【GAS】自分のInstagramのインサイト情報を取得する方法

仕事でInstagramを運用している方は多いかと思います。
フォロワーの推移やビュー数など、日々変動する内容を追い続けるのは大変な作業です。

そこで、最低限の情報だけでもログを記録できたらと思い、GASを使用して定期的に記録することにしました。

これによって得られる内容は以下の内容です。

  • データ取得日

  • フォロワー数

  • フォロー数

  • 投稿数

  • リーチ数

  • インプレッション数

  • プロフィール閲覧数


1.Instasramをプロアカウントに変更し、meta for developer にてAPIキーを取得

まずはInstagramをプロアカウントに変更し、meta for developerにてアプリを作成します。
変更の方法に関しては、下記の記事がわかりやすかったので参考にしてください。
※これが一番複雑です。複数人でアカウントを管理している場合は管理者権限の確認などを行ったうえで進めてください。

APIのアクセス許可をする項目は以下になります。

  • pages_show_list

  • business_management

  • instagram_basic

  • instagram_manage_comments

  • instagram_manage_insights

  • instagram_content_publish

  • pages_read_engagement

  • pages_manage_posts

2.GASを作成

今回は管理を簡単にしやすくするために「フォロー管理(Follower)」と「閲覧管理(Contents)」の2種に分けてGASを作成します。

新規スプレッドシートを作成して、「Follower」と「Contents」という名前のシートを作成し、拡張機能 > Apps Script を開いてください。

「フォロー管理」GAS作成

出力される項目は「取得日」「フォロワー数」「フォロー数」「投稿数」です。

  function reporting(){
  var today = new Date();

  //instagram数値記録用のスプレットシートID
  var SSId = 'ここにスプレッドシートのIDをコピペする';

  //instagram Graph API 必要情報
  var instragramID = 'インスタグラムのID(数字の羅列です。)';
  var username = 'インスタグラムのアカウント名';
  var ACCESS_TOKEN = "取得したアクセストークンをコピペ";
  getFollower(today,SSId,instragramID,username,ACCESS_TOKEN);
}

//instagramの数値を引っ張り記録する関数
function getFollower(date,SSId,instragramID,username,ACCESS_TOKEN) {

  var mySS = SpreadsheetApp.openById(SSId); //IDでスプレッドシートを開く
  var sheetName = 'Follower'; 
  var sheet = mySS.getSheetByName(sheetName);

  //日付フォーマット
  var today = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd');
  //Graph API followers_count(フォロワー数),follows_count(フォロー数),media_count(投稿数)を取りに行く
  var facebook_url = 'https://graph.facebook.com/v8.0/'+ instragramID +'?fields=business_discovery.username('+ username +'){followers_count,follows_count,media_count}&access_token='+ ACCESS_TOKEN;;

  var encodedURI = encodeURI(facebook_url);
  var response = UrlFetchApp.fetch(encodedURI); //URLから情報を取得
  var jsonData = JSON.parse(response);//JSONデータをパース
  var followers = jsonData['business_discovery']['followers_count'];
  var follows = jsonData['business_discovery']['follows_count'];
  var media_count = jsonData['business_discovery']['media_count'];

  //シートにデータを追加またはアップデート
  var newData =[today,followers,follows,media_count];
  insertOrUpdate(sheet, newData);
}

//行の存在に応じて追加もしくは更新を行う関数
function insertOrUpdate(sheet, data) {
  var row = findRow(sheet, data[0]);//日付比較の関数、行番号を受け取る
  if (row) { // 行が見つかったら更新
    sheet.getRange(row, 1, 1, data.length).setValues([data]);
  } else { // 行が見つからなかったら新しくデータを挿入
    sheet.appendRow(data);
  }
}

// 日付比較を行い、データがあれば行番号を返す関数
function findRow(sheet, date) {
  var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd');
  var values = sheet.getDataRange().getValues();
  Logger.log(values + "findRow");
  for (var i = values.length - 1; i > 0; i--) {
    var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd');
    if (dataDate == searchDate) {
      return i + 1;
    }
  }
  return false;
}

【コードの変更をする箇所】
//instagram数値記録用のスプレットシートID var SSId = 'ここにスプレッドシートのIDをコピペする';
//instagram Graph API 必要情報 var instragramID = 'インスタグラムのID(数字の羅列です。)';
var username = 'インスタグラムのアカウント名';
var ACCESS_TOKEN = "取得したアクセストークンをコピペ";

上記の項目はご自身の情報を入力してください。

入力が完了したら、「Follower」シートの1行目に項目を追加しておいてください。
A1:日付
B1:フォロワー数
C1:フォロー数
D1:投稿数

それぞれの情報を入力出来たらコードを保存して、実行を行いテストしてみてください。
うまくいかない場合は、コードの変更をする箇所のコピペした内容が間違っている可能性があります。

成功すると各列に数値が反映されます。

トリガー設定をする。

各数値は毎日蓄積することをお勧めしますが、それはご自身のビジネスに合わせて調整してください。
今回は毎日1回取得する内容に設定します。

実行する関数を選択:insight_reporting
デプロイ時に実行:Head
イベントのソースを選択:時間主導型
時間ベースのトリガーのタイプを選択:日付ベースのタイマー
時刻を選択:午前 8 時~9 時

「閲覧管理」GAS作成

GASコードの内容以外は基本的に「フォロー管理」と同じです。

出力される項目は「取得日」「リーチ数」「インプレッション数」「プロフィール閲覧数」です。

 function insight_reporting(){
 var date = new Date();
 

 //instagram数値記録用のスプレットシートID
 var SSId = 'ここにスプレッドシートのIDをコピペする';
 

 //instagram Graph API 必要情報
 var instragramID = 'インスタグラムのID(数字の羅列です。)';
 var username = 'インスタグラムのアカウント名';
 var ACCESS_TOKEN = "取得したアクセストークンをコピペ";
 getInsight(date,SSId,instragramID,username,ACCESS_TOKEN);
 }
 

 //instagramの数値を引っ張り記録する関数
 function getInsight(date,SSId,instragramID,username,ACCESS_TOKEN) {
 

 var mySS = SpreadsheetApp.openById(SSId); //IDでスプレッドシートを開く
 var sheetName = 'Contents'; //スプレッドシートのContentsのシートを参照
 var sheet = mySS.getSheetByName(sheetName);
 

 //日付を取得して1日前に戻す
 var today = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd');
 

 //現在の「日」を取得
 var day = date.getDate();
 

 //前日日付にしたいので-1する
 date.setDate(day-1);
 

 //日付の表示形式を整形する
 var yesterday = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd');
 

var facebook_url = 'https://graph.facebook.com/v8.0/'+ instragramID +'/insights?metric=reach,impressions,profile_views&period=day&access_token='+ ACCESS_TOKEN;;
 

 var encodedURI = encodeURI(facebook_url);
 var response = UrlFetchApp.fetch(encodedURI); //URLから情報を取得
 var jsonData = JSON.parse(response);//JSONデータをパース
 var reach = jsonData.data[0].values[1].value;
 var impressions = jsonData.data[1].values[1].value;
 var profile_views = jsonData.data[2].values[1].value;
 

 //シートにデータを追加またはアップデート
 var newData =[yesterday,reach,impressions,profile_views];
 insertOrUpdate2(sheet, newData);
 }
 

 //行の存在に応じて追加もしくは更新を行う関数
 function insertOrUpdate2(sheet, data) {
 var row = findRow2(sheet, data[0]);//日付比較の関数、行番号を受け取る
 if (row) { // 行が見つかったら更新
 sheet.getRange(row, 1, 1, data.length).setValues([data]);
 } else { // 行が見つからなかったら新しくデータを挿入
 sheet.appendRow(data);
 }
 }
 

 // 日付比較を行い、データがあれば行番号を返す関数
 function findRow2(sheet, date) {
 var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd');
 var values = sheet.getDataRange().getValues();
 Logger.log(values + "findRow");
 for (var i = values.length - 1; i > 0; i--) {
 var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd');
 if (dataDate == searchDate) {
 return i + 1;
 }
 }
 return false;
 } 

【コードの変更をする箇所】
//instagram数値記録用のスプレットシートID var SSId = 'ここにスプレッドシートのIDをコピペする';
//instagram Graph API 必要情報 var instragramID = 'インスタグラムのID(数字の羅列です。)';
var username = 'インスタグラムのアカウント名';
var ACCESS_TOKEN = "取得したアクセストークンをコピペ";

上記の項目はご自身の情報を入力してください。

入力が完了したら、「Contents」シートの1行目に項目を追加しておいてください。
A1:日付
B1:リーチ数
C1:インプレッション数
D1:プロフィール閲覧数

それぞれの情報を入力出来たらコードを保存して、実行を行いテストしてみてください。
うまくいかない場合は、コードの変更をする箇所のコピペした内容が間違っている可能性があります。

成功すると各列に数値が反映されます。

トリガー設定をする。

こちらの内容はフォロー管理のトリガーのタイミングは同じにしてください。その方が情報を整理すると気に便利です。

実行する関数を選択:insight_reporting
デプロイ時に実行:Head
イベントのソースを選択:時間主導型
時間ベースのトリガーのタイプを選択:日付ベースのタイマー
時刻を選択:午前 8 時~9 時

3.取得した情報を1シートにまとめる

同じスプレッドシート内に新しいシートを追加してください。

1行目に項目名を入力

あくまで例ですが、以下のように項目を追加します。
A1:日付
B1:フォロワー数
C1:フォロー数
D1:投稿数
E1:差分(前日までとの投稿数の差)
F1:リーチ数
G1:インプレッション数
H1:プロフィール閲覧数
I1:フォロワー差分(前日までとのフォロワー数の差)

2行目に関数を入力

以下の内容で入力していきます。
A2:=ARRAYFORMULA(Follower!A2:D)
E2:0を入力
E3:=ARRAYFORMULA(IF(D3:D="","",D3:D-D2:D))
F2:=ARRAYFORMULA(Contents!B2:D)
I2:0を入力
I3:=B3-B2

基本的な情報のデータベースはこれで完成です。
この情報があれば、最低限の推移を確認できるので、分析には役立てられると思います。


この記事が気に入ったらサポートをしてみませんか?