Я строю базу данных, которую я надеюсь разместить в таблице Fusion, и я разрабатываю некоторые тестовые функции для взаимодействия с API Fusion. Я использую скрипты Google Apps и сильно полагаюсь на другие источники для этого кода. Я провел большую часть дня, исследуя эту проблему, и теперь я застрял.Получение скрипта Google Apps для авторизации API таблицы Fusion
При запуске addNewColumn() в редакторе скриптов он переходит в запись журнала «fetch ready» (как я вижу в журнале), затем он проходит процесс аутентификации (каждый раз), а затем просто останавливается (и никогда не попадает в запись журнала «fetch execute»). Ошибок нет, но он никогда не завершает команду 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
я упростил свои функции, чтобы проверить, и я обнаружил, что просто вставив «нулевой» вместо переменной «полезной» в поле полезной нагрузки body options, код успешно создаст безымянный столбец в таблице слияния. Однако, когда я снова вставляю переменную полезной нагрузки, она перестает работать.
Когда он не работает, он либо: требует повторного авторизации при каждом запуске его из редактора, либо при запуске из веб-приложения говорится: «Ошибка: авторизация необходима для выполнения этого действия». Как разрешение на изменение полезной нагрузки? Я вырезал и вставил ту же самую полезную нагрузку в игровую площадку 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());
}
Update # 2
Я нашел способ, который позволяет запустить его без каких-либо ошибок, но он по-прежнему не назначает запрошенное имя и тип для нового столбца. Последнее добавление указывало тип содержимого, как показано ниже. Заставляя contentType на «приложение» или «json», он будет работать, но все равно не передает полезную нагрузку, как предполагалось.
var options =
{
"oAuthUseToken":"always",
"oAuthServiceName":service,
"method" : "POST",
"payload" : payload,
'contentType' : 'application'
};
Спасибо. Этот сайт, где я получил некоторые из моих мотивов, но он использует клиентский логин и sql (которые, как я считаю, устарели). Я все еще боюсь ошибки. –
На самом деле, я широко использовал эту библиотеку. К сожалению, это все еще проблема. См. Мою обновленную (и уточненную) нить выше. В очередной раз благодарим за помощь. –