Adsense Reports Google表格

问题描述 投票:1回答:2

我正在使用此代码在Google电子表格上生成Adsense报告。

问题是它每天都会创建一个新的电子表格,导致我的报告混乱。

我应该更改什么,以便创建一个电子表格,以便每天更新同一电子表格?

https://developers.google.com/apps-script/advanced/adsense

/**
 * Generates a spreadsheet report for an ad client.
 * @param {string} adClientId The ad client ID
 */
function generateReport(adClientId) {
  // Prepare report.
  var today = new Date();
  var oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);

  var timezone = Session.getTimeZone();
  var startDate = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');
  var endDate = Utilities.formatDate(today, timezone, 'yyyy-MM-dd');

  var report = AdSense.Reports.generate(startDate, endDate, {
    // Specify the desired ad client using a filter.
    filter: ['AD_CLIENT_ID==' + escapeFilterParameter(adClientId)],
    metric: ['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE', 'CLICKS',
             'AD_REQUESTS_CTR', 'COST_PER_CLICK', 'AD_REQUESTS_RPM',
             'EARNINGS'],
    dimension: ['DATE'],
    // Sort by ascending date.
    sort: ['+DATE']
  });

  if (report.rows) {
    var spreadsheet = SpreadsheetApp.create('AdSense Report');
    var sheet = spreadsheet.getActiveSheet();

    // Append the headers.
    var headers = report.headers.map(function(header) {
      return header.name;
    });
    sheet.appendRow(headers);

    // Append the results.
    sheet.getRange(2, 1, report.rows.length, headers.length)
        .setValues(report.rows);

    Logger.log('Report spreadsheet created: %s',
        spreadsheet.getUrl());
  } else {
    Logger.log('No rows returned.');
  }
}

/**
 * Escape special characters for a parameter being used in a filter.
 * @param {string} parameter The parameter to be escaped.
 * @return {string} The escaped parameter.
 */
function escapeFilterParameter(parameter) {
  return parameter.replace('\\', '\\\\').replace(',', '\\,');
}
google-apps-script google-sheets adsense
2个回答
1
投票
  • 您想使用相同的电子表格而不创建新的电子表格。
  • 在您的脚本中,您希望每次都将数据添加到新表中。
  • 您想使用Google Apps脚本来实现。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

修改点:

  • 就您而言,我认为可以通过修改###if (report.rows) {###}脚本来实现您的目标。
  • 为了实现您的目标,我想提出以下流程。
    1. 检索数据。
    2. 当电子表格存在时,数据将放入现有电子表格中。
      • 在这种情况下,电子表格ID被保存到PropertiesService。
    3. 当电子表格不存在时,通过创建新的电子表格将数据放入电子表格。

修改的脚本:

修改脚本后,将如下所示。

从:
if (report.rows) {
  var spreadsheet = SpreadsheetApp.create('AdSense Report');
  var sheet = spreadsheet.getActiveSheet();

  // Append the headers.
  var headers = report.headers.map(function(header) {
    return header.name;
  });
  sheet.appendRow(headers);

  // Append the results.
  sheet.getRange(2, 1, report.rows.length, headers.length)
      .setValues(report.rows);

  Logger.log('Report spreadsheet created: %s',
      spreadsheet.getUrl());
} else {
  Logger.log('No rows returned.');
}
至:
if (report.rows) {
  var prop = PropertiesService.getScriptProperties();
  var spreadsheetId = prop.getProperty("spreadsheetId");
  var spreadsheet;
  if (spreadsheetId) {
    spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  } else {
    spreadsheet = SpreadsheetApp.create('AdSense Report');
    prop.setProperty("spreadsheetId", spreadsheet.getId());
  }
  var sheet = spreadsheet.getActiveSheet();
  sheet.clear();  // Clear sheet.

  // Append the headers.
  var headers = report.headers.map(function(header) {return header.name});
  sheet.appendRow(headers);

  // Append the results.
  sheet.getRange(2, 1, report.rows.length, headers.length).setValues(report.rows);

  Logger.log('Report spreadsheet created: %s', spreadsheet.getUrl());
} else {
  Logger.log('No rows returned.');
}

注意:

  • 在上述修改后的脚本中,使用保存在PropertiesService中的电子表格ID检查现有电子表格。因此,首先,当您运行脚本时,将创建新的电子表格并保存电子表格ID。第二次运行后,数据将放入现有的电子表格中,而无需创建新的电子表格。
  • 如果您要将数据附加到现有电子表格的最后一行,请告诉我。

参考:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。


0
投票

@@ tanaike首先,非常感谢,这非常有效。我想利用您的智慧,更改其他一些变量...大声笑。

1-我需要此脚本每天自动运行,而无需手动执行。 2-如何更改日期范围?示例:仅报告01 / 01-2020至03 / 31-2020之间的日期?

是,我想将数据附加到现有电子表格的最后一行,请告诉我。再次非常感谢您

© www.soinside.com 2019 - 2024. All rights reserved.