スプレッドシートで指定したパスのPVを、自動でGoogleAnalyticsからとってくる

# 用途

サイト全体のPVを自動で抜いてくるぐらいなら、スプレッドシートのアドオンでGAのやついれれば良いんですが、
（参照：[http://bnbrd.net/automation-by-google-analytics-and-spreadsheet/](http://bnbrd.net/automation-by-google-analytics-and-spreadsheet/)）
個別のURLのものを取ってくるだとか、イベントラベルのものをとってくるだとかは、いちいち書いてるとReport Configurationがめっちゃ乱雑になってしまうので、一括でとってきちゃいましょう。


# 完成イメージ

このリストに記事の相対パス（GAが相対パスで見てるので）を書いてあげると
<img width="277" alt="スクリーンショット 2015-11-17 23.18.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/ccd3fabc-0ee1-f79f-576d-3a6b07a08c47.png">


こうなってほしい！
<img width="1013" alt="スクリーンショット_2015-11-17_23_18_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/5a177c1e-6d9f-e98c-a7b6-a79b775704a4.png">


# 作り方
## Analytics APIを有効にしてあげる
<img width="881" alt="スクリーンショット_2015-11-18_10_21_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/3285d17b-4757-b988-0617-4657f632dd6d.png">


<img width="883" alt="スクリーンショット_2015-11-18_10_21_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/63d67246-5cfb-7e4a-03cc-91325c219256.png">


<img width="1410" alt="スクリーンショット_2015-11-18_10_22_45.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/737523a0-dc51-13d9-50d2-208539ec82ca.png">

画像の順にたどっていった先で、AnalyticsAPIを有効にします。

## コード
```js:analytics.gs
function analytics() {
  var PROFILE_ID = "ga:hoge"; // GAのID
  var END_DATE_OFFSET = 1; // 何日前までのデータとってくるか
  var SHEET_URL = "https://docs.google.com/spreadsheets/d/hogehoge"; // 対象のスプレッドシートのURL
  var SHEET_ID = "0"; // 対象のシートのid（スプレッドシートの末尾についてるやつ）
  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var dsheet = spreadsheet.getSheetByName("hoge"); // URLを書き込むほうのシート名
  var nsheet = spreadsheet.getSheetByName("hoge"); // PVを書き出すほうのシート名
  
  var startrow = 2;
  var startcol = 1;
  var lastrow = dsheet.getLastRow();
  var lastcol = 1;
  
  var metrics = "ga:pageviews";
  var today = new Date();
  var yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
  var startDate =  "2015-11-01"; // いつの日からの数値取ってくるか
  var endDate = Utilities.formatDate(yesterday, Session.getTimeZone(), 'yyyy-MM-dd');
  
  var sheetdata = dsheet.getSheetValues(startrow, startcol, lastrow-1, lastcol);
  
  for ( var i in sheetdata ) {
    if ( sheetdata[i][0] == "" ) break;   
    var fil = "ga:pagePath=~" + sheetdata[i][0];
    var optArgs = {
      'dimensions': 'ga:date',
      'filters': fil,
    };
    
    var ga = Analytics.Data.Ga.get(PROFILE_ID, startDate, endDate, metrics, optArgs).rows;
    var header = ["日付", sheetdata[i][0]]; // 後から付けてもいい
    ga.unshift(header);
    
    for ( var j in ga ) {
      ga[j].reverse().pop();
    }     
    var trans_ga = transpose(ga); // 行列変換

    nsheet.getRange(2+Number(i), 1, 1, ga.length).setValues(trans_ga);
  }
}

// 行列を変換してる（横向きに数値を出してほしいらしいので）
function transpose(a) {
  return Object.keys(a[0]).map(function (c) {
	return a.map(function (r) {
	  return r[c];
	});
  });
}
```

# トリガーのセット
何をしたときに、このスクリプトが叩かれるのかを設定します。


<img width="1129" alt="スクリーンショット_2015-11-18_10_34_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/bdf624f4-21b7-a6c6-25ab-2ba7aa7285ab.png">


<img width="1130" alt="スクリーンショット_2015-11-18_10_34_40.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/fd028bdb-b21c-90c6-5e5f-1de70769fc91.png">

# ちなみに
少しいじるとイベントラベルの数字もとってこれます。
（metricsをtotalEventsにして、ラベル名でフィルターかけてます。）

<img width="424" alt="スクリーンショット 2015-11-18 10.40.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/f99e8003-f52b-6ec2-842b-a175253d298d.png">


<img width="809" alt="スクリーンショット_2015-11-18_10_40_25.png" src="https://qiita-image-store.s3.amazonaws.com/0/41622/b4fa14c7-58b2-eb2c-a0ca-c13b2f53b5a0.png">