InstagramのインサイトデータをGoogle スプレッドシートに自動で登録する方法【API使用】

Instagramの運用をしている人にとって、フォロワーの推移は必須チェックですよね。

でも、Instagramの公式ではインサイトは1週間しかさかのぼって見られません。

SINISなどのInstagramの分析ツールはいくつかありますが、充実した機能のものは有料のものがほとんどです。

そこで、APIを使ってインサイトの情報を取得し、それをGoogle スプレッドシートに自動で更新する方法をご紹介します。

APIを活用する方法なので費用は一切かからず無料で分析ができます。

以前下記の記事で紹介したFacebookのAPIを今回も使用します。

あわせて読みたい
Instagram APIで画像を埋め込む 2021年1月更新(jQuery 使用) 今や多くの人が毎日チェックしているInstagram。ブログやホームページにInstagramのフィードを埋め込んだりすると見栄えがグッと上がりますよね。 WordPressを使ってる...

プログラミングに詳しくなくてもできるように説明していくので、最後までぜひ読んでください。

本記事の内容
  • Instagram APIの取得の概要の紹介
  • Google スプレッドシートの準備について
  • Google App Script(GAS)の記述について
目次

①Facebook for DevelopersでInstagramのAPIを取得する

1.アカウントをビジネスアカウントにする

以前の記事で紹介した方法と同じですが、まずはInstagramのアカウントをビジネスアカウントにします。

2.長期アクセストークンを取得する

そして、Facebook for DevelopersでAPIを取得します。

取得の方法は下記サイトがわかりやすいです!

ネイビーモバイル
Instagram Graph APIの使い方とサイトに埋め込む方法 v5.0対応【2020年3月最新版】 | 西尾市・岡崎市・名... インスタグラムの投稿をホームページに埋め込む方法をご紹介します。2019年11月時点 グラフAPI v5.0対応の最新版。アカウントの取得からアクセストークン取得、サイトへの...

アクセストークンを取得するときに、アクセス許可の項目は下記を選びます。

前回のときと許可項目が違うので要チェックです。
instagram-apiのアクセス許可

ステップとしては下記の部分になります。

ネイビーモバイル
Instagram Graph APIの使い方とサイトに埋め込む方法 v5.0対応【2020年3月最新版】 | 西尾市・岡崎市・名... インスタグラムの投稿をホームページに埋め込む方法をご紹介します。2019年11月時点 グラフAPI v5.0対応の最新版。アカウントの取得からアクセストークン取得、サイトへの...

実際にAPIを叩くと、このようなデータが出てきます。

instagram-apiの結果

フォロワー数や投稿数が取得できているのでOKです。

②自動でデータをためるGoogle スプレッドシートを用意する

APIのデータを自動でためるために、Googleスプレッドシートを用意します。

1つのスプレッドシートに、2枚のシート(「Follower」・「Contents」という名前のシートを)作成します。

「Follower」の方にはフォロワーの数の推移と投稿数を記録し、「Contents」の方にはリーチ数、インプレッション数、プロフィール閲覧数の推移を記録します。

シートのは後に記述するスクリプト内で指定をしているので、名前は「Follower」「Contents」(半角・1文字目は大文字)で固定してください。

1行目は見出しにしておきます。

次のステップでスクリプトを書いていく上で、スプレッドシートのIDが必要なのでメモしておきましょう。

スプレッドシートIDはURLのこの部分です。

googleスプレッドシートのID

※スプレッドシート自体の名前は何でもOKです。(上の例では「Photo」としています)

③Google Apps Script(GAS)でスクリプトを記述する

APIからのデータをGoogleスプレッドシートにデータを記述するため、Google Driveで使用するGoogle Apps Script (GAS)を使用します。

GASはGoogle Driveのここにあります。

Google Apps Scriptの開き方

フォロワー数の取得用のスクリプトと、インサイトの推移のスクリプトをそれぞれ別に記述していきます。

「Follower」用のスクリプト

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

  //instagram数値記録用のスプレットシートID
  var SSId = '【スプレッドシートID】';

  //instagram Graph API 必要情報
  var instragramID = '【ビジネスID(数字)】';
  var username = '【インスタのID】;
  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;
}

「Contens」用のスクリプト

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

 //instagram数値記録用のスプレットシートID
 var SSId = '【スプレッドシートのURL】';
 

 //instagram Graph API 必要情報
 var instragramID = '【ビジネスID(数字)】';
 var username = '【インスタのID】';
 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;
 } 

スクリプトの記述が完成したら、実際に実行してみてGoogle スプレッドシートに記載されているか確認しましょう。

実行するときに、それぞれFollowerの方は「reporting」を、「Insight」の方は「insight_reporting」を実行してください。

スクリプトはこちらの記事を参考させていただきました。

Qiita
Instagram Graph APIとGAS(Google Apps Script)を使ってインスタグラムのフォロワー数を自動的に日々記録... #注意この記事を書いたのは2019年です。GASのソースはともかく、FacebookのAPIについては仕様変化が目まぐるしく、最新版の仕様はこのページの内容と異なっています。(API...

トリガーを設定する

毎日1回このスクリプトを自動で実行させたいので、その設定をします。

左の時計のマークの「トリガー」を選択します。

右下より「トリガーを追加」を選択して設定を行います。

トリガーの設定

「Follower」と「Contents」のそれぞれのスクリプトを実行する必要があるので、トリガーは2つ作成します。

トリガーの設定2

それぞれのスクリプトを実行する時間を決めます。僕は午前8時〜9時を指定しています。

④Google スプレッドシートを調整する

上記の設定が完了すると、「Follower」「Contents」がそれぞれ自動更新されるようになります。

このままでもいいのですが、デイリーの進捗を追っていくのは少し見づらいですよね。

そこで、このシートを生かしたまま、2枚のシートをまとめたシートを作成しておきましょう。

  1. まとめ用のシートを作成する
  2. それぞれのシートのデータを引用する
  3. 投稿した日付に色を付ける

①まとめ用のシートを作成する

③で作成した「Follower」と「Contents」をまとめるシートを作成します。

このシートのタイトルは何でもOKです。

今回は「まとめ」とします。

②それぞれのシートのデータを引用する

「まとめ」のシートにそれぞれ下記のような項目を作成します。

Googleスプレッドシートの作成

そして、シートのデータを引用する関数を記述します。

エクセルと同様、「=シート名!セル番号」で引用ができます。

Googleスプレッドシート関数例
数式の入れ方の例

③投稿した日付に色をつける

投稿のタイミングでフォロワーがどう動いたかは把握しておきたいですよね。

今回は投稿数の差分をもとに、投稿した日付を色付けします。

Googleスプレッドシート色分け設定

投稿数の横に差分の列を追加します。「前日-今日」の数を出す例(例:=D3-D2)を入れます。

そして、日付のところに条件付き書式設定を上記のように行います。 (差分(E列)が1以上のときに色を付ける設定です)

こうすることで、投稿日もすぐに分かるようになります。

早めに自動化の設定を!

Instagramが保持しているデイリーデータは毎日更新されてしまうので過去にさかのぼって取得することは難しそうです。

ですので、上記の自動化の設定は早めに行っておくとよいでしょう。

最後まで読んでいただきありがとうございました。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次