SpreadSheetとGASを使ってGoogleAnalyticsのレポートをチャットへ日次送信

# 概要
GASの入門として、
「GoogleAnalyticsのデータをGoogleDriveのSpreadSheetに保存してレポートを日次でチャット送信」
を自動化してみたいと思います。
そういえば、Analyticsも必要な時しか見ていなく、設定もDefaultなので改めて勉強も込めて。

前提など：
　・現在ホームページを運用してて、サブドメイン切って機能別で運用している。
　・Qiita、はてなブログも同じトラッキングID設定していて、まとめて集計したいと思います。
　・レポート内容は、前日のPVやセションなどの情報と記事別のTop10

<img width="400" alt="GA_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/93107/d0f7e0da-61bd-f107-596f-3c30c7886e12.png">

# 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」して下記のように設定します。
<img width="500" alt="GA.png" src="https://qiita-image-store.s3.amazonaws.com/0/93107/caa08157-0b04-c977-eef8-19e190895716.png">

下記を参考にさせていただきました。
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だったら時計マークから自動化設定して完了