You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:35:03