Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

用途

サイト全体の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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away