Google drive api 如何在Google Apps脚本中使用UrlFetchApp发出驱动器API批处理请求

Google drive api 如何在Google Apps脚本中使用UrlFetchApp发出驱动器API批处理请求,google-drive-api,google-apps-script,Google Drive Api,Google Apps Script,我想知道如何在Google Apps脚本中使用UrlFetchApp发出驱动器API批处理请求。我读过谷歌的文档,但我还是不清楚。我想将下面的代码转换为接受多个文件ID的批处理请求 var url = 'https://www.googleapis.com/drive/v2/files/FILEID/permissions'; var data = { "role":"owner", "type":"user", "value": NEWOWNER }; var

我想知道如何在Google Apps脚本中使用UrlFetchApp发出驱动器API批处理请求。我读过谷歌的文档,但我还是不清楚。我想将下面的代码转换为接受多个文件ID的批处理请求

var url = 'https://www.googleapis.com/drive/v2/files/FILEID/permissions';

var data = {
    "role":"owner",
    "type":"user",
    "value": NEWOWNER
  };

var response = UrlFetchApp.fetch(url, {
  headers: {
    Authorization: 'Bearer ' + AUTHORIZATIONTOKEN
  },
  method: 'post',
  contentType: 'application/json',
  payload: JSON.stringify(data),
});
var result = JSON.parse(response.getContentText());
我尝试使用
https://www.googleapis.com/drive/v2/files?id=FILEID1&id=FILEID2/permissions
但它似乎不起作用。我刚才看到了将每个文件请求嵌套到批处理请求的描述,但到目前为止,我还没有找到正确执行该操作的语法示例


一些见解会有所帮助。谢谢

这个示例脚本怎么样?当我看到时,我发现您想要执行批处理请求的API调用是使用
multipart/mixed
发送的。通过这个,我可以为Google Apps脚本创建一个示例脚本,如下所示

示例脚本: 注:
  • 请为您的环境修改此示例脚本
  • 如果您需要更多API,请将元素添加到“body”数组中
  • 它假定您已经启用了驱动器API
  • 驱动器API在一个批处理请求中最多可以使用100个调用。这是一个限制
  • 对于批处理请求,每个API调用都不能保证排序

在我的环境中,我证实了这一点。但是如果这在你的环境中不起作用,请告诉我。我想修改。

是的,你是对的。我的脚本可以工作,但问题是我还没有找到如何将其转换为批处理请求,即在每个请求中处理多个文件ID。我需要处理数百个文件,所以我正在研究批处理作为解决方案。到目前为止,这是我发现的,但它不包括如何使用Google Apps脚本执行它。@f k我为我的误解感到抱歉。我想研究一下。我真的很抱歉,没问题。谢谢你的帮助。如果我找到答案,我也会在这里更新。@f k谢谢。另外,我希望在找到它时进行更新。@f k很抱歉我的回复太晚了。我更新了我的答案。请确认一下。
function myFunction() {
  var body = [
    {
      method: "POST",
      endpoint: "https://www.googleapis.com/drive/v3/files/### fileId 1 ###/permissions",
      requestBody: {
       "role": "owner",
       "type": "user",
       "emailAddress": NEWOWNER
      }
    },
    {
      method: "POST",
      endpoint: "https://www.googleapis.com/drive/v3/files/### fileId 2 ###/permissions",
      requestBody: {
       "role": "owner",
       "type": "user",
       "emailAddress": NEWOWNER
      }
    }
  ];

  var boundary = "xxxxxxxxxx";
  var contentId = 0;
  var data = "--" + boundary + "\r\n";
  for (var i in body) {
        data += "Content-Type: application/http\r\n";
        data += "Content-ID: " + ++contentId + "\r\n\r\n";
        data += body[i].method + " " + body[i].endpoint + "\r\n";
        data += body[i].requestBody ? "Content-Type: application/json; charset=utf-8\r\n\r\n" : "\r\n";
        data += body[i].requestBody ? JSON.stringify(body[i].requestBody) + "\r\n" : "";
        data += "--" + boundary + "\r\n";
  }
  var payload = Utilities.newBlob(data).getBytes();
  var options = {
    method: "post",
    contentType: "multipart/mixed; boundary=" + boundary,
    payload: payload,
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true,
  };
  var res = UrlFetchApp.fetch("https://www.googleapis.com/batch", options).getContentText();
  Logger.log(res);
}