求助:调用Google Cloud Identity API如何获取超过50条分页结果
解决Google Cloud Identity API分页获取全部策略数据的问题
你的代码当前只请求了API的第一页数据(默认返回50条),要获取全部228条结果,需要处理API返回的nextPageToken,循环请求直到没有下一页数据为止。以下是修改后的完整代码:
function get_settings() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const settingsSheet = ss.getSheetByName("07. settings api"); const api_key = PropertiesService.getScriptProperties().getProperty('apikey'); let final = []; let nextPageToken = null; // 循环处理分页请求 do { // 构建带分页标记的请求URL let url = `https://cloudidentity.googleapis.com/v1beta1/policies?key=${api_key}`; if (nextPageToken) { url += `&pageToken=${nextPageToken}`; } const params = { method: "get", headers: { "Authorization": 'Bearer ' + ScriptApp.getOAuthToken() } }; const response = UrlFetchApp.fetch(url, params); const json = JSON.parse(response.getContentText()); // 提取当前页的策略数据 if (json.policies && json.policies.length > 0) { for (const policy of json.policies) { const name = policy.name; const setting = policy.setting.type; const value = policy.setting.value; final.push([name, setting, value]); } } // 更新下一页标记,没有则终止循环 nextPageToken = json.nextPageToken; } while (nextPageToken); // 清空表格旧数据,写入完整结果 settingsSheet.getRange(2, 1, settingsSheet.getLastRow() - 1, 3).clearContent(); if (final.length > 0) { settingsSheet.getRange(2, 1, final.length, 3).setValues(final); } }
关键改动说明:
- 新增
nextPageToken变量追踪分页标记,通过do-while循环实现多页遍历 - 每次请求时自动拼接
pageToken参数,获取下一页数据 - 用
json.nextPageToken判断是否还有后续页面,直到返回null终止循环 - 修正了原代码中
params的结构错误:method是顶层属性,不应放在headers内 - 增加旧数据清空逻辑,避免新旧数据重叠
- 处理
json.policies为空的边界情况,防止循环报错
内容的提问来源于stack exchange,提问作者Mark Fraher
相关产品推荐
相关产品推荐

