我编写了一个脚本,该脚本使用DriveApp读取Google Drive,使用SpreadsheetApp在Sheets中记录数据,并使用Google Drive API v3 +服务帐户+ OAuth代表G Suite用户进行更改。
从目标用户角度(称为Google Drive API v3)搜索Google云端硬盘,而不是运行脚本的帐户(称为DriveApp),这将是不错的选择。我无法使用过滤器。
该查询是使用父文件夹键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 AppsScript中关注以下内容:
var options = {
'contentType': 'application/json',
'method' : 'get',
'headers' : { Authorization: 'Bearer ' + service.getAccessToken() },
'muteHttpExceptions': true,
'pageSize' : 100
};
url += '?q=' + encodeURIComponent(query);
if ( pageToken.length > 0 ) url += '&pageToken=' + pageToken;
var response = UrlFetchApp.fetch(url, options);
这个答案怎么样?
corpora, q, space, pageSize, pageToken
用作查询参数。我认为您的问题的原因是由于此。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中的“文件:列表”方法。如果发生错误,请corpora=domain
从如下所示的URL中删除并再次进行测试。
url += `?q=${encodeURIComponent(query)}&spaces=drive&pageSize=100&pageToken=${pageToken}`;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句