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);
}