やりたいこと
- redashとGAの数字がスプレッドシート上でまとめてみたい
- 上記の数字を毎日Slackに通知したい
使用するもの
- GoogleAnalytics
- SpreadSheet
- SpreadsheetのGAアドオン
- GoogleAppScript
- redash(API含む)
手順
1. GAの数値を取得するスプレッドシートを用意する
スプレッドシートにはGAのアドオンが用意されているので、それを使ってまずは必要な数値を取得します。
2. 日別で集計するスプレッドシートを用意する
1で作成したスプレッドシートの必要な箇所を参照するようにします。
※画面のIMPORTRANGEの部分参照
※redashのシートは3移行で説明します。
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管理する方法などは存在するので、属人化しないようにきちんとルールを使って運用していきたいですね。