Отчеты AdSense Google Sheets - PullRequest
       16

Отчеты AdSense Google Sheets

1 голос
/ 05 марта 2020

Я использую этот код для создания отчетов Adsense в электронной таблице Google.

Проблема заключается в том, что каждый день создается новая электронная таблица, что приводит к путанице в моих отчетах.

Что мне делать изменить, чтобы создать одну электронную таблицу, чтобы одна и та же таблица обновлялась каждый день?

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(',', '\\,');
}

Ответы [ 2 ]

2 голосов
/ 06 марта 2020
  • Вы хотите использовать одну и ту же электронную таблицу без создания новой электронной таблицы.
  • В своем сценарии вы хотите каждый раз добавлять данные на новый лист.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если я правильно понял, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Очки модификации:

  • В вашем случае, я думаю, что ваша цель может быть достигнута путем изменения сценария ### из if (report.rows) {###}.
  • Для достижения вашей цели я хотел бы предложить следующий поток.
    1. Извлечение данных.
    2. Когда электронная таблица существует, данные помещаются в существующую электронную таблицу.
      • В этом случае идентификатор электронной таблицы сохраняется в 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. Итак, сначала, когда вы запускаете скрипт, создается новая электронная таблица и сохраняется идентификатор электронной таблицы. После второго запуска данные помещаются в существующую электронную таблицу без создания новой электронной таблицы.
  • Если вы хотите добавить данные в последнюю строку существующей электронной таблицы, сообщите мне.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я приношу свои извинения.

0 голосов
/ 06 марта 2020

@ tanaike Во-первых, большое спасибо, это сработало отлично. Я хочу воспользоваться твоим умом, чтобы изменить некоторые другие переменные ... лол.

1 - мне нужно, чтобы этот скрипт запускался автоматически каждый день, без необходимости делать это вручную. 2 - Как я могу изменить диапазон дат? Пример: отчет только за период с 01-03-2020 по 03 / 31-2020?

Да, я хочу добавить данные в последнюю строку существующей таблицы, пожалуйста, сообщите мне. Еще раз большое спасибо

...