Получение скрипта Google Apps для авторизации Fusion Table API
создаю базу данных, которую я надеюсь разместить в Fusion Table, и яm разработка некоторых тестовых функций для взаимодействия с Fusion API. Я'я использую скрипты Google Apps и в значительной степени полагался на другие источники для этого кода. Я'Я провел большую часть дня, исследуя эту проблему, и теперь я застрял.
При запуске addNewColumn () в редакторе скриптов он попадает в "готовься запись в журнале (как я вижу в журнале), затем она проходит процесс аутентификации (каждый раз), затем просто останавливается (и никогда не попадает в "Приведи в исполнение " запись в журнале). Ошибки не выдаются, но он никогда не завершает команду fetch.
При работе в режиме отладки он проходит авторизацию, затем зависает в строке извлечения. Если я нажмушаг в Я получаю ошибку, которая просто говорит:Ошибка OAuth ", Я'Я не совсем уверен, что здесь делать. Любая помощь приветствуется.
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);
}
UpateI»
я упростил мои функции для тестирования, и ямы обнаружили, что просто вставивноль' вместополезная нагрузка» переменная в поле полезной нагрузки тела опций, код успешно создаст безымянный столбец в таблице слияния. Однако, когда я снова вставляю переменную полезной нагрузки - она перестает работать.
Когда он не работает, он либо: запрашивает повторную авторизацию каждый раз, когда я запускаю его из редактора, либо при запуске из состояний веб-приложения "Обнаружена ошибка: для выполнения этого действия требуется авторизация ", Как меняется авторизация полезной нагрузки? Я'Вырезали и вставляли на игровую площадку 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 к 'приложение' или же 'JSON», он будет работать, но все еще непередать полезную нагрузку, как задумано.
var options =
{
"oAuthUseToken":"always",
"oAuthServiceName":service,
"method" : "POST",
"payload" : payload,
'contentType' : 'application'
};