Получение скрипта Google Apps для авторизации Fusion Table API

Я создаю базу данных, которую надеюсь разместить в Fusion Table, и разрабатываю несколько тестовых функций для взаимодействия с Fusion API. Я использую скрипты Google Apps и в значительной степени полагался на другие источники для этого кода. Я провел большую часть дня, исследуя эту проблему, и теперь я застрял.

При запуске addNewColumn () в редакторе сценариев он попадает в запись журнала «готово к извлечению» (как я вижу в журнале), затем проходит процесс аутентификации (каждый раз), затем просто останавливается (и никогда не добирается до запись журнала «Выполнено». Ошибки не выдаются, но он никогда не завершает команду fetch.

При работе в режиме отладки он проходит авторизацию, затем зависает в строке извлечения. Если я нажимаю «step-in», я получаю сообщение об ошибке «OAuth Error». Я не совсем уверен, что делать здесь. Любая помощь приветствуется.

function googleAuth() {
      var scope = "https://www.googleapis.com/auth/fusiontables";
      var service = 'fusion';
      var oAuthConfig = UrlFetchApp.addOAuthService(service);
      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('{consumer key}');
      oAuthConfig.setConsumerSecret('{secret}');
      return {oAuthServiceName:'fusion', oAuthUseToken:"always"};
}

function addNewColumn(){   
      var p = {
          'name' : "newColumn",
          'type' : "NUMBER"
      };

      Logger.log(addColumn(p));
}


function addColumn(parameters) {
  var url = "https://www.googleapis.com/fusiontables/v1/";
  var fetchArgs = googleAuth(); 

  fetchArgs.method = "POST";
  fetchArgs.payload = parameters;

  //if the fetch arg payload is set to null it will add an unnamed column
  //fetchArgs.payload = null;  

  url += "tables/"+"{table id}"+"/columns";
  url += '?key='+"{key}";

  Logger.log("fetch ready");

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

  Logger.log("fetch executed");

  return Utilities.jsonParse(result);  
}

Upate

Я упростила свои функции для тестирования и обнаружила, что, просто вставив 'null' вместо переменной 'payload' в поле payload тела параметров, код успешно создаст безымянный столбец в таблице fusion. Однако, когда я снова вставляю переменную полезной нагрузки - она перестает работать.

Когда он не работает, он либо: запрашивает повторную авторизацию при каждом запуске его из редактора, либо при запуске из веб-приложения сообщает «Обнаружена ошибка: для выполнения этого действия требуется авторизация». Как меняется авторизация полезной нагрузки? Я вырезал и вставил одну и ту же полезную нагрузку на игровую площадку OAuth2.0, и она отлично работает. Пожалуйста помоги.

function googleAuth() {
      var oAuthConfig = UrlFetchApp.addOAuthService(service);
      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(clientId);
      oAuthConfig.setConsumerSecret(clientSecret);
      return {oAuthServiceName:service, oAuthUseToken:"always"};
}

function addColumn() {
  googleAuth();
  var payload = 
    {
      name : "IT WORKED",
      type : "STRING"
    };
  var options =
    {
      "oAuthUseToken":"always",
      "oAuthServiceName":service,
      "method" : "post",
      "payload":payload
    };
  var url = fetchUrl + "tables/" + fusionId + "/columns" + "?key=" + apiKey;
  var fetchResult = UrlFetchApp.fetch(url, options);
  Logger.log(fetchResult.getContentText());
  return Utilities.jsonParse(fetchResult.getContentText());
}

Обновление № 2

Я нашел способ, который позволяет ему работать без каких-либо ошибок, но он все еще не назначает запрошенное имя и тип для нового столбца. Самое последнее добавление указывало тип контента, как показано ниже. Привязывая contentType к «application» или «json», он будет работать, но по-прежнему не будет передавать полезную нагрузку, как предполагалось.

  var options =
    {
      "oAuthUseToken":"always",
      "oAuthServiceName":service,
      "method" : "POST",
      "payload" : payload,
      'contentType' : 'application'
    };

Ответы на вопрос(3)

Ваш ответ на вопрос