В качестве тестового случая, я пытаюсь скопировать файл из Google Диска в Dropbox с помощью скриптов Google появляетсяЗагрузка в Dropbox из Google Drive
function pushBuild() {
// Setup OAuthServiceConfig
var oAuthConfig = UrlFetchApp.addOAuthService("dropbox");
oAuthConfig.setAccessTokenUrl("https://api.dropbox.com/1/oauth/access_token");
oAuthConfig.setRequestTokenUrl("https://api.dropbox.com/1/oauth/request_token");
oAuthConfig.setAuthorizationUrl("https://www.dropbox.com/1/oauth/authorize");
oAuthConfig.setConsumerKey(ScriptProperties.getProperty("dropboxKey"));
oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("dropboxSecret"));
var fileName = "blah.zip"
var folderName = "upload_dir"
var docs = DocsList.getFolder(folderName).find(fileName);
for(n=0;n<docs.length;++n){
if(docs[n].getName() == fileName){
var ID = docs[n].getId();
var options = {
"oAuthServiceName" : "dropbox",
"oAuthUseToken" : "always",
"method" : "put",
"payload" : docs[n].getBlob().getBytes(),
"contentType" : "application/zip"
};
var response = UrlFetchApp.fetch("https://api-content.dropbox.com/1/files_put/sandbox/upload_dir/" + fileName, options);
Logger.log(response);
}
}
}
запрос авторизации для применения в Dropbox и он говорит мне что я успешно разрешил свое приложение, но когда я проверяю, приложение не входит в список «Мои приложения», файл не был загружен и в журнале нет записей. Каталог «upload_dir» существует как для GD, так и для DB. Я пробовал один и тот же код с типами приложений «Папка приложений» и «Полный Dropbox», но получал тот же результат.
Кроме того, запустив сценарий снова снова запускает страницу авторизации, похожий на
появляться, нажав на кнопку «Разрешить», а затем показывает экран успеха, но приложение не отображается в «Мои приложения ». Выполнение скрипта снова повторяет этот процесс.
Может ли кто-нибудь указать, что я сделал неправильно?
Update
Итак, я в настоящее время пытался осуществить это с помощью отдельных вызовов API, и я до сих пор не имея каких-либо успехов.
function testOAuth() {
var timestamp = getTimestamp();
var nonce = getNonce(timestamp);
var authString = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_signature="' + encodeURIComponent(ScriptProperties.getProperty("dropboxSecret") + '&') + '", oauth_consumer_key="' + ScriptProperties.getProperty("dropboxKey") + '"';
Logger.log(authString)
var options = {
method : "POST",
headers : {"Authorization" : authString}
}
var response = UrlFetchApp.fetch("https://api.dropbox.com/1/oauth/request_token",options);
var params = response.getContentText().split("&");
var map = new Map;
for(i = 0; i < params.length; i++){
var param = params[i].split("=");
map.put(param[0],param[1]);
}
var authStringx = "https://www.dropbox.com/1/oauth/authorize?oauth_token=" + map.get("oauth_token");
Logger.log(authStringx);
var response2 = UrlFetchApp.fetch(authStringx);
Logger.log(response2.getContentText());
var authString2 = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_token="' + map.get("oauth_token") + '" , oauth_signature="' + encodeURIComponent(ScriptProperties.getProperty("dropboxSecret") + '&' + map.get("oauth_token_secret")) + '", oauth_consumer_key="' + ScriptProperties.getProperty("dropboxKey") + '",oauth_timestamp="'+ timestamp +'", oauth_nonce="' + nonce +'"';
Logger.log(authString2);
var options3 = {
"method" : "POST",
"Authorization" : authString2
}
var response3 = UrlFetchApp.fetch("https://api.dropbox.com/1/oauth/access_token", options3);
Logger.log(response3.getContentText());
}
var getTimestamp = function(){
return (Math.floor((new Date()).getTime()/1000)).toString()
}
var getNonce = function(timestamp){
return timestamp + Math.floor(Math.random() * 100000000)
}
Реализация код карты является here. Основная проблема, которую я вижу, заключается в том, что шаг авторизации не вызывает конечную точку авторизации Dropbox (т. Е. Перенаправление браузера не выполняется для авторизации приложения). Если я положу точку останова сразу после строки Logger.log(authStringx);
и вручную просмотрю веб-страницу, вставляющую содержимое authStringx, я получаю экран для авторизации моего приложения. Я принимаю это и получаю сообщение о том, что приложение зарегистрировано в «Мои приложения». Я теперь пусть программа продолжится, и я поздоровался с сообщением
Любые идеи?
Можете ли вы объяснить, что это значит, «запуск сценария снова снова запускает страницу авторизации»? –
«Запуск сценария снова ...» означает выполнение скрипта с помощью кнопки «Выполнить» на панели управления «Сценарии» запускает экран «Dropbox», который проверяет, хотите ли вы запускать настраиваемое приложение. Я обновлю вопрос, чтобы уточнить – Pram