作爲測試的情況下,我想將文件從谷歌驅動器上覆制使用谷歌腳本上傳到Dropbox的從谷歌驅動
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的應用程序中的授權請求似乎Dropbox和它告訴我我已成功授權我的應用程序,但是當我檢查時,該應用程序不在「我的應用程序」列表中,該文件尚未上傳,並且日誌中沒有條目。目錄「upload_dir」存在於GD和DB上。我已經嘗試了與「應用程序文件夾」和「完整Dropbox」應用程序類型相同的代碼,但獲得相同的結果。
此外,再次運行該腳本再次觸發授權頁面,類似
出現,點擊「允許」,然後顯示成功屏幕,但應用程序沒有在「我的應用程序上市」。再次運行腳本會重複此過程。
任何人都可以指出我做錯了什麼?
更新
所以,我現在想實現這個使用單獨的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內容的網頁,我將獲得授權我的應用程序的屏幕。我接受並收到該應用程序已在「我的應用程序」中註冊的消息。我現在讓程序繼續,我與消息
任何想法招呼?
你能解釋一下這是什麼意思,「再次運行腳本再次觸發授權頁面出現」? – 2013-02-25 14:15:55
「再次運行腳本...」意味着使用「腳本」控制面板上的「運行」按鈕執行腳本會觸發Dropbox屏幕,驗證您是否要運行自定義應用程序。我會更新這個問題,以澄清 – Pram 2013-02-25 14:22:04