Как добавить папку Google Drive в раздел "Мой диск" для других пользователей
У меня есть принадлежащая мне структура иерархических папок и вложенных папок на Google Диске, и я хочу автоматически добавить ее в раздел "Мой диск" для всех пользователей в нашем домене Google Apps для бизнеса.
Как я могу это сделать? Я слышал о Google Apps Script и функции AddToFolder. Не могли бы вы мне помочь пожалуйста?
Заранее спасибо.
3 ответа
Это очень легко сделать, если каждый пользователь может просто получить доступ к ссылке и авторизовать скрипт (который вы создаете) для выполнения работы за него (поместите общую папку в свою корневую папку).
Но если пользователей много, вы являетесь администратором домена, и вы действительно хотите делать все это автоматически, без каких-либо действий, это возможно, но, вероятно, очень сложно. Я имею в виду, что вам нужно получить прямой доступ к Drive API и установить oAuth 2.0 для олицетворения ваших пользователей, потому что встроенный в DocsList API скриптов приложений не имеет этой функции олицетворения. Если вы действительно хотите этого, взгляните на этот другой вопрос.
Сначала настройте простое веб-приложение. В редакторе скриптов Google App даже есть шаблон, который поможет вам в этом.
Во-вторых, реализовать что-то вроде следующего и вызвать его из функции обработчика.
function addRequiredFolders() {
var root = DocsList.getRootFolder();
var folderIds = ["somefolderid", "anotherfolderid"];
folderIds.map( function(id) { DocsList.getFolderById(id).addToFolder(root) } );
}
Я проверил вариант этого до этого момента. Следующим шагом будет опубликовать веб-приложение для вашего домена и разослать его по электронной почте людям или распространить другим способом. Я предполагаю, что у них будет неприятный шаг, связанный с необходимостью предоставить веб-приложению разрешение на доступ к их документам.
Прямо сейчас я реализовал эту функцию с помощью "API Списка документов Google". Я знаю, что этот API устарел, но пока он работает.
(код не закончен)
(...)
//var user = Session.getActiveUser().getUserLoginId() OR
var user = e.parameter.user_email
var TB_folder = e.parameter.TB_folder
var TB_sub_folder = e.parameter.TB_sub_folder
var base = 'https://docs.google.com/feeds/';
var fetchArgs = googleOAuth_('docs', base);
fetchArgs.method = 'POST';
var rawXml = "<?xml version='1.0' encoding='UTF-8'?>" + "<entry xmlns='http://www.w3.org/2005/Atom'>"
+ "<category scheme='http://schemas.google.com/g/2005#kind' "
+ "term='http://schemas.google.com/docs/2007#folder'/>"
+ "<title>" + TB_folder +"</title>"
+ "</entry>";
fetchArgs.payload = rawXml;
fetchArgs.contentType = 'application/atom+xml';
fetchArgs.contentLength = 245;
// POST a https://docs.google.com/feeds/default/private/full
var url = base + user + '/private/full/?v=3&alt=json';
var content = UrlFetchApp.fetch(url, fetchArgs).getContentText()
var json = Utilities.jsonParse(content)
var folder = json.entry.gd$resourceId.$t // -> I get "folder:folder_id"
var id_folder = folder.split(':')[1]
var folder_created_by = json.entry.gd$lastModifiedBy.email.$t
var folder_owner = json.entry.author['0'].email.$t
(...)
Теперь у вас есть идентификатор папки и вы можете использовать его для создания другой подпапки или файла...
Вам нужна эта функция:
//Google oAuth
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("XXXXXXXX");
oAuthConfig.setConsumerSecret("XXXXXXXXXXXXXXXXXXX");
//oAuthConfig.setConsumerKey("anonymous");
//oAuthConfig.setConsumerSecret("anonymous");
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
Вы можете создать файл или добавить пользователя в файл ( добавить Wriker).
Теперь я хочу реализовать эту функциональность с помощью " Drive API " . Если бы кто-то сделал это, было бы хорошо получить некоторую помощь.
Sergi