Google AnalyticsでページのURL一覧から特定期間のPVを自動で集計する方法

Google AnalyticsでPVやVisitを確認する時に今月追加したページのPVを集計しなければいけない作業があって、特定のページの定点観測はページ上でできるのだけれども、毎月違うページの一覧のPVリストを出す場合、フィルタにページのパスを1個ずつ入れてPVをコピペするという超手作業するしかわからなかったので、APIとスプレッドシートを組合わせて自動で一覧を作れるようにしてみた。

用意したもの
Analyticsで使っているGoogleのアカウント
PVを取得したいページのURLリスト

1.Google Driveで新規スプレッドシートを作成
Google Drive
作成から新規スプレッドシート、適当な名前で保存

2.スクリプトの編集に入る
上部のテキストメニューから、ツール → スクリプトエディタ で編集画面が別ウィンドウで開く
アプリケーションの起動画面のようなものが出るので、空のプロジェクトを作成を選択。
適当な名前をつけて保存する。

3.スクリプト側でAPIの接続を設定する
上部のテキストメニューから リソース → Googleの拡張サービス。
出てきたウィンドウでGoogle Analytics APIを有効(ON)にして「OK」する。
「OK」以外で閉じるとONにしたのが保存されないので注意。
「コンソールでも有効にしてください」というリンクがあるのでクリック

4. Google Developers ConsoleでAPIを有効にする
開いた別ページでAnalytics API をONに変更

5.スクリプト書く
最初に勝手に
function myFunction(){}
という記述が入っているので、とりあえず削除。
(もちろんそのまま使ってもいいが)

基本はこちらのサイトを参考にコピペさせてもらった。
Web屋に朗報!Google Analyticsとスプレッドシート&Excelでサイト分析を自動化する方法

こちらで紹介されているスクリプトは特定のキーワードからの流入をを日毎に集計するというスクリプトだったので、URLごとのPVを気管内に集計したリストを出すように変更した。


function runDemo() {
  var profileId = ビューID;           //ビューID
  var tableId = 'ga:' + profileId;
  var startDate =  '2014-04-02'//getLastNdays(14); // 参考コードでは直近何日前からという指定をする関数を使っていたが自分は直接指定
  var endDate = '2014-05-01' //getLastNdays(0); // 参考コードでは何日前までという指定をする関数だったが、自分は直接指定
  var pageurls= Array(
    		'/test1/test1.html',
		'/test2/test2.html'
  ); // 取得したいページのパスのリストを'で囲って羅列,区切り 最終行に,を入れないように注意。パスは/で始まるように。
  var optArgs;
  var results = new Array();
  for(var i = 0; i < pageurls.length; i++){
    var qpath = 'ga:pagePath==' + pageurls[i];
    optArgs = {
      'dimensions': 'ga:pagePath', //取得するディメンション
      'filters': qpath  // 取得したいキーワード
    };
    results[i] = Analytics.Data.Ga.get(
      tableId,                  // Table id (format ga:xxxxxx).
      startDate,                // Start-date (format yyyy-MM-dd).
      endDate,                  // End-date (format yyyy-MM-dd).
      'ga:pageviews', // Comma seperated list of metrics.
      optArgs );
  }
  outputToSpreadsheet(results,pageurls);
}
  
//
function getLastNdays(nDaysAgo) {
  var today = new Date();
  var before = new Date();
  before.setDate(today.getDate() - nDaysAgo);
  return Utilities.formatDate(before, 'GMT', 'yyyy-MM-dd');
}
  
function outputToSpreadsheet(results,pageurls) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
  // Print the headers.
  for(var j = 0; j< pageurls.length; j++){
    if(j==0){
      var headerNames = [];
      for (var i = 0, header; header = results[j].getColumnHeaders()[i]; ++i) {
        headerNames.push(header.getName());
      }
      sheet.getRange(1, 1, 1, headerNames.length).setValues([headerNames]);
    }
    // Print the rows of data.
    var startrange = 2+j;
    sheet.getRange(startrange, 1, 1, headerNames.length).setValues(results[j].getRows());
  }
}


6.実行する
関数を選択でrunDemoを選択して、左の三角マークで実行。
許可を求められるので、OKすると実行される。

・引数がついてURLがユニークにならないものが取得できない
・取得するものがなかった場合エラーになる
上記2点が課題