みなさん、こんにちは!
マイチャットがにぎやかになってきましたタカハシ(@ntakahashi0505)です。
以前こちらの記事でGoogleアナリティクスの前日のレポートを自動で取得する方法について書きました。
でもあれですよね。
朝一に尋ねてくる上司いますでしょ?
「昨日の数字どうだった??」
シートを開けばご自分でもすぐにチェックできるんですけどね。
部下は作業を中断してシートを開いて「ページビューは○○でした」と報告するわけですが、その間上司は後ろに立ってただその作業を見ているわけです。
二人にとってもったいない時間が毎日積み重なっていっちゃいますよね。
そこで登場するのがチャットワークです。
毎朝尋ねられる前に先手を打って、上司がメンバーとして入っているグループチャットに自動で送りつけてやりましょう。
Google Apps Script(通称GAS)を使えばチャットワークに自動でいろいろと通知をすることができます。
今回の記事では、Googleアナリティクスの前日のレポートをチャットワークに毎朝自動で通知する方法についてお伝えしていきます。
どうぞよろしくお願いします!
GASによる前日のGoogleアナリティクスレポート通知システム
GoogleアナリティクスアドオンによるDailyレポート
これまでのおさらいなのですが、スプレッドシートのGoogleアナリティクスアドオンを使って、前日のレポートをスプレッドシートに自動で記録する方法について以前お伝えしました。
実際のレポート設定はこちらです。
いくつかのレポートが設定されていますが、今回はこの中の「Dailyレポート」から前日の情報を抜粋して通知します。
「Dailyレポート」シートの中身はと言いますと
このようになっています。
A列から順番に日付、ユーザー、セッション、直帰率、平均セッション時間、ページビュー、ページビュー/セッションと一通りのデータが日次で記録されています。
今回のスプリプトではこのすべての項目の前日分をチャットワークに通知したいと思います。
チャットワークへ通知するまでのシステムの流れ
チャットワークにメッセージを通知するためのGASの書き方、ライブラリの準備などはこちらで解説をしていますので、まだの方はご覧頂ければと思います。
ここまで完了しているという前提で進めていきます。
システムの動作の流れとしては
- Googleアナリティクスの前日までのデータがスプレッドシートに自動で記録される
- その記録のあとの時限設定でスクリプトを起動する
- スクリプトによりスプレッドシートの情報を抽出、整形してチャットワークに送信
という流れです。
Googleアナリティクスアドオンは毎朝5時までに動作することになっていますので、チャットワークへの通知は毎朝8時の設定にしたいと思います。
Googleアナリティクスのデイリーレポートをチャットワークに通知するスクリプト
実際のスクリプトはこちらになります。
function cwFromGA() { var mySS=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var sheetDaily=mySS.getSheetByName("Dailyレポート"); //Dailyレポートシートを取得 var rowDaily=sheetDaily.getDataRange().getLastRow(); //Dailyシートの使用範囲のうち最終行を取得 var yDate = sheetDaily.getRange(rowDaily,1).getValue(); // チャットワークに送る文字列を生成 var strBody = "[info][title]いつも隣にITのお仕事レポート " + Utilities.formatDate(yDate, 'JST', 'yyyy/MM/dd') + "[/title]" + //ga:date "ユーザー: " + sheetDaily.getRange(rowDaily,2).getValue() + "n" + //ga:users "セッション: " + sheetDaily.getRange(rowDaily,3).getValue() + "n" + //ga:sessions "直帰率: " + Number(sheetDaily.getRange(rowDaily,4).getValue()*100).toFixed(1) + "%n" + //ga:bounceRate "平均セッション時間: " + Number(sheetDaily.getRange(rowDaily,5).getValue()).toFixed(1) + "n" + //ga:avgSessionDuration "ページビュー: " + sheetDaily.getRange(rowDaily,6).getValue() + "n" + //ga:pageviews "ページビュー/セッション: " + Number(sheetDaily.getRange(rowDaily,7).getValue()).toFixed(2) + "[/info]"; //ga:pageviewsPerSession // チャットワークにメッセージを送る var cwClient = ChatWorkClient.factory({token: ' ------------------------'}); //チャットワークAPI cwClient.sendMessage({ room_id: XXXXXXXX, //ルームID body: strBody }); }
ちょっとごちゃごちゃしている感はありますが、新しい要素はそんなに多くありません。以下で解説をしていきます。
シート名を指定してシートオブジェクトを取得
まず以前のスクリプトで扱うスプレッドシートでは、スプレッドシートに対してシートが一つしかありませんでした。
従いまして、Sheetオブジェクトをつかむのに
var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
などとして、ActiveSpreadsheetも飛び越えてActiveSheetを直接つかみに行くことができたのですが、今回のスプレッドシートには複数のシートが含まれていますので、シート名を使ってSheetオブジェクトをつかみます。
まず
で、現在のSpreadsheetオブジェクトを取得しつつ、それに対して
とシート名を指定することでSheetオブジェクトを取得します。
実際のスクリプトでは
var mySS=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var sheetDaily=mySS.getSheetByName("Dailyレポート"); //Dailyレポートシートを取得
として、今回の主役であるDailyレポートのシートをsheetDailyという変数に取得しています。
日付のフォーマットを変更する
10行目から24行目まではすべてチャットワークに送る文字列を生成している箇所ですが、日付と小数点つきの数値の2点で困ったことが起きます。
まず日付の箇所ですが、昨日の日付はDailyレポートシートの最終行のA列を見ればよいですから
var strBody = ~ + sheetDaily.getRange(rowDaily,1).getValue() + ~
などとすれば取得できるのですが、これをチャットワークにそのまま送ると
こんなに細かい情報はいらない…。
Utilities.formatDateで日付フォーマットを変更する
実はJavaScriptでは日付のフォーマットを変更するための直接的な命令がなく、皆さん独自の関数使ったりして工夫されているのですが、Google Apps ScriptではGoogleが便利なライブラリを用意してくれているので、それを使うことができます。
Utilitiesというライブラリを使いまして
とすることで、日付フォーマットを変更することができます。
タイムゾーンは日本の場合は「JST」を指定してあげればOK。フォーマットは年を「y」、月を「M」(※大文字なので注意!)、日を「d」を使って表現します。
- ‘yyyy-MM-dd’ とすれば 「2015-12-03」
- ‘yyyy年M月d日’ とすれば 「2015年12月3日」
となります。
今回は最も一般的な書き方と言えますが
var strBody = ~ + Utilities.formatDate(yDate, 'JST', 'yyyy/MM/dd') + ~ //ga:date
としました。
繰り返しになりますが、UtilitiesはGAS専用ですから、JavaScript一般では使えませんよ。
数値のフォーマットで小数点の桁数を指定する
次に小数点付きの数値についてです。
直帰率や平均セッション時間、ページビュー/セッションは小数点以下の桁数が出る値になりますが、これらをそのままチャットワークに送りますと
めいっぱい小数点以下の桁数が表示されてしまう…。
toFixedメソッドで小数点以下の桁数を指定
そんなときはNumberライブラリのtoFixedメソッドを使って
とすることで、桁数を指定することができます。
こちらのライブラリはJavaScript標準ですよ。ちょっとややこしいですね。
今回は
var strBody = ~ + "直帰率: " + Number(sheetDaily.getRange(rowDaily,4).getValue()*100).toFixed(1) + "%n" + //ga:bounceRate "平均セッション時間: " + Number(sheetDaily.getRange(rowDaily,5).getValue()).toFixed(1) + "n" + //ga:avgSessionDuration ~ + "ページビュー/セッション: " + Number(sheetDaily.getRange(rowDaily,7).getValue()).toFixed(2) + "[/info]"; //ga:pageviewsPerSession
としています。
直帰率は%表示にしたかったので、100をかけたものに対して小数点以下1桁、平均セッション時間は小数点以下1桁、ページ/セッションは小数点以下2桁としています。
実行結果
こちらが実行結果ですね。
これで上司から毎朝声をかけられることもありませんよ…めでたしめでたし。
まとめ
Googleアナリティクスの前日のレポートをチャットワークに自動で通知する方法についてお伝えしてきました。
もう新たに出てくる要素はだいぶ小技ばかりになってきましたね。
次回は今回のレポートに、前日の記事ランキングを追加したいと思います。
どうぞお楽しみに!
連載目次:Googleアナリティクスデータをスプレッドシートで自動取得
- Googleアナリティクスデータをスプレッドシートで自動取得する方法
- スプレッドシートでGoogleアナリティクスデータのグラフを毎日・完全自動で更新
- スプレッドシートのピボットを使用して流入別セッション数も自動でレポーティング
- Googleアナリティクスの自動デイリーレポート&よく使うMetrics一覧
- 記事別ページビューランキングを自動で取得&よく使うDimensions一覧
- GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
- GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
連載目次:初めてのGoogle Apps Scriptで自動でチャットワークに色々と送る
最初のお題にも限らずチャットワークを中心に操作していきます。スプレッドシートやカレンダーをはじめとするGoogleサービスはもちろん、Twitterなどの外部のサービスともAPIで連携させて色々なものをチャットワークに通知してみますよ。- Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
- Google Apps Scriptでチャットワークの名言botを作る方法
- Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
- 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
- スプレッドシートのリストアップ件数をGASでチャットワークに通知する
- GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
- GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
- Google Apps ScriptでWordPressの更新情報をチャットワークに送る
- 毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
- 【Google Apps Script】天気予報をWeb APIで取得する方法
- 【GAS】JSON形式のデータを取り出してチャットワークに天気予報を送る
コメント
[…] 「GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信」 […]