非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Google Apps ScriptでAnalyticsデータをスプレッドシート上に展開する方法

      2020/12/12

以前、PythonでAnalyticsデータを取得する方法について書きましたが、Google Apps Scriptでスプレッドシート上に展開する方法もあります。取得後のデータの取扱いを考えるとスプレッドシート上に書き込んだ方が良いのかもしれません。今回はその方法について紹介します。

 

完成イメージ

完成イメージは以下のとおりです。実行すると過去30日分のデータ(URL, タイトル, PV)をスプレッドシート上に書き込んでくれます。PVの降順で展開させています。

 

スクリプトエディタ上でAnalyticsAPIの有効化

まずはAnalyticsAPIの有効化が必要です。スクリプトエディタのメニューから「リソース」−「Googleの拡張サービス」を選びます。

 

リストの中から「Analytics Reporting API」を探し有効化します。これでAPIの有効化はOKです。Pythonのような外部からのアクセスに比べ超簡単ですね。

 

ソースコード

ソースコードは以下のとおりです。2行目にVIEW IDを入力してください。実行すると上で紹介したようにスプレッドシートに過去30日のPVが現れます。

GitHubにもアップしました。

function getAnalyticsData() {
  var viewId = "ga:" + "11*****63"; //VIEW_ID
  var sheet = SpreadsheetApp.getActive().getSheetByName('data');
  dt = new Date();
  var endDate = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy-MM-dd');
  dt.setDate(dt.getDate()-30);
  var startDate = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy-MM-dd');

  var response = AnalyticsReporting.Reports.batchGet({
    reportRequests: [{
      viewId: viewId,
      dateRanges: [{
        startDate: startDate,
        endDate: endDate
      }],
      metrics: [{
        expression: 'ga:pageviews',
      }],
      dimensions: [{'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}],
      orderBys: [{
        fieldName: 'ga:pageviews',
        //fieldName: 'ga:pagePath',
        sortOrder: 'DESCENDING'
      }],
      samplingLevel: 'LARGE',
      pageSize: '100000'
    }]
  });

  var json = JSON.parse(response);
  var data = json.reports[0].data;

  var dataset = [];
  var r = 2;
  data.rows.forEach(function(row) {
    var url = row.dimensions[0].replace(/\?.*$/g, '');
    var title = row.dimensions[1].replace(/\?.*$/g, '');
    var value = row.metrics[0].values[0];

    if(r>2) {
      var prevRow = dataset[dataset.length-1];
      var regUrl = url.replace(/\?.*$/g, '');
      var prevUrl = prevRow[0];
      if(prevUrl === regUrl) {
        r--;
        prevRow[1] = Number(prevRow[1]) + Number(value);
      } else {
        dataset.push([url, title, value]);
      }
    } else {
      dataset.push([url, title, value]);
    }
    r++;
  });

  sheet.getRange(2, 1, dataset.length, 3).setValues(dataset);
}
 

 

スポンサーリンク

 - Google Apps Script, Google Dirve