この記事を読むのに必要な時間は約 14 分です。
今年の3月末からインスタグラムを始めました。
このブログのカテゴリの一つとして『カメラ』があるのでその延長線上です。
インスタグラムはもともと自分のアカウントを持っていましたが、どうせなら「フォロワーを増やすことを目標に運用しよう」と思ってブログ用にアカウントを新設しました。
フォロワーを増やすことが目的だと、やはり気になるのがフォロワーの推移。
そこでGoogle Apps Script(GAS)とスプレッドシート(Spreadsheet)を使って定期的に指定したアカウントのフォロワー数、フォロー数、投稿数を取得するプログラムを作成しました。
スプレッドシートに書き出すので推移をグラフに書き出すことも簡単です。
フォロワー数の推移をグラフで確認可能
まず、どんなんができんの?ってとこが気になるかと思うので、実際にグラフにしたものを貼っておきます。
実際に最初からちゃんと取っておけば後半のギザギザっとなっているような細かい推移が全部取れます。
インスタグラム自動計測プログラムの作成方法
自動計測の設定は簡単で以下の3ステップです。
(プログラムの知識が無い方でも基本コピペでOKです。)
- 新規スプレッドシートの作成
- Google Apps Script(GAS)の作成
- GASのスケジュールを設定
1.新規スプレッドシートの作成
まず、Googleドライブ上から新規のスプレッドシートを作成します。
「新規」ボタンをクリックするか、「右クリック」から新規スプレッドシートを作成します。
スプレッドシートが作成できたら、適当な名前をつけて「target」という名称のシートを作成してください。
このシートでフォロワー数などをチェックするアカウント名を管理します。
早速自分のアカウント名を記載しておきましょう!
複数のアカウントを運営していたり、計測したいアカウントが複数ある場合はA列にアカウント名を記載しておけば複数アカウントの計測が可能です。
ここまでできればスプレッドシート側での作業は完了です。
2.Google Apps Script(GAS)の作成
スプレッドシートのメニューの「ツール」から「スクリプトエディタ」をクリックすると新規GASが作成できます。
GASが開いたら適当に名前をつけてから、以下のソースを貼り付けます。
新規作成時に元からある「myFunction」は消しちゃって大丈夫です。
※2018/08/20 ソースコードのリファクタリングを行いました。
function checkReport() {
//チェックを行うユーザーIDを取得
try {
var targetList = getTargetList();
//データを記録していく
for (var i = 0; i < targetList.length; i++){
insertReportData(targetList[i]);
}
} catch (e){
Logger.log(e);
}
}
function getTargetList() {
try {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('target');
var data = sheet.getDataRange().getValues();
var targetList = [];
for(var i=0; i < data.length; i++){
targetList.push(data[i][0]);
}
return targetList;
} catch(e) {
throw(e);
}
}
function insertReportData(userId) {
try {
var data = getData(userId);
var sheet = "";
// 記録用スプレッドシートの取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
for(var i=0; i < sheets.length; i++){
if(userId == sheets[i].getName()){
sheet = spreadsheet.getSheetByName(userId);
}
}
if(sheet == ""){
spreadsheet.insertSheet(userId);
sheet = spreadsheet.getSheetByName(userId);
sheet.appendRow(['日時','フォロワー数','フォロー数','ポスト数']);
}
var lastRow = sheet.appendRow(data);
} catch(e) {
throw(e);
}
}
function getData(userId) {
try {
var url = "https://www.instagram.com/" + userId;
var content = getContent(url);
var json = content.match(/window._sharedData = (.*?);<\/script>/)[1];
var jsonData = JSON.parse(json);
//実行日付
var today = new Date();
//フォロワー数
var followers = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_followed_by']['count'];
//フォロー数
var followings = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_follow']['count'];
//ポスト数
var posts = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['count'];
var result = [today,followers,followings,posts];
return result;
} catch(e) {
throw(e);
}
}
//requetがエラーになることがあるため、取得するまでwhile
function getContent(url) {
while(true){
try {
var request = UrlFetchApp.fetch(url)
var content = request.getContentText('UTF-8');
return content;
} catch(e) {
Logger.log(e);
continue;
}
}
}
コードを貼り付けたら保存してから早速実行します。
赤枠で囲ったコンボボックスから「checkReport」を選択し、三角の実行ボタンをクリックしてください。
最初は以下のようなポップアップが表示されるので、「許可を確認」をクリックしてください。
すると以下のように警告画面が表示されるので「詳細」をクリックしてください。
続いて、「”スクリプト名”に移動」をクリックしてください。
次でラストです。「許可」をクリックします。
ここでようやくGASが実行されます。
処理が完了したら最初に作成したスプレッドシートを確認してください。
アカウント名のシートが作成され、そこに日時、フォロワー数、フォロー数、ポスト数が記録されているはずです。
何度かGASを実行すると実行するたびに行が追加されていきます。
動作が確認できたのでこれを定期的に自動で実行されるようにGASのスケジュールを設定していきます。
3.GASのスケジュール設定
GASのメニューバーから時計マークをクリックしてください。
トリガー設定一覧が表示されますが、現在は未設定なので青文字をクリックして設定を追加します。
「checkReport」を好きな間隔で実行するように設定して「保存」をクリックします。
以上でスケジュール設定も完了です。
画面の例でいうと、6時間ごとにこのスクリプトが自動で実行され、対象アカウントのフォロワー数、フォロー数、ポスト数が自動でスプレッドシートに追加されていきます。
このように簡単にデータを取得できるのでフォロワー数の推移を見てみたい人はぜひやってみてください。
実行してもうまく行かない場合
たまに問い合わせを受けるのでトラブルシューティングとして記載しておきます。
ログに何か表示されていないか
GASは実行時にログを出力することが可能となっており、本ソースはエラーが発生した場合にログに出力するようになっています。
そのため、一度ログの内容を確認してみてください。
GASのメニュー「表示 > ログ」から確認可能です。
時間を開けて実行してもうまく行かないか
インスタグラムへのリクエストはエラーになることが多々あります。
そのため、ソース上でもリトライ処理は入れていますがうまく行かないときはタイムアウトエラーになることがあります。
そんなときは時間を置いてから実行してみてください。
連続でエラーで弾かれると一定時間IP規制的なものが行われている気がするので数回実行してダメだったら一度時間を置いてください。
スプレッドシートのtargetシートのA列以外に値を記載していないか
targetシートのA列にデータを取得するユーザーIDの記載をしますが、それ以外の列には値を記載しないようにしてください。
記載された値をユーザーIDとして読みにいって落ちることがあります。
またユーザーIDは@をつけないで記載してください。
スプレッドシートが取得できていない場合はシートをID指定にしてみる
スプレッドシートからスクリプトエディタでGASを作成する場合、自動的にシートとGASが紐づいているため、ソース内に記載の「げtActivesheer」でシートの取得が可能なはずですが、たまにシートが取得できないことがあるようです。
その場合にはスプレッドシートのIDを指定してあげると上手く行くことがあります。
var spreadsheet = SpreadsheetApp.
getActiveSpreadsheet();
↓
var spreadsheet = SpreadsheetApp.openById(‘スプレッドシートのID‘ );
スプレッドシートのIDはスプレッドシートを開いているURLの以下の部分です。
https://docs.google.com/spreadsheets/d/‘スプレッド
シートのID‘ /edit