AdMob 판매를 Spreadsheet에 자동으로 출력하는 방법

개요



GoogleAppsScript를 사용하여 GoogleSpreadSheet에 AdMob 판매를 자동으로 가져오고 출력하는 방법입니다.

프레임마다 시트가 만들어져 출력되므로 적시에 importrange 에서 등으로 취득하여 필요한 형식으로 사용하십시오.
getAdUnitCodeList 에서 취득하는 범위내에서 광고 요청이 있으면 자동으로 취득되므로 인벤토리가 추가되거나 앱이 추가되어도
동일한 계정 내에서 관리되는 경우 자동으로 추가됩니다.
다만, 운용상 오랜 세월 운용하면 행수가 늘어나 무거워질 것 같기 때문에 1년마다 운용한다고 가정하고 있습니다.

년이 지나면 일정을 멈추고 정기 실행을 중지하고 새로 Spreadsheet를 복사하여 취득 기간을 변경한 후
일정을 추가하고 정기 실행을 다시 시작합니다.

사용법


  • Google Spreadsheet에서 새 스프레드시트를 만들고 메뉴 도구 > 스크립트 편집기에서 GAS를 열고
    아래 소스 코드를 붙여 AD_CLIENT_ID , START_DATE , END_DATE
  • GAS 메뉴의 리소스 > Google 확장 서비스 열기
    AdSenseManagementAPI를 사용 설정하세요.
  • run 함수를 실행하면 시트가 자동으로 만들어져 출력됩니다.
    필요한 경우 일정을 등록하고 정기적으로 실행합니다.

  • 제외하지 않고 쓸데없이 출력했을 경우는 truncateSheet 를 실행해 주세요.
    모든 시트가 삭제됩니다.
    ※이미 importrange 등으로 참조하고 있으면 참조가 망가질 가능성이 있으므로 조심해 주세요.

    ※모두 덮어쓰기 보존되므로, 출력된 곳에 메모라든지 써도 사라져 버리거나 위치가 어긋나거나 하기 때문에
    어디까지나 데이터 소스로 이용하십시오.

    소스 코드


    var AD_CLIENT_ID = 'ca-app-pub-xxxxxxxxxx' // 取得するレポートのID
    var START_DATE = '2019-01-01'// 取得する範囲の開始日
    var END_DATE = '2019-12-31' // 取得する範囲の終了日を入れる
    var CODE_LIST_METRIC = ['REACHED_AD_REQUESTS']
    var CODE_LIST_DEMENSION = ['APP_ID', 'AD_UNIT_CODE', 'APP_NAME', 'APP_PLATFORM']
    var REPORT_METORIC = ['VIEWED_IMPRESSIONS','AD_REQUESTS_COVERAGE','CLICKS','MATCHED_AD_REQUESTS_CTR', 'COST_PER_CLICK','MATCHED_AD_REQUESTS_RPM','EARNINGS']
    var REPORT_DEMENSION = ['DATE'] 
    var AD_UNIT_SHEET = '枠管理(自動更新)' // 取得した枠一覧が入るシート名
    // 除外するアプリがあればここに入れる
    var IGNORE_APP_IDS = []
    
    // メインロジック
    // この関数をスケジュール実行してください
    function run() {
      var adUnitCodes = getAdUnitCodeList(AD_CLIENT_ID, START_DATE, END_DATE).filter(function(adUnitCode) {
         return IGNORE_APP_IDS.indexOf(adUnitCode[0]) == -1
      })
      updateAdUnitList(adUnitCodes)
      adUnitCodes.forEach(function(adUnitCode) {
        var report = getReport(adUnitCode[0], adUnitCode[1], START_DATE, END_DATE)
        updateReportSheet(adUnitCode[1], report)
      })
    }
    
    // IGNORE_APP_IDSを後から追加したりして要らないシートが大量にできた時に削除したりするのに使ってください。
    // AD_UNIT_SHEET以外のシートをすべて削除します。
    // 別のSpreadsheetから参照とかしてると全部消えちゃうので気をつけてください。
    function truncateSheet() {
      var sheet = SpreadsheetApp.getActive().getSheetByName( AD_UNIT_SHEET );
      if (sheet == null) {
         SpreadsheetApp.getActive().insertSheet( AD_UNIT_SHEET )
      }
    
      var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
      sheets.filter(function(sheet){ return sheet.getName() != AD_UNIT_SHEET }).forEach(function(sheet) {
        SpreadsheetApp.getActive().deleteSheet(sheet)
      })
    }
    
    function updateReportSheet(sheetName, report) {
      var sheet = SpreadsheetApp.getActive().getSheetByName( sheetName );
      if (sheet == null) {
        sheet = SpreadsheetApp.getActive().insertSheet(sheetName)
      }
    
      var header = [REPORT_DEMENSION.concat(REPORT_METORIC)]
      sheet.getRange( 1, 1, header.length, header[0].length ).setValues(header)
      sheet.getRange( 2, 1, report.length, report[0].length ).setValues(report)
    }
    
    function updateAdUnitList(adUnitCodes) {  
      var sheet = SpreadsheetApp.getActive().getSheetByName( AD_UNIT_SHEET );
      if (sheet == null) {
        SpreadsheetApp.getActive().insertSheet(AD_UNIT_SHEET)
      }
      var header = [CODE_LIST_DEMENSION.concat(CODE_LIST_METRIC)]
      sheet.getRange( 1, 1, header.length, header[0].length ).setValues(header)
      sheet.getRange( 2, 1, adUnitCodes.length, adUnitCodes[0].length ).setValues(adUnitCodes)
    }
    
    function getAdUnitCodeList(adClientId, startDate, endDate) {
      var args = {
        'metric': CODE_LIST_METRIC,
        'dimension': CODE_LIST_DEMENSION,
        'filter': ['AD_CLIENT_ID==' + adClientId],
        'useTimezoneReporting': ['true'], // タイムゾーンを取得するアカウントに揃えるフラグ
      };
    
      return AdSense.Reports.generate(startDate, endDate, args).getRows();  
    }
    
    function getReport(appId, adUnitCode, startDate, endDate) {
      var args = {
        'metric': REPORT_METORIC,
        'dimension': REPORT_DEMENSION,
        'filter': ['APP_ID==' + appId, 'AD_UNIT_CODE==' + adUnitCode],
        'useTimezoneReporting': ['true'], // タイムゾーンを取得するアカウントに揃えるフラグ
      };
      return AdSense.Reports.generate(startDate, endDate, args).getRows();    
    }
    
    

    참고 자료



    AdMob 애드센스 관리 API 설명서

    좋은 웹페이지 즐겨찾기