W przypadku testowego, Próbuję skopiować plik z Dysku Google do Dropbox za pomocą skryptów Google pojawiaPrzesyłanie do Dropbox z Dysku Google
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);
}
}
}
Żądanie upoważnienie do stosowania w Dropbox i mówi mi że udało mi się autoryzować moją aplikację, ale gdy sprawdzam, aplikacja nie znajduje się na liście "Moje aplikacje", plik nie został przesłany i nie ma żadnych wpisów w dzienniku. Katalog "upload_dir" istnieje zarówno w GD, jak i DB. Próbowałem tego samego kodu w aplikacjach "App Folder" i "Full Dropbox", ale otrzymałem ten sam wynik.
Dodatkowo ponownie ponownie uruchamiając skrypt uruchamia stronę autoryzacji, podobny do
się pojawiać, klikając „Zezwól”, a następnie pokazuje ekran sukces, ale aplikacja nie jest wymieniony w sekcji „Moje aplikacje ". Uruchomienie skryptu ponownie powtarza proces.
Czy ktoś może wskazać, co zrobiłem źle?
Aktualizacja
Tak, mam teraz próbował zaimplementować to za pomocą pojedynczych wywołań API i wciąż nie mają żadnych sukcesów.
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)
}
Implementacja kodu dla mapy to here. Głównym problemem, jaki widzę, jest to, że krok autoryzacji nie wywołuje autoryzacji punktu końcowego Dropbox (tzn. Nie następuje przekierowanie przeglądarki w celu autoryzacji aplikacji). Jeśli umieszczę punkt przerwania zaraz po linii Logger.log(authStringx);
i ręcznie odwiedzę wklejanie strony w zawartości authStringx, otrzymam ekran autoryzujący moją aplikację. Akceptuję to i otrzymuję komunikat, że aplikacja jest zarejestrowana w "Moje aplikacje". I teraz niech program nadal i jestem witany z komunikatem
jakieś pomysły?
Czy możesz wyjaśnić, co to oznacza, "ponowne uruchomienie skryptu ponownie uruchamia stronę autoryzacji"? –
"Ponowne uruchomienie skryptu ..." oznacza, że wykonanie skryptu za pomocą przycisku Uruchom na panelu sterowania Skrypty uruchamia ekran Dropbox, który sprawdza, czy chcesz uruchomić niestandardową aplikację. Zaktualizuję to pytanie, aby wyjaśnić, co się stało: – Pram