如何过滤Google Drive API v3 mimeType?

问题描述 投票:0回答:1

[我编写了一个脚本,该脚本使用DriveApp读取Google Drive,使用SpreadsheetApp在Sheets中记录数据,并使用Google Drive API v3 +服务帐户+ OAuth代表G Suite用户进行更改。

从目标用户的角度(称为Google Drive API v3)而不是运行脚本的帐户(称为DriveApp)搜索Google云端硬盘会很好。我无法使用过滤器。

该查询是使用父文件夹键构建的,文件夹是mimeType =mimeType !=,并传递到函数中。格式为:

var query = "('GoogleDriveFolderKey01' in parents or 'GoogleDriveFolderKey02' in parents) and trashed = false and mimeType = 'application/vnd.google-apps.folder'"

DriveApp函数使用:

files = Drive.Files.list({
  q: query,
  maxResults: 100,
  pageToken: pageToken
});

[Google Drive API v3函数使用:

var url = 'https://www.googleapis.com/drive/v3/files/'
var options = {
  'contentType': 'application/json',
  'method'     : 'get',
  'headers'    : { Authorization: 'Bearer ' + service.getAccessToken() },
  'muteHttpExceptions': true,
  'corpora'    : 'domain',
  'q'          : query,
  'spaces'     : 'drive',
  'pageSize'   : 100,
  'pageToken'  : pageToken
};
var response = UrlFetchApp.fetch(url, options);

var resultParsed = JSON.parse(response.getContentText());
files = resultParsed.files
pageToken = resultParsed.pageToken

DriveApp的结果符合预期,但是Google Drive API v3的结果是:

"files": [
{
  "kind": "drive#file",
  "id": "01abc123_etc",
  "name": "Something something (2021-04-15).pdf",
  "mimeType": "application/pdf"
},
{
  "kind": "drive#file",
  "id": "02ABC4321-qwertyuiop",
  "name": "Super Special Worksheet",
  "mimeType": "application/vnd.google-apps.spreadsheet"
},
{
  "kind": "drive#file",
  "id": "whatever",
  "name": "Copy of V1",
  "mimeType": "application/vnd.google-apps.folder"
},
...

有什么想法吗?

google-apps-script google-drive-api mime-types
1个回答
0
投票

这个答案怎么样?

修改点:

  • 在Drive API v3中,使用“文件:列表”的方法,将corpora, q, space, pageSize, pageToken的值用作查询参数。我认为您的问题的原因是由于此。
  • 在GET方法中,不需要contentType

修改的脚本:

修改脚本后,将如下所示。

var query = "('GoogleDriveFolderKey01' in parents or 'GoogleDriveFolderKey02' in parents) and trashed = false and mimeType = 'application/vnd.google-apps.folder'"

var url = 'https://www.googleapis.com/drive/v3/files'  // Modified
var options = {  // Modified
  'method'     : 'get',
  'headers'    : { Authorization: 'Bearer ' + service.getAccessToken() },
  'muteHttpExceptions': true,
};
url += `?corpora=domain&q=${encodeURIComponent(query)}&spaces=drive&pageSize=100&pageToken=${pageToken}`;  // Added

var response = UrlFetchApp.fetch(url, options);
var resultParsed = JSON.parse(response.getContentText());
files = resultParsed.files
pageToken = resultParsed.pageToken

注意:

  • 此修改后的脚本假定service.getAccessToken()可用于使用Drive API v3中的“文件:列表”方法。
  • 如果发生错误,请从如下所示的URL中删除corpora=domain,然后再次进行测试。

    url += `?q=${encodeURIComponent(query)}&spaces=drive&pageSize=100&pageToken=${pageToken}`;
    

参考:

© www.soinside.com 2019 - 2024. All rights reserved.