Добавить средство записи в электронную таблицу через "API списка документов Google"
Я пишу скрипт в Google Aps (GAS) и мне нужно добавить пользователя (/ writer) (администратора домена) в таблицу другого пользователя.
Скрипт запускается / вызывается с правами администратора.
Сначала я использую "Административный доступ к Службам Google для олицетворения пользователя домена", получаю список его документов (электронных таблиц) и получаю идентификатор документов.
var oauthConfig = UrlFetchApp.addOAuthService ("docs"); oauthConfig.setAccessTokenUrl ("https://www.google.com/accounts/OAuthGetAccessToken"); oauthConfig.setRequestTokenUrl ("https://www.google.com/accounts/OAuthGetRequestToken? (...)
Эта часть работает нормально и получить желаемый идентификатор.
Теперь я хочу добавить к себе (administrator@example.com) к этому документу
Я пытаюсь это:
var optAdvancedArgs = {
"contentType": "application/atom+xml",
"method": "POST",
"headers": { "GData-Version": "3.0" },
"oAuthServiceName": "docs",
"oAuthUseToken": "always",
};
var url_set = "https://docs.google.com/feeds/" + пользователь + "/ private / full / document:" + matriu2 [0] [6] + '/acl/user:administrator@example.com'
var result = UrlFetchApp.fetch (url_set, optAdvancedArgs);
"пользователь" является владельцем документа, активный пользователь (Session.getActiveUser().getUserLoginId()) и "matriu2[nm][6]" - это идентификатор документа.
Это не работает,
Есть идеи?
Sergi
2 ответа
Потратив час времени, вот что я получил. Эта функция поделится документом с вами (администратором домена). Вы можете изменить другие параметры в xml, чтобы иметь права на чтение, запись и т. Д.
function shareDocumentToMe(){
var base = 'https://docs.google.com/feeds/';
var fetchArgs = googleOAuth_('docs', base);
var writerID = Session.getEffectiveUser().getEmail();
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='writer'/>"
+"<gAcl:scope type='user' value='"+writerID+"'/>"
+"</entry>";
fetchArgs.payload = rawXml;
fetchArgs.contentType = 'application/atom+xml';
var url = base + 'user@yourdomain.com/private/full/'+yourDocumentID+'/acl?v=3&alt=json';
var content = UrlFetchApp.fetch(url, fetchArgs).getContentText();
Logger.log(content);
}
//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("anonymous");
oAuthConfig.setConsumerSecret("anonymous");
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
Я разместил тот же код на моем сайте Google. Вы можете посмотреть здесь. https://sites.google.com/site/appsscripttutorial/urlfetch-and-oauth
Я бы никогда не нашел это. Большое спасибо.
Я изменил следующее (var url = ...):
'user@yourdomain.com/private/full/'
отuser + '/private/full/'
где
user = Session.getActiveUser (). getUserLoginId ()
а также в googleOAuth_
Я положил значения моего домена:
oAuthConfig.setConsumerKey ("mydomain.com");
oAuthConfig.setConsumerSecret ("xXxXxXxXxXxXxXxXx");
И это работает отлично!
Я думаю, что очень интересно, что администратор домена может действовать от имени пользователя (как только мы дадим разрешение) с некоторыми документами организации, но они были созданы пользователем.
Также пользовательские ресурсы (документы, электронные таблицы,...), чтобы программа могла получить доступ (запущенный с разрешениями администратора), не требуя внимания (или у вас недостаточно опыта) пользователя, например, копии безопасности,...
В моем случае я создаю программу для оценки формы Документов Google, созданную пользователем (учителем), так же как и гаджет "Flubaroo", но в графической среде (GUI), запрограммированной Сайтами Google с помощью Google Apps Script (GAS).,
Еще раз спасибо за ваше время.
Sergi