Google Analyticsの結果を、Slackに通知する処理を作りました!
Google Apps Scriptを使っています!
ざっくりとした流れ
こんな感じのことをしています。
- Google Analyticsに情報を要求→取得
- 取得した情報を解析
- Google スプレッドシートに書き込み
- Slack用のテキストを作って投げる
Slackへ投げる処理については、こちらの記事を。
Googleのライブラリ
まずは使用するライブラリを入れていきます。
メニューバーから「リソース→Googleの拡張サービス...」を選択。
今回使うのはこの2つ。
- Google Analytics Reporting API v4
- Google Sheets API v4
デフォルトだとそれぞれ
- AnalyticsReporting
- Sheets
という変数名(というか多分クラス名)で使用することができます。
自作ライブラリ
ぼくは別スクリプトで、Google Apps Script→Spreadsheetを操作するためのライブラリを作ってあります。
Gas2SpreadSheetというライブラリです。
この中で、このような処理を作って、シートへの書き込みができるようにしてあります。
/** * アクティブシートの範囲書込します。 * * @param msgArr 書込文字列を入れた2次元配列 * @param startRow 書込開始行 * @param startCol 書込開始列 */ function writeRange(msgArr, startRow, startCol) { var sheet = SpreadsheetApp.getActiveSheet(); var rowRange = msgArr.length; var colRange = msgArr[0].length; sheet.getRange(startRow, startCol, rowRange, colRange).setValues(msgArr); }
スプレッドシートとスクリプトの作成
今回は取得した情報をスプレッドシートに蓄積したいと考えています。
なのでスプレッドシートを新規作成します。
このスプレッドシートの、スクリプトエディタを開いてスクリプトを新規作成します。
シートに書き込むための下準備の手間を考えると、この方法が楽ちん……
Google Analyticsのコード
それではコードを書いていきます。
/** * レポートの取得 */ function reportAnalytics() { var VIEW_ID = UserProperties.getProperty('GA-liszworks-ID'); getReport(VIEW_ID); } /** * Google Analyticsからレポート取得 * @param id Google AnalyticsのVIEW ID */ function getReport(id) { var report = AnalyticsReporting.Reports.batchGet({ "reportRequests": [ { 'viewId': id, 'dateRanges': [ { 'startDate': "2018-06-12", "endDate": "2018-06-18" } ], 'metrics': [ { 'expression': "ga:users", 'alias': "ユーザ数" }, { 'expression': "ga:sessions", 'alias': "セッション数" }, { 'expression': "ga:pageviews", 'alias': "PV数" }, { 'expression': "ga:adsenseRevenue", 'alias': "Adsense収益" }, { 'expression': "ga:CTR", 'alias': "Adsense CTR" }, { 'expression': "ga:bounceRate", 'alias': "直帰率" } ]/*, 'dimensions': [{ "name": "ga:datehour" }]*/ }] }); reportSummary(report); } /** * 現時点の解析結果をSlackへポスト * * @param report レポート(取得結果) */ function reportSummary(report) { var now = new Date();// 今日を取得 var today = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); var toDate = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd'); var text = toDate + " :report" + "\n"; var rep = report.reports[0]; // ベースとなるreports[]要素 var data = rep.data; var colHeader = rep.columnHeader; console.log(rep); var dataNum = data.rowCount; // データ行数 if ( dataNum ) { var values = data.rows[0].metrics[0].values; var userCnt = values[0]; var sessionCnt = values[1]; var pvCnt = values[2]; var adsRevenue = values[3]; var adsCTR = values[4]; var bounceRate = values[5]; var line; // ユーザー数 text += "user : " + userCnt + "\n"; // セッション数 text += "session : " + sessionCnt + "\n"; // ページビュー text += "pageview : " + pvCnt+ "\n"; // IMP数 text += "Adsense収益 : $" + adsRevenue+ "\n"; text += "AdsenseCTR : " + adsCTR + "% \n"; // 直帰率 text += "直帰率 : " + bounceRate+ "% \n"; // スプレッドシートへの書き込み var cellData = [ [ toDate, ''+userCnt, ''+sessionCnt, ''+pvCnt, ''+adsRevenue, ''+adsCTR, ''+bounceRate ] ]; Logger.log(cellData) Gas2SpreadSheet.writeRange(cellData, SpreadsheetApp.getActiveSheet().getLastRow() + 1, 1); console.log(text); } // Slackへのポスト用データをセット if (text != "") { var payload = { "text" : text, "channel" : "#my_notify", // Slackチャンネル名 "username" : "GA Report", //Slackで表示するユーザー名 "icon_url" : "https://hooks.slack.com/services/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" //アイコンの画像URL } postSlack(payload); } } /** * Slackポスト関数 * * @param payload ポスト詳細 */ function postSlack(payload) { var options = { "method" : "POST", "payload" : JSON.stringify(payload) } var url = profileId = UserProperties.getProperty('SlackNotifyChWebhookURL'); // SlackのWebHooks URL var response = UrlFetchApp.fetch(url, options); var content = response.getContentText("UTF-8"); }
Analyticsから取得するデータを、選択するためには、metricsのexpressionに対応する文字列が必要です。
それが公式で見つからず、地味に苦労しました……(笑)
こちらのページを参考にすることでクリアできました!
見ているうちに、ぼくのリファレンスの見方が悪かっただけなような気もしてきましたが……
こちらのページで、Analytics v4を色々いじったりしていたので、おいおい色々試してみたいなーと思っています。
ざっくり解説
処理に関するところをざっくりと説明していきます。
IDについて
IDは、Google Analyticsのページから取得する事ができます。
対象のウェブサイトのデータを開きます。
ここでメニューから管理を選択。
アカウント設定→プロパティ設定→ビューの設定を開きます。
ぼくの場合、デフォルトの状態で「アカウント設定→プロパティ設定」が開いていました。
なので、1番右の列から「ビューの設定」を選択するだけでOKかもしれません。
コレを開くと1番上に「ビューID」というのが出てきます。
IDはコレを使います。
getReport関数
AnalyticsReporting.Reports.batchGet()で、Analyticsに引数のJSONに沿った情報を要求します。
このJSONをいじくることで、自分の欲しい情報にカスタムして取得する事ができます。
今回は、2018/6/12~6/18を固定で取得しています。
この日付内の
- ユーザ数
- セッション数
- ページビュー数
- Adsense 収益
- Adsense CTR
- 直帰率
を要求しています。
取得結果を次の関数へ渡します。
reportSummary関数
getReport関数から結果を受け取り、解析したりします。
取得結果は「変数.要素.要素」とアクセスすることで値が取得できるので、わりと簡単に対象の値を取得する事ができます。
report.reports[0].data
の下に、必要な各データが詰まっている感じです。
~.data.rowCountにデータ数(行数)が入っています。
そして、data.rows[0].metrics[0].valuesに、要求した情報が順番に入っています。
今回の場合、
- ユーザ数
- セッション数
- ページビュー数
- Adsense 収益
- Adsense CTR
- 直帰率
のように要求したので、配列[0]がユーザ数、[1]がセッション数……といった感じです。
それらを
- Slack用のテキストにまとめる
- スプレッドシートに書き込む
したら完了です。
Slackへの送信はこちらを参照。
あとがき
これでGoogle Analyticsを見ていないときでも、大体の値を通知で知ることができるようになります!
もっといろんなものを繋げて楽にしていきたい……!