GoogleAppsScript( GAS )でアナリティクスのデータをスプレッドシートに毎日書き込み!

google

Query Explorer

Query Explorerでは、アナリティクスから抽出したいデータをみることができるもので、みたいアナリティクスのgoogleアカウントでログインしてください。

GoogleAppsScript(GAS)のコード

function getGaDataPrevDay() {
  
  //-------日時データの取得-----------
  // 昨日の日付を取得する
  var date = new Date();
  date.setDate(date.getDate() - 1);
  
  //年度を取得する
  var year = date.getFullYear();
  
  //曜日を取得する
  var ary = ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'];
  var weekDayNum = date.getDay();//曜日番号の取得
  var weekDay = ary[weekDayNum] ;
  
  //-------GAデータ-----------
  // GAからデータを取得する関数の定義
  function getGaData(startDate, endDate) {
    var gaData = Analytics.Data.Ga.get(
      'ga:XXXXXXXXXXX', //Query Explorer の 「ids」 を入れてください
      startDate,
      endDate,
      'ga:pageviews, ga:sessions, ga:users, ga:newUsers,ga:bounceRate,ga:exitRate,ga:avgSessionDuration,ga:pageviewsPerSession, ga:totalEvents'
    ).rows;
    
    return gaData;
  }
  
  // 戻り値(指定期間)を指定し、関数を実効
  var gaData = getGaData('yesterday', 'yesterday');
  
  //-------スプレッドシートへの書き込み-----------
  // 書き込むシートを選択する
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  
  
  // 月が変わった場合新規シート作成
  var month = date.getMonth() + 1;
  var yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);


   if (spreadSheet.getSheetByName(year +"/"+ month +"_Daily") == null) {
    var sheetName = year +"/"+ month +"_Daily"
    spreadSheet.insertSheet(sheetName);
    
    var sheet = spreadSheet.getSheetByName(sheetName);
    Utilities.sleep(1000);
    
    sheet.getRange(1,1).setValue('年');
    sheet.getRange(1,2).setValue('日');
    sheet.getRange(1,3).setValue('曜日');
    sheet.getRange(1,4).setValue('PV数');
    sheet.getRange(1,5).setValue('セッション数');
    sheet.getRange(1,6).setValue('ユーザー数');
    sheet.getRange(1,7).setValue('新規ユーザー数');
    sheet.getRange(1,8).setValue('直帰率');
    sheet.getRange(1,9).setValue('離脱率');
    sheet.getRange(1,10).setValue('平均ページセッション');
    sheet.getRange(1,11).setValue('ページ/セッション');
    sheet.getRange(1,12).setValue('イベント回数');
    
    
  } else {
    var sheet = spreadSheet.getSheetByName(year +"/"+ month +"_Daily"); 
  }
  
  var lastRow = sheet.getLastRow()+1;
  //最終行+1行目を追加
  sheet.insertRows(lastRow);
  
  //追加した行に書き込む
  sheet.getRange(lastRow, 1).setValue(year);
  sheet.getRange(lastRow, 2).setValue(date);
  sheet.getRange(lastRow, 3).setValue(weekDay);
  sheet.getRange(lastRow, 4).setValue(gaData[0][0]);
  sheet.getRange(lastRow, 5).setValue(gaData[0][1]);
  sheet.getRange(lastRow, 6).setValue(gaData[0][2]);
  sheet.getRange(lastRow, 7).setValue(gaData[0][3]);
  sheet.getRange(lastRow, 8).setValue(gaData[0][4] + "%\n");
  sheet.getRange(lastRow, 9).setValue(gaData[0][5] + "%\n");
  sheet.getRange(lastRow, 10).setValue(gaData[0][6]/60);
  sheet.getRange(lastRow, 11).setValue(gaData[0][7]);
  sheet.getRange(lastRow, 12).setValue(gaData[0][8]);
  
  //-----セルのフォーマット指定-------
  //日時データのフォーマット
  var FormatDate = sheet.getRange("B:B").setNumberFormat("MM/DD");
  //直帰率
  //var FormatBounceRate = sheet.getRange("H:H").setNumberFormat("0.00%");
  //滞在時間
  var FormatDuration = sheet.getRange("J:J").setNumberFormat("#,##00.00");
  //ページ/セッション
  var FormatPageSession = sheet.getRange("K:K").setNumberFormat("#,##0.000");
}

コードは、やすのりさんのをベースにしました。(やすのり(@98nasi_nori))
大変詳しく説明くださっていますので、コードをみて何をしているのかよくわからなければ一度ご覧になって下さい!

加筆した部分は、

// 月が変わった場合新規シート作成
  var month = date.getMonth() + 1;
  var yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  
   if (spreadSheet.getSheetByName(year +"/"+ month +"_Daily") == null) {
    var sheetName = year +"/"+ month +"_Daily"
    spreadSheet.insertSheet(sheetName);
    
    var sheet = spreadSheet.getSheetByName(sheetName);
    Utilities.sleep(1000);
    
    sheet.getRange(1,1).setValue('年');
    sheet.getRange(1,2).setValue('日');
    sheet.getRange(1,3).setValue('曜日');
    sheet.getRange(1,4).setValue('PV数');
    sheet.getRange(1,5).setValue('セッション数');
    sheet.getRange(1,6).setValue('ユーザー数');
    sheet.getRange(1,7).setValue('新規ユーザー数');
    sheet.getRange(1,8).setValue('直帰率');
    sheet.getRange(1,9).setValue('離脱率');
    sheet.getRange(1,10).setValue('平均ページセッション');
    sheet.getRange(1,11).setValue('ページ/セッション');
    sheet.getRange(1,12).setValue('イベント回数');
  } else {
    var sheet = spreadSheet.getSheetByName(year +"/"+ month +"_Daily"); 
  }

月が変わったら自動的に新しいシートを作ってデータを記述するようにしました。
簡単には確認したのですが、まだ実際には月を跨いでいないのでもしかすると不具合があるかもしれませんのであしからず。。

コメント

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