我正在尝试使用此脚本从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控制台和脚本编辑器中启用了访问权限
答案 0 :(得分:1)
如果您要删除的文件由您域中的某个人拥有,则可以删除它。您需要在用户背后使用服务帐户。
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
了解更多