Adsense 报告 Google 表
Adsense Reports Google Sheets
我正在使用此代码在 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(',', '\,');
}
- 您想使用相同的 Spreadsheet 而不创建新的 Spreadsheet。
- 在您的脚本中,您希望每次都将数据添加到新的 sheet。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 你的情况,我想你的目的可以通过修改
if (report.rows) {###}
的###
的脚本来实现。
- 为了实现您的目标,我想提出以下流程。
- 检索数据。
- 当Spreadsheet存在时,将数据放入现有Spreadsheet。
- 在这种情况下,Spreadsheet ID 保存到 PropertiesService。
- 当Spreadsheet不存在时,通过创建新的Spreadsheet.
将数据放入Spreadsheet
修改后的脚本:
当你的脚本修改后,变成如下。
从:
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 中的 Spreadsheet ID 检查现有的 Spreadsheet。因此,首先,当您 运行 脚本时,会创建新的 Spreadsheet 并保存 Spreadsheet ID。 2nd 运行 后,数据被放入现有的 Spreadsheet 而没有创建新的 Spreadsheet.
- 如果您想将数据附加到现有 Spreadsheet 的最后一行,请告诉我。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我正在使用此代码在 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(',', '\,');
}
- 您想使用相同的 Spreadsheet 而不创建新的 Spreadsheet。
- 在您的脚本中,您希望每次都将数据添加到新的 sheet。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 你的情况,我想你的目的可以通过修改
if (report.rows) {###}
的###
的脚本来实现。 - 为了实现您的目标,我想提出以下流程。
- 检索数据。
- 当Spreadsheet存在时,将数据放入现有Spreadsheet。
- 在这种情况下,Spreadsheet ID 保存到 PropertiesService。
- 当Spreadsheet不存在时,通过创建新的Spreadsheet. 将数据放入Spreadsheet
修改后的脚本:
当你的脚本修改后,变成如下。
从: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 中的 Spreadsheet ID 检查现有的 Spreadsheet。因此,首先,当您 运行 脚本时,会创建新的 Spreadsheet 并保存 Spreadsheet ID。 2nd 运行 后,数据被放入现有的 Spreadsheet 而没有创建新的 Spreadsheet.
- 如果您想将数据附加到现有 Spreadsheet 的最后一行,请告诉我。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。