lisz-works

プログラミングと興味を貴方に

Analytics→Slack通知!GoogleAppsScriptでGAを確認しよう!

【スポンサーリンク】

Google Analytics

Google Analyticsの結果を、Slackに通知する処理を作りました!

Google Apps Scriptを使っています!

ざっくりとした流れ

こんな感じのことをしています。

  1. Google Analyticsに情報を要求→取得
  2. 取得した情報を解析
  3. Google スプレッドシートに書き込み
  4. Slack用のテキストを作って投げる

Slackへ投げる処理については、こちらの記事を。

www.lisz-works.com

Googleのライブラリ

まずは使用するライブラリを入れていきます。

メニューバーから「リソース→Googleの拡張サービス...」を選択。

今回使うのはこの2つ。

  1. Google Analytics Reporting API v4
  2. Google Sheets API v4

デフォルトだとそれぞれ

  1. AnalyticsReporting
  2. Sheets

という変数名(というか多分クラス名)で使用することができます。

自作ライブラリ

ぼくは別スクリプトで、Google Apps Script→Spreadsheetを操作するためのライブラリを作ってあります。

Gas2SpreadSheetというライブラリです。

この中で、このような処理を作って、シートへの書き込みができるようにしてあります。

/**
 * アクティブシートの範囲書込します。
 *
 * @param msgArr 書込文字列を入れた2次元配列
 * @param startRow 書込開始行
 * @param startCol 書込開始列
 */
function writeRange(msgArr, startRow, startCol) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rowRange = msgArr.length;
  var colRange = msgArr[0].length;

  sheet.getRange(startRow, startCol, rowRange, colRange).setValues(msgArr);
}

スプレッドシートとスクリプトの作成

今回は取得した情報をスプレッドシートに蓄積したいと考えています。

なのでスプレッドシートを新規作成します。

このスプレッドシートの、スクリプトエディタを開いてスクリプトを新規作成します。

シートに書き込むための下準備の手間を考えると、この方法が楽ちん……

Google Analyticsのコード

それではコードを書いていきます。

/**
 * レポートの取得
 */
function reportAnalytics() {
  var VIEW_ID = UserProperties.getProperty('GA-liszworks-ID');
  getReport(VIEW_ID);
}

/**
 * Google Analyticsからレポート取得
 * @param id Google AnalyticsのVIEW ID
 */
function getReport(id) {
    var report = AnalyticsReporting.Reports.batchGet({
        "reportRequests": [
            {
                'viewId': id,
                'dateRanges': [
                    {
                        'startDate': "2018-06-12",
                        "endDate": "2018-06-18"
                    }
                ],
                'metrics': [
                    {
                        'expression': "ga:users",
                        'alias': "ユーザ数"
                    },
                    {
                        'expression': "ga:sessions",
                        'alias': "セッション数"
                    },
                    {
                        'expression': "ga:pageviews",
                        'alias': "PV数"
                    },
                    {
                        'expression': "ga:adsenseRevenue",
                        'alias': "Adsense収益"
                    },
                    {
                        'expression': "ga:CTR",
                        'alias': "Adsense CTR"
                    },
                    {
                        'expression': "ga:bounceRate",
                        'alias': "直帰率"
                    }
                ]/*,
          'dimensions': [{ "name": "ga:datehour" }]*/
            }]
    });
    reportSummary(report);
}

/**
 * 現時点の解析結果をSlackへポスト
 *
 * @param report レポート(取得結果)
 */
function reportSummary(report) {
  var now = new Date();// 今日を取得
  var today = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
  var toDate = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd');  
  var text = toDate + " :report" + "\n";
  
  var rep = report.reports[0];  // ベースとなるreports[]要素
  var data = rep.data;
  var colHeader = rep.columnHeader;
  console.log(rep);
  
  var dataNum = data.rowCount;  // データ行数
  if ( dataNum ) {
    var values = data.rows[0].metrics[0].values;
    var userCnt = values[0];
    var sessionCnt = values[1];
    var pvCnt = values[2];
    var adsRevenue = values[3];
    var adsCTR = values[4];
    var bounceRate = values[5];
    var line;
    
    // ユーザー数
    text += "user : " + userCnt + "\n";
    // セッション数
    text += "session : " + sessionCnt + "\n";
    // ページビュー
    text += "pageview : " + pvCnt+ "\n";
    // IMP数
    text += "Adsense収益 : $" + adsRevenue+ "\n";
    text += "AdsenseCTR : " + adsCTR + "% \n";
    // 直帰率
    text += "直帰率 : " + bounceRate+ "% \n";
    
    // スプレッドシートへの書き込み
    var cellData = [
      [ toDate, ''+userCnt, ''+sessionCnt, ''+pvCnt, ''+adsRevenue, ''+adsCTR, ''+bounceRate ]
    ];
    Logger.log(cellData)
    Gas2SpreadSheet.writeRange(cellData, SpreadsheetApp.getActiveSheet().getLastRow() + 1, 1);
    
    console.log(text);
  }

  // Slackへのポスト用データをセット
  if (text != "") {
     var payload = {
     "text" : text,
     "channel" : "#my_notify", // Slackチャンネル名
     "username" : "GA Report", //Slackで表示するユーザー名
     "icon_url" : "https://hooks.slack.com/services/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" //アイコンの画像URL
     }
     postSlack(payload);
   }
}

/**
 * Slackポスト関数
 *
 * @param payload ポスト詳細
 */
function postSlack(payload) {
  var options = {
    "method" : "POST",
    "payload" : JSON.stringify(payload)
  }
  var url = profileId = UserProperties.getProperty('SlackNotifyChWebhookURL'); // SlackのWebHooks URL
  var response = UrlFetchApp.fetch(url, options);
  var content = response.getContentText("UTF-8");
}

Analyticsから取得するデータを、選択するためには、metricsのexpressionに対応する文字列が必要です。

それが公式で見つからず、地味に苦労しました……(笑)

こちらのページを参考にすることでクリアできました!

ummmummm.hatenablog.com

見ているうちに、ぼくのリファレンスの見方が悪かっただけなような気もしてきましたが……

こちらのページで、Analytics v4を色々いじったりしていたので、おいおい色々試してみたいなーと思っています。

marketing-sphere.blogspot.com

ざっくり解説

処理に関するところをざっくりと説明していきます。

IDについて

IDは、Google Analyticsのページから取得する事ができます。

対象のウェブサイトのデータを開きます。

ここでメニューから管理を選択。

メニュー→管理

アカウント設定→プロパティ設定→ビューの設定を開きます。

ビューの設定

ぼくの場合、デフォルトの状態で「アカウント設定→プロパティ設定」が開いていました。
なので、1番右の列から「ビューの設定」を選択するだけでOKかもしれません。

コレを開くと1番上に「ビューID」というのが出てきます。

ビューID

IDはコレを使います。

getReport関数

AnalyticsReporting.Reports.batchGet()で、Analyticsに引数のJSONに沿った情報を要求します。

このJSONをいじくることで、自分の欲しい情報にカスタムして取得する事ができます。

今回は、2018/6/12~6/18を固定で取得しています。

この日付内の

  1. ユーザ数
  2. セッション数
  3. ページビュー数
  4. Adsense 収益
  5. Adsense CTR
  6. 直帰率

を要求しています。

取得結果を次の関数へ渡します。

reportSummary関数

getReport関数から結果を受け取り、解析したりします。

取得結果は「変数.要素.要素」とアクセスすることで値が取得できるので、わりと簡単に対象の値を取得する事ができます。

report.reports[0].data

の下に、必要な各データが詰まっている感じです。

~.data.rowCountにデータ数(行数)が入っています。

そして、data.rows[0].metrics[0].valuesに、要求した情報が順番に入っています。

今回の場合、

  1. ユーザ数
  2. セッション数
  3. ページビュー数
  4. Adsense 収益
  5. Adsense CTR
  6. 直帰率

のように要求したので、配列[0]がユーザ数、[1]がセッション数……といった感じです。

それらを

  • Slack用のテキストにまとめる
  • スプレッドシートに書き込む

したら完了です。

Slackへの送信はこちらを参照。

www.lisz-works.com

あとがき

これでGoogle Analyticsを見ていないときでも、大体の値を通知で知ることができるようになります!

もっといろんなものを繋げて楽にしていきたい……!