Google Drive Script - Изменить владельца папок Ошибка OAuth

Я работаю над сценарием, чтобы изменить владельца папок. Но я застрял с "oAuth error". Я что-то упустил в своем коде?

function getFolders(){
 var me = Session.getEffectiveUser().getEmail();
 var folders = DocsList.getAllFolders();
  for (var i in folders) {
  var oldOwnerEmail = (folders[i].getOwner());
   if (oldOwnerEmail != me) { 
   changeFolderOwner(me, folders[i], oldOwnerEmail);
  }
 }
}

function changeFolderOwner(newOwnerEmail, folder, oldOwnerEmail){
 var base = 'https://docs.google.com/feeds/';
 var fetchArgs = googleOAuth_('docs', base);
 fetchArgs.method = 'POST';
 var rawXml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>"
 +"<category scheme='http://schemas.google.com/g/2005#kind' "
 +"term='http://schemas.google.com/acl/2007#accessRule'/>"
 +"<gAcl:role value='owner'/>"
 +"<gAcl:scope type='user' value='"+newOwnerEmail+"'/>"
 +"</entry>";
 fetchArgs.payload = rawXml;
 fetchArgs.contentType = 'application/atom+xml';

 Logger.log(folder.getName());
 Logger.log(oldOwnerEmail);
 Logger.log(folder.getId());

 var url = base + encodeURIComponent(oldOwnerEmail) + '/private/full/'+folder.getId()+'/acl?v=3&alt=json';
 var content = UrlFetchApp.fetch(url, fetchArgs).getContentText(); 
}

function googleOAuth_(name,scope) {
 var oAuthConfig = UrlFetchApp.addOAuthService(name);
 oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
 oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
 oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
 oAuthConfig.setConsumerKey("anonymous");
 oAuthConfig.setConsumerSecret("anonymous");
 return {oAuthServiceName:name, oAuthUseToken:"always"};
}

После нажатия авторизации я получаю сообщение об ошибке "Ошибка OAuth" при запуске отладки. На этой линии:

var content = UrlFetchApp.fetch(url, fetchArgs).getContentText();

1 ответ

В Google Apps Script, как правило, нет необходимости использовать OAuth, если вы не пытаетесь подключиться к внешней службе, что здесь не так.

В этом случае вы хотите использовать сервис DriveApp (вместо DocsList), который имеет класс Folder с методом setOwner().

Примерно так изменится владение всеми доступными папками:

var folders = DriveApp.getFolders();
while (folders.hasNext()) {
  var folder = folders.next();
  folder.setOwner(newOwnerEmailAddress);
}
Другие вопросы по тегам