Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

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

概要

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だったら時計マークから自動化設定して完了
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?