Скрипт Google Apps хочет неограниченную область - PullRequest
0 голосов
/ 12 февраля 2019

Простая функция здесь в Google Apps Script:

function driveSearch() {
  // Log the name of every file in the user's Drive whose visibility is anyonewithLink or anyonecanfind
  var files = DriveApp.searchFiles(
    'visibility = "anyoneWithLink" or visibility = "anyoneCanFind"');
  while (files.hasNext()) {
    var file = files.next();
    var owner = file.getOwner().getName();
    var sa = file.getSharingAccess();
    Logger.log(file.getName());
    Logger.log('Owner:'+owner);
    Logger.log("SharingAccess:"+sa);
  }
  }

Он хочет найти общие файлы на моем жестком диске.

Тем не менее, он говорит, что у меня нет прав на запуск DriveApp

Мои разрешения установлены и запрошены правильно, например:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive.readonly",
    "https://www.googleapis.com/auth/drive.metadata.readonly"
  ]
}

Ошибка

У вас нет разрешения на вызов DriveApp.searchFiles,Требуемые разрешения: https://www.googleapis.com/auth/drive (строка 3, файл "Код")

Почему searchFiles требует разрешения на удаление?Я очень обеспокоен непреднамеренным удалением, я не хочу в полной мере.Есть ли что-то еще, что я делаю неправильно?

Наконец, да, мой Gsuite позволяет использовать Google Apps Script.

1 Ответ

0 голосов
/ 12 февраля 2019

Как насчет этого обходного пути?В этом обходном пути конечная точка Drive API напрямую запрашивается UrlFetchApp, и используются следующие 2 области:

Включить Drive API на консоли API

Перед использованием этого сценария включите Drive API следующим образом.

  • В редакторе сценариев
    • Ресурсы -> Проект облачной платформы
    • Просмотр консоли API
    • На начальном этапе нажмите «Исследовать и включить API».
    • С левой стороны нажмите Библиотека.
    • В поле «Поиск API и сервисов» введите «Диск».И нажмите Drive API.
    • Нажмите кнопку Включить.
    • Если API уже включен, не выключайте его.

Пример сценария:

function myFunction() {
  var baseUrl = "https://www.googleapis.com/drive/v3/files";
  var q = 'visibility = "anyoneWithLink" or visibility = "anyoneCanFind"';
  var fields = "files(id,name,owners,permissions),nextPageToken";
  var pageToken = "";
  var results = [];
  var params = {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}};
  do {
    var endpoint = baseUrl + "?pageSize=1000&q=" + encodeURIComponent(q) + "&fields=" +  encodeURIComponent(fields) + "&pageToken=" + pageToken;
    var res = UrlFetchApp.fetch(endpoint, params);
    res = JSON.parse(res.getContentText());
    Array.prototype.push.apply(results, res.files);
    pageToken = res.nextPageToken || "";
  } while (pageToken);
  results.forEach(function(e) {
    Logger.log(e.name);
    Logger.log('Owner: ' + e.owners.map(function(f) {return f.displayName}).join(","));
    Logger.log("SharingAccess: " + e.permissions.map(function(f) {return f.id}).join(","));
  });
}

Примечание:

  • В этом примере сценария журнал совпадает с вашим сценарием.

Ссылки:

Если это был не тот результат, который вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...