Là một trường hợp thử nghiệm, tôi đang cố gắng để sao chép một tập tin từ Google Drive Dropbox sử dụng Google ScriptsĐang tải lên Dropbox từ 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);
}
}
}
Yêu cầu ủy quyền cho các ứng dụng trong Dropbox xuất hiện và nó nói với tôi rằng tôi đã ủy quyền thành công ứng dụng của mình, nhưng khi tôi kiểm tra, ứng dụng không có trong danh sách "Ứng dụng của tôi", tệp chưa được tải lên và không có mục nhập nào trong nhật ký. Thư mục "upload_dir" tồn tại trên cả GD và DB. Tôi đã thử cùng một mã với các loại ứng dụng "Thư mục ứng dụng" và "Full Dropbox" nhưng có cùng kết quả.
Thêm vào đó, chạy kịch bản lại một lần nữa gây nên các trang Authorization, tương tự như
xuất hiện, nhấp vào "Cho phép", sau đó cho thấy màn hình thành công nhưng ứng dụng không được liệt kê trong "Ứng dụng của tôi ". Chạy kịch bản một lần nữa lặp lại quá trình.
Có ai có thể chỉ ra những gì tôi đã làm sai?
Cập nhật
Vì vậy, bây giờ tôi đã cố gắng để thực hiện điều này bằng cách sử dụng các cuộc gọi api cá nhân và đang vẫn không có bất kỳ thành công.
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)
}
Việc triển khai mã cho bản đồ là here. Vấn đề chính mà tôi có thể thấy là bước ủy quyền không gọi điểm kết thúc cho phép Dropbox (tức là không có chuyển hướng trình duyệt nào diễn ra để cho phép ứng dụng). Nếu tôi đặt điểm ngắt ngay sau dòng Logger.log(authStringx);
và truy cập thủ công dán trang web trong nội dung của authStringx, tôi nhận được màn hình cho phép ứng dụng của tôi. Tôi chấp nhận điều đó và nhận được thông báo rằng ứng dụng được đăng ký trong "Ứng dụng của tôi". Bây giờ tôi để cho các chương trình tiếp tục và tôi đang chào đón với thông điệp
Bất kỳ ý tưởng?
Bạn có thể giải thích điều này có nghĩa là "chạy lại tập lệnh một lần nữa sẽ kích hoạt trang Ủy quyền xuất hiện" không? –
"Chạy lại tập lệnh ..." nghĩa là thực thi tập lệnh bằng nút Chạy trên bảng điều khiển Tập lệnh kích hoạt màn hình Dropbox xác minh xem bạn có muốn chạy ứng dụng tùy chỉnh không. Tôi sẽ cập nhật câu hỏi để làm rõ – Pram