使用Google Apps Script调用Search Console API获取数据失败求助
解决Google Apps Script访问Search Console数据的问题
你的两段代码问题排查
第一段gapi代码的问题
这段是浏览器端JavaScript的写法,Google Apps Script是服务器端运行环境,根本不支持gapi.auth2、gapi.client这类浏览器API,完全没法在GAS里跑。
第二段UrlFetch代码的问题
- 参数放错地方:
startDate、endDate是查询请求的核心参数,得放在请求体里,不是HTTP头里 - 格式错误:
contentType是UrlFetchApp的配置项,不属于请求头字段 - 日期笔误:
20019-10-01多写了一个0,应该是2019-10-01 - 站点URL格式不对:
[SITE_URL]要替换成Search Console里注册的完整站点地址,比如https://www.your-domain.com/(必须带末尾斜杠) - 缺OAuth2授权实现:
getService()函数没定义,GAS访问Search Console必须通过OAuth2完成授权
正确实现步骤
1. 安装OAuth2库
在GAS编辑器里,点击「资源」→「库」,输入库ID 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,选最新版本添加。
2. 完整可运行代码
// 初始化OAuth2授权服务 function getService() { return OAuth2.createService('SearchConsole') .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') .setTokenUrl('https://accounts.google.com/o/oauth2/token') .setClientId('你的客户端ID') // 从Google Cloud控制台获取 .setClientSecret('你的客户端密钥') // 从Google Cloud控制台获取 .setCallbackFunction('authCallback') .setScope('https://www.googleapis.com/auth/webmasters.readonly') .setCache(CacheService.getUserCache()) .setPropertyStore(PropertiesService.getUserProperties()); } // 授权回调处理 function authCallback(request) { var isAuthorized = getService().handleCallback(request); return HtmlService.createHtmlOutput(isAuthorized ? '授权成功!' : '授权失败!'); } // 触发授权(首次运行必须执行) function authorize() { var service = getService(); if (!service.hasAccess()) { var authorizationUrl = service.getAuthorizationUrl(); // 弹出授权窗口 var html = HtmlService.createHtmlOutput('<a href="' + authorizationUrl + '" target="_blank">点击授权访问Search Console</a>'); SpreadsheetApp.getUi().showModalDialog(html, '授权提示'); } else { Logger.log('已完成授权'); } } // 查询Search Console数据 function searchConsoleQuery() { var service = getService(); if (!service.hasAccess()) { Logger.log('先执行authorize函数完成授权'); return; } var siteUrl = 'https://www.your-domain.com/'; // 替换成你的站点地址 var apiUrl = 'https://www.googleapis.com/webmasters/v3/sites/' + encodeURIComponent(siteUrl) + '/searchAnalytics/query'; // 自定义查询参数,可按需调整 var payload = { startDate: '2019-10-01', endDate: '2019-10-10', dimensions: ['query'], // 可选:query、page、country、device、date rowLimit: 1000 }; var options = { method: 'POST', contentType: 'application/json', headers: { 'Authorization': 'Bearer ' + service.getAccessToken() }, payload: JSON.stringify(payload), muteHttpExceptions: true }; var response = UrlFetchApp.fetch(apiUrl, options); var json = JSON.parse(response.getContentText()); // 打印结果到日志 Logger.log(JSON.stringify(json, null, 2)); // 可选:把结果写入表格 // var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // sheet.getRange(1,1).setValue('查询词'); // sheet.getRange(1,2).setValue('点击量'); // sheet.getRange(1,3).setValue('展示量'); // json.rows.forEach((row, idx) => { // sheet.getRange(idx+2,1).setValue(row.keys[0]); // sheet.getRange(idx+2,2).setValue(row.clicks); // sheet.getRange(idx+2,3).setValue(row.impressions); // }); }
3. 配置Google Cloud项目
- 打开Google Cloud控制台,创建/选择关联项目
- 启用「Search Console API」
- 创建「OAuth客户端ID」,应用类型选「桌面应用」(如果在表格里运行)
- 把生成的客户端ID、密钥替换到代码里
注意事项
- 首次运行必须先执行
authorize函数完成授权 - 站点URL要和Search Console里注册的完全一致,包括协议和末尾斜杠
- 查询参数可根据需求调整,比如加
filters筛选特定设备、国家
内容的提问来源于stack exchange,提问作者PaulFaguet
相关产品推荐
相关产品推荐

