首页 > 解决方案 > 在 1 个 URLFetchApp 调用中向 Google 群组添加一些成员?

问题描述

是否可以使用 1 个 URLFetchApp.fetch 调用将少数成员添加到 Google 组?试图减少我的应用程序中的 fetch 调用量。

我可以为每个成员打 1 个电话,将他们添加到 Google 群组中。

var obj = JSON.parse(jsonStr);
    for(var h=1; h< mailingData.length;h++) {
        obj["members"].push({"email":mailingData[h][column],"role":"MEMBER"});
    }
    jsonStr = JSON.stringify(obj);
    Logger.log(jsonStr);
    fetchArgs.method = "POST";
    fetchArgs.contentType = "application/json";
    fetchArgs.headers = {Authorization: 'Bearer ' + myService.getAccessToken()};
    fetchArgs.muteHttpExceptions=true;
    fetchArgs.payload = jsonStr;
    var url = 'https://www.googleapis.com/admin/directory/v1/groups/'+group+'/members';
    var res = UrlFetchApp.fetch(url, fetchArgs);

这是 jsonStr 的打印输出:

{"members":[
{"email":"devon@myorg.com","role":"MEMBER"}, 
{"email":"jake_smith@myorg.com","role":"MEMBER"}, 
{"email":"robert_keys@myorg.com","role":"MEMBER"}
]}

The error I get when I print the response is the following: 
[19-07-31 16:21:18:451 EDT] {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Missing required field: member"
   }
  ],
   "code": 400,
   "message": "Missing required field: member"
 }
}

标签: google-apps-scripturlfetchgoogle-groups-api

解决方案


在 App Script 中,您可以使用 fetchAll() 函数发出批处理请求 [1]。我在您的代码中实现了 fetchAll,创建了一个空请求数组,并用每个用户的每个请求填充它。假设您收到来自 mailingData 数组的电子邮件、正确的授权令牌和 url 中现有的组电子邮件(我使用这些更改对其进行了测试),则以下代码将起作用:

  var requests = []

  for(var h=1; h< mailingData.length; h++) {

  var data = {"email":mailingData[h][column], "role":"MEMBER"};
  var jsonStr = JSON.stringify(data);
  var request = {};

  request.url = 'https://www.googleapis.com/admin/directory/v1/groups/'+group+'/members'; 
  request.method = "POST";
  request.contentType = "application/json";
  request.headers = {Authorization: 'Bearer ' + myService.getAccessToken()}; 
  request.muteHttpExceptions=true;
  request.payload = jsonStr;

  requests.push(request);
  }

  var response = UrlFetchApp.fetchAll(requests);

[1] https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchAll(Object)


推荐阅读