概要
GASの入門として、
「GoogleAnalyticsのデータをGoogleDriveのSpreadSheetに保存してレポートを日次でチャット送信」
を自動化してみたいと思います。
そういえば、Analyticsも必要な時しか見ていなく、設定もDefaultなので改めて勉強も込めて。
前提など:
・現在ホームページを運用してて、サブドメイン切って機能別で運用している。
・Qiita、はてなブログも同じトラッキングID設定していて、まとめて集計したいと思います。
・レポート内容は、前日のPVやセションなどの情報と記事別のTop10
Google Analytics側での事前設定
- 「管理」タブでの設定
- フィルタ
- デフォルトだと/以下のログしか残らないのでドメインも追加(手順割愛)
- not set 除外(多くなければ不要。検索エンジンからのアクセス)
- 社内、自宅IPの除外(固定IPであれば)
- 開発環境を除外(dev.xxx.jp)
- ビュー設定
- デフォルトのページにindex.htmlを追加(/と/index.htmlを同じログにする)
- フィルタ
Google SpreadSheetにデータを自動保存(日次 1:00〜2:00)
Google Drive へ Google Apps Script の追加
- 「新規」->「アプリ追加」より検索して追加
Google Analytics アドオンを追加
- SpreadSheetを新規作成し、「アドオン」より検索して追加
設定
- 「Create a new report」して下記のように設定します。
下記を参考にさせていただきました。
http://tonari-it.com/google-analytics-spreadsheet/
確認&自動化
「アドオン」からRun ReportしてOKだったら、Schedule Reportで自動化します。
保存したデータを集計してチャットへ送信(日次 2:00〜3:00)
スクリプト(GAS)の設置
SpreadSheet上でスクリプトエディタを開き、「リソース」からライブラリ追加
(公式ではなく、個人作成のライブラリですので確認・理解した上で利用してください)
- Chatwork Client
M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT Ver.16
https://github.com/cw-shibuya/cw-event-notifier-gas - Slack Client
M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO Ver.22
https://github.com/soundTricker/SlackApp
レポート用スクリプト
function SendReport() {
var mySS=SpreadsheetApp.getActiveSpreadsheet();
var sheetDaily=mySS.getSheetByName("Daily"); //Dailyレポートシートを取得
var rowDaily=sheetDaily.getDataRange().getLastRow(); //最終行を取得
var yDate = sheetDaily.getRange(rowDaily,1).getValue();
/* レポート① :前日のPVとか */
var strBody = "[info][title]ishino.info " +
Utilities.formatDate(yDate, 'JST', 'yyyy/MM/dd') + "[/title]" + //ga:date
"PV: " + sheetDaily.getRange(rowDaily,2).getValue() + "\n" + //ga:pageviews
"User: " + sheetDaily.getRange(rowDaily,3).getValue() + " / " + //ga:users
"Session: " + sheetDaily.getRange(rowDaily,4).getValue() + "\n" + //ga:sessions
"直帰率: " + Number(sheetDaily.getRange(rowDaily,5).getValue()*100).toFixed(1) + "% / " + //ga:bounceRate
"Session平均: " + Number(sheetDaily.getRange(rowDaily,6).getValue()).toFixed(1) + "秒[hr]" ; //ga:avgSessionDuration
/* レポート② :前日の記事別Top10 */
var sheetPost=mySS.getSheetByName("記事別"); //記事別レポートシートを取得
for(var i=1;i<=10;i++){
strBody = strBody + sheetPost.getRange(i+15,3).getValue() + " pv : " + sheetPost.getRange(i+15,2).getValue() + "\n";
}
strBody = strBody + "[hr]" + mySS.getUrl() + "[/info]"; //スプレッドシートのURLを取得
SendCW( strBody )
//SendSlack( strBody )
}
function SendCW( strBody ) {
var cwClient = ChatWorkClient.factory({token: 'xxx'}); //チャットワークAPI
cwClient.sendMessage({
room_id: xxx, //ルームID
body: strBody
});
}
function SendSlack( strBody ) {
var token = 'xoxb-xxx';
var slackApp = SlackApp.create(token); //SlackApp インスタンスの取得
var options = {
channelId: "#bot_test", //チャンネル名
userName: "mohi", //投稿するbotの名前
message: strBody //投稿するメッセージ
};
slackApp.postMessage(options.channelId, options.message, {username: options.userName});
}
確認&自動化
- SendReport関数を実行してOKだったら時計マークから自動化設定して完了