3
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-25

概要

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

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

GA_01.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」して下記のように設定します。
GA.png

下記を参考にさせていただきました。
http://tonari-it.com/google-analytics-spreadsheet/

確認&自動化

「アドオン」からRun ReportしてOKだったら、Schedule Reportで自動化します。

保存したデータを集計してチャットへ送信(日次 2:00〜3:00)

スクリプト(GAS)の設置

SpreadSheet上でスクリプトエディタを開き、「リソース」からライブラリ追加
(公式ではなく、個人作成のライブラリですので確認・理解した上で利用してください)

レポート用スクリプト

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だったら時計マークから自動化設定して完了
3
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?