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

求助:调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:54:51