Uzyskanie skryptu Aplikacji Google do autoryzacji API Fusion Table

Buduję bazę danych, którą mam nadzieję hostować w tabeli Fusion i opracowuję kilka funkcji testowych do współpracy z interfejsem API Fusion. Używam skryptów Aplikacji Google i w znacznym stopniu polegałem na innych źródłach tego kodu. Spędziłem większość dnia na badaniu tego problemu i utknąłem.

Gdy uruchamiasz addNewColumn () w edytorze skryptów, trafia on do wpisu dziennika „fetch ready” (jak widzę w dzienniku), następnie przechodzi przez proces uwierzytelniania (za każdym razem), a następnie zatrzymuje się (i nigdy nie dociera do wpis dziennika „pobierz”. Nie ma żadnych błędów, ale nigdy nie wypełnia polecenia pobierania.

Gdy działa w trybie debugowania, przechodzi przez autoryzację, a następnie zawiesza się w linii pobierania. Jeśli kliknę „step-in”, pojawia się błąd, który po prostu mówi „OAuth Error”. Nie jestem pewien, co tu robić. Każda pomoc byłaby bardzo mile widziana.

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

Uprościłem moje funkcje do testowania i odkryłem, że po prostu wstawiając „null” w miejsce zmiennej „payload” w polu ładunku treści opcji, kod z powodzeniem utworzy bezimienną kolumnę w tabeli fuzji. Jednak po ponownym wstawieniu zmiennej ładunku - przestaje działać.

Gdy nie działa, albo: prosi o ponowną autoryzację za każdym razem, gdy uruchamiam go z edytora, albo gdy uruchamia się z aplikacji internetowej stwierdza: „Wystąpił błąd: autoryzacja jest wymagana do wykonania tej akcji”. W jaki sposób autoryzacja zmiany ładunku? Wyciąłem i wkleiłem dokładnie ten sam ładunek na plac zabaw OAuth2.0 i działa on doskonale. Proszę pomóż.

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

Aktualizacja # 2

Znalazłem sposób, który pozwala mu działać bez błędów, ale nadal nie przypisuje żądanej nazwy i typu do nowej kolumny. Najnowszy dodatek określał typ zawartości, jak pokazano poniżej. Zmuszając contentType do „aplikacji” lub „jsona”, uruchomi się, ale nadal nie przekaże ładunku zgodnie z przeznaczeniem.

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

questionAnswers(3)

yourAnswerToTheQuestion