Google Analyticsの前日レポートを毎日Slackに自動投稿する<その2>(GoogleAnalytics + Google Apps Script(GAS)+ LogicApps + Slackの連携)

Pocket

gas-logicapp-ttl
前回はGoogleスプレッドシートの設定をしました。今回は「Google Apps Script(GAS)の設定」です。
GASに関しては全面的に@daichan4649 さんに作成いただきました。
本当に本当にありがとうございましたぁあ!!(土下座)

というわけで、「Google Apps Script(GAS)の設定」について手順をメモ。

Google Apps Script(GAS)とは?

「Google Apps Script(GAS)」は、Google製のサービスのプログラム環境。GASはJavaScript互換の本格的なサーバーサイドのスクリプト言語です。簡単なスクリプトを記述し、Googleのサーバーで実行することで、Googleが提供する各種のサービスを操り、独自のWebアプリを実現できます。GASはもともとGoogle Appsのためのスクリプト環境でしたが、Googleアカウントがあり、GoogleドライブやGoogleスプレッドシートなどが利用できれば、すぐにでも使えます。(「Google Apps Scriptのキホンと使い方」より抜粋)

今回はこのGASで「GoogleスプレットシードにGoogleアナリティクスから自動で書き出すデイリーレポートをJSON形式で出力する」というプログラムを作成していただきました。

Google Apps Script(GAS)の設定

前回作成したGoogleスプレッドシートを開きます。

gas-logicapp01
メニュー部の「ツール」→「スクリプトエディタ」をクリック

gas-logicapp02
このような画面が開きます。

gas-logicapp03
上部の「無題のプロジェクト」をクリックし、赤枠内に入力。
わかりやすい名前がオススメ。

gas-logicapp08
赤枠内に以下のコードの上部2カ所(URL_BOOK、SHEET_NAME)を書き換えてコピペ。

var URL_BOOK = 'https://docs.google.com/spreadsheets/d/[スプレッドシートのID]/edit?usp=sharing';
var SHEET_NAME = '[GoogleスプレッドシートのReportName]';

var ROW_NUM_TITLE = 15; // タイトル行(jsonの'key')

function doGet(e) {
  var json = createJson();
  Logger.log(json);

  return ContentService.createTextOutput(JSON.stringify(json))
    .setMimeType(ContentService.MimeType.JSON);
}

function createJson() {
  var url = URL_BOOK;
  var sheetName = SHEET_NAME;
  var book = SpreadsheetApp.openByUrl(url);
  var sheet = book.getSheetByName(sheetName);
  var json = convertSheet2Json(sheet);
  Logger.log(json);
  return json;
}

function convertSheet2Json(sheet) {
  // title
  var rowNum = ROW_NUM_TITLE;
  var firstRange = sheet.getRange(rowNum, 1, rowNum, sheet.getLastColumn());
  var firstRowValues = firstRange.getValues();
  var titleColumns = firstRowValues[0];

  // data(1行分)
  var rowValues = [];

  // 取得範囲を変更したい場合は rowIndex(開始行) を変更する。
  var lastRow = sheet.getLastRow(); // 最終行

  for(var rowIndex=lastRow; rowIndex<=lastRow; rowIndex++) {
    var colStartIndex = 1; // A
    var rowNum = 1; // 1行分
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn());
    var values = range.getValues();
    rowValues.push(values[0]);
  }

  // create json
  var jsonArray = [];
  for(var i=0; i<rowValues.length; i++) {
    var line = rowValues[i];
    var json = new Object();
    for(var j=0; j<titleColumns.length; j++) {
      json[titleColumns[j]] = line[j];
    }
    jsonArray.push(json);
  }
  return jsonArray;
}

書き換える部分ですが[スプレッドシートのID]は、もしGoogleスプレッドシートのURLが以下の形だったら

https://docs.google.com/spreadsheets/d/ABCD123456/edit#gid=12345678

ABCD123456の部分になります。

gas-logicapp04
赤枠内の▼をクリックしてファイル名も変更しておきます。(今回は「code」としました)

gas-logicapp05
「公開」→「ウェブ アプリケーションとして公開」をクリック

gas-logicapp06
プロジェクトバージョンのところに「1」と入力。
赤枠内のように選択して、導入ボタンをクリックして承認。これでGASがデプロイされます。

gas-logicapp07
もう一度「ウェブ アプリケーションとして公開」をクリックすると、このような表示になります。
現在のウェブ アプリケーションのURLをコピー。

ChromeのシークレットモードでURLにアクセスしてみて、上記のような形のJSONが出力されているか確認してみてみます。

[{"ga:date":"2017-02-13T15:00:00.000Z","ga:users":XX,"ga:newUsers":XX,"ga:sessions":XX,"ga:goal1Completions":XX,"ga:pageviews":XX}]

※エラーが出る場合はGoogleスプレッドシートがキチンと共有になっているか確認してください。

これでGASの設定は完了です。

最後に

今回は私がGASがわかってないため、@daichan4649 さんを最後まで付き合わせてしまったという。身近にGASの神がいて本当によかった…。(泣)
POSTがいいとかGETがいいとか、色々注文ばっかで都度修正お願いしてホントすみませでした…。(大反省)
GASの不思議な振る舞い(権限や認証周りとか)を見る限り、結果的にLogicAppsとの兼ね合いもあって「GETがよさそう」という結論に至りましたが。
さて、次は最後「Logic Appsの設定」に移ります!

参考サイト

今回使用させていただいたGoogle Apps Script(GAS)の元コードはこちら
https://gist.github.com/daichan4649/a6fcfe0781dd078e0c1a3f44db63446b

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください