LoginSignup
7
7

More than 5 years have passed since last update.

GAとredashの数字をGASでまとめて扱う

Last updated at Posted at 2017-09-12

やりたいこと

  • redashとGAの数字がスプレッドシート上でまとめてみたい
  • 上記の数字を毎日Slackに通知したい

使用するもの

  • GoogleAnalytics
  • SpreadSheet
  • SpreadsheetのGAアドオン
  • GoogleAppScript
  • redash(API含む)

手順

1. GAの数値を取得するスプレッドシートを用意する

スプレッドシートにはGAのアドオンが用意されているので、それを使ってまずは必要な数値を取得します。

スクリーンショット 2017-09-12 11.34.53.png

2. 日別で集計するスプレッドシートを用意する

1で作成したスプレッドシートの必要な箇所を参照するようにします。
※画面のIMPORTRANGEの部分参照
※redashのシートは3移行で説明します。

スクリーンショット 2017-09-12 11.40.52.png

3. GoogleAppScriptで必要な処理を実装

スプレッドシートのメニューから「ツール>スクリプトエディタ」の順に選択し、エディタを起動します。
ここで作成したスクリプトを毎日決まった時間に実行します。

  • スプレッドシートからGAの前日数値を取得
  • redashのAPIを使って数値を取得
  • redashの数値をスプレッドシートに書き込み(2.で作成したシート)
  • SlackにGAとredashの数値を通知
function myFunction() {
  // GA
  var ga_message = gaReport();
  // re:dash
  var redash_message = redashReport()

  // Slackへの通知
  var data = {
    "channel": "#test", 
    "username": "muscle", 
    "text": ga_message + "\n" + redash_message, 
    "icon_emoji": ":icon:"
  };
  var payload = JSON.stringify(data);
  var options = {
     "method":"POST",
     "payload":payload
  };
  var res = UrlFetchApp.fetch("https://hooks.slack.com/services/hogehoge", options);
}

// GAの数値を取得
function gaReport() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GA数値集約");
  var data = sheet.getDataRange().getValues();

  // 前日のデータ
  var date = Utilities.formatDate(data[1][0], 'Asia/Tokyo', 'M月d日');
  var dl = data[1][1];
  var dau = data[1][2];
  var mau = data[1][3];

  // 前々日のデータ
  var old_dl = data[2][1];
  var old_dau = data[2][2];
  var old_mau = data[2][3];

  var ga_message = "おはようございます!" + date + "のレポートをお伝えします!\n\n";
  ga_message += "DL数は" + dl + "(前日比" + Math.floor(dl/old_dl*100) + "%)\n";
  ga_message += "DAUは" + dau + "(前日比" + Math.floor(dau/old_dau*100) + "%)\n";
  ga_message += "MAU数は" + mau + "(前日比" + Math.floor(mau/old_mau*100) + "%)\n";

  return ga_message;
}

// redashの数値を取得
function redashReport() {
  // redashのクエリ番号
  var query_nums = [
    1, // 前日売上
    2, // 当月売上
    3  // チケットの利用枚数
  ];

  // basic認証回避
  var headers = {'Authorization' : "Basic hogehoge"};
  var params = {
    'headers': headers,
    'method': "get"
  };

  // sheet取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("re:dash数値集約");
  var redash_message = "";

  // 新しく入力する行数を取得
  var new_row = sheet.getLastRow() + 1;
  var data_start_column = 2;
  var date = new Date();
  sheet.getRange(new_row, 1).setValue((date.getFullYear()) + "/" + (date.getMonth() + 1) + "/" + (date.getDate() - 1));

  query_nums.forEach(function(num) {
    var url = "https://redash.jp/api/queries/" + num + "/results.json?api_key=hogehoge";
    var response = UrlFetchApp.fetch(url, params);
    var ret = JSON.parse(response.getContentText());
    var row = ret.query_result.data.rows[0];
    for (key in row) {
      redash_message += key + "" + row[key] + "\n";

      // スプレッドシートにデータ書き込み
      sheet.getRange(new_row, data_start_column).setValue(row[key]);
    }
    data_start_column++;
  });

  return redash_message;
}

まとめ

GASは手軽に実装できる反面、どこで何が動いているかわからなかったり、デプロイの手順が煩雑になったり、チームで開発するときにはいくつか問題になることがあります。
とはいえ、GASをgit管理する方法などは存在するので、属人化しないようにきちんとルールを使って運用していきたいですね。

7
7
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
7
7