Google Analytics Data API迁移Apps Script报gapi is not defined
Apps Script 环境适配 GA Data API 方案
不要尝试在Apps Script中加载浏览器端gapi依赖:gapi是专为浏览器前端环境设计的客户端库,无法在Apps Script的V8服务端运行时正常加载执行。Apps Script内置了Google服务调用能力与自动授权机制,无需手动写登录、加载SDK逻辑,直接按以下步骤适配即可:
前置配置
- 打开Apps Script编辑器,在左侧边栏找到「服务」板块,点击「添加服务」按钮
- 在弹出的服务列表中选中Google Analytics Data API,点击确认添加,系统会自动配置好数据读取所需的授权范围,无需手动填写API Key、Client ID
- 首次运行脚本时,会弹出授权确认窗口,使用拥有目标GA4媒体资源读取权限的谷歌账号同意授权即可
适配后可直接运行的代码
以下代码完全匹配原脚本的查询参数,运行后会自动拉取GA数据并写入当前绑定的电子表格:
// 替换为你自己的GA4属性ID const GA_PROPERTY_ID = '295880876'; function syncGaDataToSheet() { // 构造查询参数,和原脚本的查询规则完全一致 const reportRequest = { metrics: [ { name: "sessions" }, { name: "conversions" }, { name: "totalRevenue" } ], dimensions: [ { name: "week" }, { name: "year" } ], dateRanges: [ { startDate: "2021-01-01", endDate: "today" } ] }; try { // 直接调用内置GA服务,无需加载额外依赖 const apiResponse = AnalyticsData.Properties.runReport(reportRequest, `properties/${GA_PROPERTY_ID}`); // 整理返回数据为表格支持的二维数组格式 const sheetData = []; // 写入表头 const tableHeaders = [ ...apiResponse.dimensionHeaders.map(item => item.name), ...apiResponse.metricHeaders.map(item => item.name) ]; sheetData.push(tableHeaders); // 逐行写入明细数据 apiResponse.rows.forEach(row => { const lineData = [ ...row.dimensionValues.map(val => val.value), ...row.metricValues.map(val => val.value) ]; sheetData.push(lineData); }); // 将数据写入电子表格,默认写入第一个工作表 const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; targetSheet.clearContents(); targetSheet.getRange(1, 1, sheetData.length, sheetData[0].length).setValues(sheetData); console.log(`数据同步完成,共导入${sheetData.length - 1}行有效数据`); } catch (error) { console.error(`执行失败:${error.message}`); } }
可选配置说明
- 如果需要定时自动同步数据,可在Apps Script编辑器左侧「触发器」板块,给
syncGaDataToSheet函数添加时间驱动触发器,设置按天/周等频率自动运行即可 - 如果不想使用内置高级服务,也可以通过
UrlFetchApp直接构造POST请求调用GA接口,鉴权令牌通过ScriptApp.getOAuthToken()自动获取,不需要加载任何外部脚本 - 运行前请确认
GA_PROPERTY_ID和你实际要查询的GA4资源ID一致,避免出现权限不足的报错
内容的提问来源于stack exchange,提问作者Riccardo Destratis
相关产品推荐
相关产品推荐

