自动从n天之前的Google云端硬盘删除文件-拒绝访问:DriveApp

时间:2019-01-08 09:15:27

标签: google-apps-script google-api google-drive-api google-oauth

我正在尝试使用此脚本从Google驱动器文件夹中删除一些文件 在我运行此代码时,它一直说我

  

“访问被拒绝:DriveApp。(第20行,文件“代码”)关闭”

我已经在Internet上阅读了很多,并且已经尝试了我看到的所有解决方案!我在脚本编辑器和Google API控制台开发人员中启用了权限。任何想法?非常感谢你们

function DeleteOldFiles() {
  var Folders = new Array(
    '1RnA55YH_AyPzEVmkAXkaia2iuH17Kkdl'
  );
  var Files;

  Logger.clear();

  for each (var FolderID in Folders) {
    Folder = DriveApp.getFolderById(FolderID)
    Files = Folder.getFiles();

    while (Files.hasNext()) {
      var File = Files.next();

      if (new Date() - File.getLastUpdated() > 1 * 1 * 10 * 10 * 1000) {
        File.setTrashed(true); // Places the file int the Trash folder
        //Drive.Files.remove(File.getId()); // Permanently deletes the file
        Logger.log('File ' + File.getName() + ' was deleted.');
      }
  

“访问被拒绝:DriveApp。(第20行,文件“代码”)关闭”

但是我在api控制台和脚本编辑器中启用了访问权限

2 个答案:

答案 0 :(得分:1)

如果您要删除的文件由您域中的某个人拥有,则可以删除它。您需要在用户背后使用服务帐户。

  1. 从Google Cloud Console创建服务帐户。
  2. 从Google Cloud Console启用Drive API。
  3. 从Google管理控制台添加脚本所需的作用域。 (使用服务帐户ID)
  4. 启用G Suite域范围委派
  5. 下载JSON中的服务帐户私钥。

OAuth服务:

  var JSON_user = {
  "private_key": "your private key",
  "client_email": "your client email"
   };

  function getOAuthService(userId) {
  return OAuth2.createService("Service Account")
  .setTokenUrl('https://accounts.google.com/o/oauth2/token')
  .setPrivateKey(JSON_user.private_key)
  .setIssuer(JSON_user.client_email)
  .setSubject(userId)
  .setPropertyStore(PropertiesService.getScriptProperties())
  .setParam('access_type', 'offline')
  .setScope('https://www.googleapis.com/auth/drive')
  .setParam('approval_prompt', 'auto');
   }

现在您可以模拟这样的用户:

var service = getOAuthService("user email to impersonate");

希望有帮助。

答案 1 :(得分:0)

您需要记住的是,这是私人用户数据。如果要访问私人用户数据,则需要数据所有者的许可才能访问它。在脚本中启用api仅意味着您的脚本将使用该API,并不意味着用户已授予您访问其数据的权限。

  

访问被拒绝

均表示您已通过身份验证的用户无权执行您尝试执行的操作。或您的应用程序未被授予任何权限。

  

Apps脚本会根据对代码的扫描自动确定授权范围(例如访问Google表格文件或Gmail)。被注释掉的代码仍然可以生成授权请求。如果脚本需要授权,则在运行脚本时,您会看到此处显示的授权对话框之一。在此处Authorization

了解更多