Cree un cuerpo POST usando Google Apps Script

Estoy tratando de crear un script de Google Apps que agregue un nuevo propietario al calendario de Google del usuario. El primer bloque de código a continuación funciona correctamente (devuelve la ACL del calendario en formato JSON). ¿Cómo puedo agregar un nuevo usuario a la ACL usando Google Apps Script? El segundo bloque de código muestra mi intento de insertar una nueva regla en la ACL.

function getCalendarACL() {

  // Get Calendar ID, script user's email, and the API Key for access to Calendar API
  var calId = 'abc123@group.calendar.google.com';
  var userEmail = Session.getActiveUser().getEmail();
  var API_KEY = '012345abc123';  

  // Get authorization to access the Google Calendar API
  var apiName = 'calendar';
  var scope = 'https://www.googleapis.com/auth/calendar';
  var fetchArgs = googleOAuth_(apiName, scope);

  // Get the authorization information and the given calendar
  fetchArgs.method = 'GET';

  // Get the requested content (the ACL for the calendar)
  var base = 'https://www.googleapis.com/calendar/v3/calendars/';
  var url = base + calId + '/acl?key=' + API_KEY;
  var content = UrlFetchApp.fetch(url, fetchArgs).getContentText();
  Logger.log(content); 
}

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

Aquí está el segundo bloque de código que devuelve el error del servidor 400 ("error de análisis"):

 function insertRule() {

  // Get Calendar ID, script user's email, and the API Key for access to Calendar API
  var calId = 'abc123@group.calendar.google.com';
  var userEmail = Session.getActiveUser().getEmail();
  var API_KEY = '012345abc123'; 
  var newUserEmail = 'person@gmail.com'; 

  // Get authorization to access the Google Calendar API
  var apiName = 'calendar';
  var scope = 'https://www.googleapis.com/auth/calendar';
  var fetchArgs = googleOAuth_(apiName, scope);

  // Get the authorization information and the given calendar
  fetchArgs.method = 'GET';

  // Create the POST request body
  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:scope type='user' value='"+newUserEmail+"'></gAcl:scope>" +
           "<gAcl:role='writer'>" +
           "</gAcl:role>" +
           "</entry>";

  // Get the requested content (the ACL for the calendar)
  var base = 'https://www.googleapis.com/calendar/v3/calendars/';
  var url = base + calId + '/acl?key=' + API_KEY;
  var content = UrlFetchApp.fetch(url, fetchArgs).getContentText();
  Logger.log(content); 
}

preguntado el 27 de julio de 12 a las 20:07

¿Cómo te fue con este @KarBytes? ¿La codificación de la variable de correo electrónico en la respuesta a continuación resolvió su problema de agregar un usuario o logró resolverlo de alguna otra manera? -

Codificar la variable de correo electrónico no cambió nada. Creo que rawXML podría necesitar encabezados. Recibí un error de servidor 404 cuando usé la versión 2 de la API: var base = 'https://www.googleapis.com/calendar/v2/calendars/'; -

2 Respuestas

Codificaría la variable newUserEmail como este encodeURIComponent(newUserEmail) al hacer la cadena rawXML y luego volver a intentarlo.

Respondido 28 Jul 12, 08:07

Tu estas usando:

  fetchArgs.method = 'GET';

pero en la página Acl:insert encontrada aquí dice lo siguiente:

Solicitud HTTP

POST https://www.googleapis.com/calendar/v3/calendars/calendarId/acl

Entonces, debería ser,

  fetchArgs.method = 'POST';

Respondido 05 ago 12, 04:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.