LoginSignup
13
14

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-17

用途

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

完成イメージ

このリストに記事の相対パス(GAが相対パスで見てるので)を書いてあげると
スクリーンショット 2015-11-17 23.18.28.png

こうなってほしい!
スクリーンショット_2015-11-17_23_18_58.png

作り方

Analytics APIを有効にしてあげる

スクリーンショット_2015-11-18_10_21_08.png

スクリーンショット_2015-11-18_10_21_58.png

スクリーンショット_2015-11-18_10_22_45.png

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

コード

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];
    });
  });
}

トリガーのセット

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

スクリーンショット_2015-11-18_10_34_13.png

スクリーンショット_2015-11-18_10_34_40.png

ちなみに

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

スクリーンショット 2015-11-18 10.40.17.png

スクリーンショット_2015-11-18_10_40_25.png

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14