Я написал сценарий, который использует DriveApp для чтения Google Диска, SpreadsheetApp для регистрации данных в таблицах и Google Drive API v3 + сервисный аккаунт + OAuth для внесения изменений от имени пользователей G Suite.
Это будет Было бы неплохо выполнять поиск на Google Диске с точки зрения целевого пользователя (вызывая Google Drive API v3) вместо учетной записи, в которой запущен скрипт (вызывая 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);