如何修改AdSense脚本筛选特定域名并追加数据到Google Sheets现有工作表
修改后的AdSense数据导入代码(满足特定域名过滤+追加到现有表格)
需求说明
- 仅导入指定域名的AdSense数据
- 数据追加到已有的Google Sheets标签页,不再新建表格
修改后的完整代码
/** * 生成指定广告客户的AdSense报表并追加到现有表格 * @param {string} accountName AdSense账户资源名称 * @param {string} adClientReportingDimensionId 广告客户的报表维度ID * @param {string} targetDomain 要筛选的目标域名(例如:example.com) * @param {string} spreadsheetId 目标Google表格的ID(可从表格URL中获取) * @param {string} sheetName 目标标签页名称(默认使用第一个标签页) */ function generateReport(accountName, adClientReportingDimensionId, targetDomain, spreadsheetId, sheetName = '') { // 准备报表时间范围:最近7天 const today = new Date(); const oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); // 请求AdSense报表,添加域名过滤 const report = AdSense.Accounts.Reports.generate(accountName, { // 同时过滤广告客户ID和目标域名 filters: [ 'AD_CLIENT_ID==' + escapeFilterParameter(adClientReportingDimensionId), 'DOMAIN_NAME==' + escapeFilterParameter(targetDomain) ], metrics: ['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE', 'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK', 'AD_REQUESTS_RPM', 'ESTIMATED_EARNINGS'], dimensions: ['DATE', 'DOMAIN_NAME'], // 添加域名维度,方便验证筛选结果 ...dateToJson('startDate', oneWeekAgo), ...dateToJson('endDate', today), // 按日期升序排序 orderBy: ['+DATE'] }); if (!report.rows) { console.log('无数据返回。'); return; } // 打开现有表格,而非新建 const spreadsheet = SpreadsheetApp.openById(spreadsheetId); const sheet = sheetName ? spreadsheet.getSheetByName(sheetName) : spreadsheet.getActiveSheet(); if (!sheet) { console.log('未找到指定的标签页。'); return; } // 获取表格最后一行,准备追加数据 const lastRow = sheet.getLastRow(); // 如果表格为空,先写入表头 if (lastRow === 0) { sheet.appendRow(report.headers.map((header) => header.name)); } // 将报表数据转换为二维数组,追加到表格 const dataToAppend = report.rows.map((row) => row.cells.map((cell) => cell.value)); sheet.getRange(lastRow + 1, 1, dataToAppend.length, dataToAppend[0].length) .setValues(dataToAppend); console.log('数据已成功追加到表格:%s', spreadsheet.getUrl()); } /** * 转义过滤器参数中的特殊字符 * @param {string} parameter 需要转义的参数 * @return {string} 转义后的参数 */ function escapeFilterParameter(parameter) { return parameter.replace('\\', '\\\\').replace(',', '\\,'); } /** * 将Date对象转换为Google API所需的日期格式 * @param {string} paramName 日期参数名称(startDate/endDate) * @param {Date} value 日期对象 * @return {object} 格式化后的日期对象 */ function dateToJson(paramName, value) { return { [paramName + '.year']: value.getFullYear(), [paramName + '.month']: value.getMonth() + 1, [paramName + '.day']: value.getDate() }; }
关键修改点说明
1. 特定域名过滤实现
- 在
filters数组中新增DOMAIN_NAME==目标域名的过滤规则,和原有的广告客户ID过滤组合使用 - 同时在
dimensions中添加DOMAIN_NAME,方便你在表格中验证数据确实来自指定域名(不需要可直接删除) - 域名参数需通过
escapeFilterParameter转义,避免特殊字符导致过滤失效
2. 追加到现有表格实现
- 替换原代码中新建表格的
SpreadsheetApp.create('AdSense Report')为SpreadsheetApp.openById(spreadsheetId),通过表格ID打开现有表格 - 新增
spreadsheetId(从表格URL的d/和/edit之间提取)和sheetName(可选,指定要追加的标签页)参数 - 通过
sheet.getLastRow()获取表格最后一行,确保数据追加到现有内容下方 - 增加空表判断:如果表格为空,先写入表头;已有表头则直接追加数据
使用方法
调用函数时传入对应参数即可,示例如下:
// 示例调用 generateReport( 'accounts/your-account-id', 'ca-pub-xxxxxxxxxxxxxxxx', 'your-target-domain.com', 'your-spreadsheet-id', 'AdSense数据' // 可选的标签页名称 );
内容的提问来源于stack exchange,提问作者Adrien Hingert
相关产品推荐
相关产品推荐

