2022年2月12日土曜日

AdSenseのデータをスプレッドシートに書き込むスクリプト

以下のスクリプトを実行するとAdSenseのデータをスプレッドシートに取り込みます。 未取得分だけを取得して追加するので、時間駆動のトリガで1時間おきにでも実施するのが良いです。 取り込んだデータはスプレッドシート側でデータ集計したり、グラフを作成してください。
function myFunction() { // 1時間おきのトリガを設定したい場合はこちらを実行
  trigger = ScriptApp.newTrigger("report")
  .timeBased()
  .everyHours(1)
//  .everyMinutes(5)
  .create();
  report();
}

function report() {
  var adsenseClientID = 'ca-pub-NNNNNNNNNNNNNNNN';
  var adsenseAccounts = 'pub-NNNNNNNNNNNNNNNN';
  var metrics = ['ESTIMATED_EARNINGS', 'PAGE_VIEWS', 'CLICKS', 'PAGE_VIEWS_CTR', 'COST_PER_CLICK', 'PAGE_VIEWS_RPM'];
  var sheetName = 'report';
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);
  if (sheet == null) {
    sheet = ss.insertSheet(sheetName);
  }

  const today = new Date();
  var lastRow = sheet.getLastRow();
  if (lastRow < 2) {
    var last = new Date('1900/1/1');
    sheet.getRange(1, 1, 1, metrics.length+1).setValues([['Date'].concat(metrics)]);
    lastRow = 2;
  }
  else {
    var last = new Date(sheet.getRange(sheet.getLastRow(), 1).getDisplayValue());
  }

  var report = AdSense.Accounts.Reports.generate(
    'accounts/'+adsenseAccounts,
    {
      // Specify the desired ad client using a filter.
      filters: ['AD_CLIENT_ID=='+adsenseClientID],
      metrics: metrics,
      dimensions: ['DATE'],
      dateRange: 'CUSTOM',
      'startDate.year': last.getFullYear(),
      'startDate.month':last.getMonth() + 1,
      'startDate.day':last.getDate(),
      'endDate.year': today.getFullYear(),
      'endDate.month':today.getMonth() + 1,
      'endDate.day':today.getDate(),
      // Sort by ascending date.
      reportingTimeZone: 'ACCOUNT_TIME_ZONE',
      orderBy: ['+DATE']
    } );

  sheet.getRange(lastRow, 1, report.rows.length, report.rows[0].cells.length)
    .setValues(report.rows.map(row => row.cells.map(cell => cell.value)));
}

Reports.generate関数はヘルプ(Method: accounts.reports.generate)を、metricsやdimensionsに指定する値はヘルプ(Metrics and Dimensions)を参照してください。

0 件のコメント:

コメントを投稿

質問、要望、指摘など書いていただいてもよいですが、対応できるとは限りませんのでご了承ください。私に対するものも含め他の人を嫌な気分になるようなコメントは避けてください。