GA와 redash의 숫자를 GAS로 함께 취급

하고 싶은 일


  • redash와 GA의 숫자를 스프레드 시트에 요약하고 싶습니다
  • 위의 숫자를 매일 Slack에 알리고 싶습니다

  • 사용하는 것


  • GoogleAnalytics
  • SpreadSheet
  • Spreadsheet의 GA 애드온
  • GoogleAppScript
  • redash (API 포함)

  • 절차



    1. GA 수치를 얻기 위한 스프레드시트 준비



    스프레드시트에는 GA 애드온이 제공되므로 먼저 필요한 수치를 얻습니다.



    2. 일별로 집계할 스프레드시트 준비



    1에서 만든 스프레드시트의 필요한 부분을 참조합니다.
    ※화면의 IMPORTRANGE 부분 참조
    ※redash의 시트는 3 이행으로 설명합니다.



    3. GoogleAppScript에서 필요한 처리 구현



    스프레드시트 메뉴에서 도구 > 스크립트 편집기를 선택하여 편집기를 시작합니다.
    여기에서 작성한 스크립트를 매일 정해진 시간에 실행합니다.
  • 스프레드 시트에서 GA의 전일 수치 가져 오기
  • redash의 API를 사용하여 숫자를 얻습니다
  • redash의 수치를 스프레드 시트에 기입 (2.에서 작성한 시트)
  • Slack에게 GA와 redash의 수치를 통지
  • function myFunction() {
      // GA
      var ga_message = gaReport();
      // re:dash
      var redash_message = redashReport()
    
      // Slackへの通知
      var data = {
        "channel": "#test", 
        "username": "muscle", 
        "text": ga_message + "\n" + redash_message, 
        "icon_emoji": ":icon:"
      };
      var payload = JSON.stringify(data);
      var options = {
         "method":"POST",
         "payload":payload
      };
      var res = UrlFetchApp.fetch("https://hooks.slack.com/services/hogehoge", options);
    }
    
    // GAの数値を取得
    function gaReport() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GA数値集約");
      var data = sheet.getDataRange().getValues();
    
      // 前日のデータ
      var date = Utilities.formatDate(data[1][0], 'Asia/Tokyo', 'M月d日');
      var dl = data[1][1];
      var dau = data[1][2];
      var mau = data[1][3];
    
      // 前々日のデータ
      var old_dl = data[2][1];
      var old_dau = data[2][2];
      var old_mau = data[2][3];
    
      var ga_message = "おはようございます!" + date + "のレポートをお伝えします!\n\n";
      ga_message += "DL数は" + dl + "(前日比" + Math.floor(dl/old_dl*100) + "%)\n";
      ga_message += "DAUは" + dau + "(前日比" + Math.floor(dau/old_dau*100) + "%)\n";
      ga_message += "MAU数は" + mau + "(前日比" + Math.floor(mau/old_mau*100) + "%)\n";
    
      return ga_message;
    }
    
    // redashの数値を取得
    function redashReport() {
      // redashのクエリ番号
      var query_nums = [
        1, // 前日売上
        2, // 当月売上
        3  // チケットの利用枚数
      ];
    
      // basic認証回避
      var headers = {'Authorization' : "Basic hogehoge"};
      var params = {
        'headers': headers,
        'method': "get"
      };
    
      // sheet取得
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("re:dash数値集約");
      var redash_message = "";
    
      // 新しく入力する行数を取得
      var new_row = sheet.getLastRow() + 1;
      var data_start_column = 2;
      var date = new Date();
      sheet.getRange(new_row, 1).setValue((date.getFullYear()) + "/" + (date.getMonth() + 1) + "/" + (date.getDate() - 1));
    
      query_nums.forEach(function(num) {
        var url = "https://redash.jp/api/queries/" + num + "/results.json?api_key=hogehoge";
        var response = UrlFetchApp.fetch(url, params);
        var ret = JSON.parse(response.getContentText());
        var row = ret.query_result.data.rows[0];
        for (key in row) {
          redash_message += key + "" + row[key] + "\n";
    
          // スプレッドシートにデータ書き込み
          sheet.getRange(new_row, data_start_column).setValue(row[key]);
        }
        data_start_column++;
      });
    
      return redash_message;
    }
    

    요약



    GAS는 간편하게 구현할 수 있는 반면 어디에서 무엇이 움직이고 있는지 모르거나 배포 절차가 번거롭거나 팀에서 개발할 때 몇 가지 문제가 될 수 있습니다.
    그렇다고는 해도, GAS를 git 관리하는 방법등은 존재하므로, 속인화하지 않게 제대로 룰을 사용해 운용해 가고 싶네요.

    좋은 웹페이지 즐겨찾기