【问题标题】:Using nextpagetoken to pull more than 500 results in Google Apps Script query在 Google Apps Script 查询中使用 nextpagetoken 拉取超过 500 个结果
【发布时间】:2016-03-28 21:09:50
【问题描述】:

在对this post 的有用回复中,我了解到我可以一次从我的域目录中提取最多 500 个用户结果。现在我正在尝试让脚本继续运行并拉取 500 个批次,直到它从域(或者,在本例中为 OU)拉取所有用户并将它们全部添加到同一个电子表格中。

现在我的代码如下所示:

function writeToSpreadsheet(){
  var values = [];
  var users = AdminDirectory.Users.list({
    domain:'klht.org',
    maxResults: 500,
    query: "orgUnitPath=/CleverTeachers/King"
  }).users; 
  for (var i=0; i<users.length; i++){
    values.push([users[i].name.fullName, users[i].primaryEmail]);   
  }
  var spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';
  SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}

我上一篇文章的评论者指出“返回的对象的一部分将是'nextPageToken',您可以将其添加到后续查询或查询中,直到您拥有所有用户。”他包括了以下sn-p:

var usersPage2 = AdminDirectory.Users.list({
                                      domain: 'klht.org',
                                      maxResults: 500,
                                      query: "orgUnitPath=/OU",
                                      pageToken: nextPageToken
                                      }).users;

我发现只需将其附加到上面的代码下方就会引发“ReferenceError:“nextPageToken”未定义。(第 13 行,文件“代码”)”。现在我又被困住了。你能帮我完成这项工作吗?

【问题讨论】:

    标签: javascript google-apps-script google-admin-sdk


    【解决方案1】:

    我在上一个答案中提到的nextPageToken 是第一个查询结果的属性。

    为了最好地处理示例中未确定的最大用户数,您最好将查询包装到 AdminSDK 中,该循环会在没有更多用户可查找时立即终止:

    function writeToSpreadsheet(){
      var values = [],
          users = [],
          userListQuery = {},
          nextPageToken = '',
          listObject = {
              domain:'klht.org',
              maxResults: 500,
              query: "orgUnitPath=/CleverTeachers/King"
          },
          i = 0,
          spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';
    
      do {
    
        if (nextPageToken && nextPageToken !== '') {
          listObject.pageToken = nextPageToken;
        }  
    
        userListQuery = AdminDirectory.Users.list(listObject);
    
        // if there are more users than fit in the query a nextPageToken is returned
        nextPageToken = userListQuery.nextPageToken;
    
        // Add the query results to the users array
        users = users.concat(userListQuery.users);
    
      } while (nextPageToken);
    
      for (i = 0; i < users.length; i += 1) {
        values.push([users[i].name.fullName, users[i].primaryEmail]);   
      }
    
      SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
    }
    

    【讨论】:

    • 如果我的回答满足您的需求,请随时投票并接受我的回答
    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多