2016-11-16 4 views
0

드라이브에서 보관 용 계정으로 파일을 보내고 싶지만 몇 가지 문제가 있습니다.Google Apps 스크립트를 보관 용 계정에 연결

다음 URL을 참조하십시오 다음 스크립트를 다시 실행 : 나는 메시지가 인증 URL로 입력 할 수 https://www.dropbox.com/1/oauth/authorize?oauth_token=xxxxxxx

내가 할을, 응용 프로그램이 드롭 박스에 추가 (또는 적어도 내가 메시지를 받게 그 말),하지만 스크립트를 다시 실행하면 같은 메시지가 다시 나타납니다. Dropbox에 연결된 앱 목록을 확인한 경우이 앱이 표시되지 않습니다. 다음을 시도했습니다. 최대한 가깝게 ... 내가 잘못하고있는 것은 무엇입니까?

function Gmail2Dropbox() { 
    var service = getDropboxService(); 

    if (service.hasAccess()){ 

    var folderName = "foldername";  
    var folder = DriveApp.getFoldersByName(folderName).next(); 
    var files = folder.getFiles(); 

    while (files.hasNext()){ 
     var file = files.next(); 
     var fileName = file.getName(); 
     Logger.log(fileName); 

     var options = { 
     "oAuthServiceName" : "dropbox", 
     "oAuthUseToken" : "always", 
     "method" : "put", 
     "payload" : file.getBlob().getBytes(), 
     "contentType" : file.getMimeType()  
     }; 

     var response = UrlFetchApp.fetch("https://api-content.dropbox.com/1/files_put/sandbox/" + folderName + "/" + fileName, options); 

     Logger.log(response); 
    } 
} 

    else { 
    var authorizationUrl = service.authorize(); 
    Logger.log('Please visit the following URL and then re-run the script: ' + authorizationUrl); 
    } 
} 

function getDropboxService() { 

    var dropboxKey = "dropKey"; 
    var dropboxSecret = "dropSecret"; 

    var service = OAuth1.createService('dropbox'); 
    service.setRequestTokenUrl("https://api.dropbox.com/1/oauth/request_token"); 
    service.setAuthorizationUrl("https://www.dropbox.com/1/oauth/authorize"); 
    service.setAccessTokenUrl("https://api.dropbox.com/1/oauth/access_token"); 
    service.setConsumerKey(dropboxKey); 
    service.setConsumerSecret(dropboxSecret); 
    service.setCallbackFunction('authCallback'); 
    service.setPropertyStore(PropertiesService.getScriptProperties()); 
    return service; 
} 

function authCallback(request) { 
    var service = getDropboxService; 
    var isAuthorized = service.handleCallback(request); 
    if (isAuthorized) { 
    return HtmlService.createHtmlOutput('Success! You can close this page.'); 
    } else { 
    return HtmlService.createHtmlOutput('Denied. You can close this page'); 
    } 
} 

답변

1

IFTTT 체크 아웃은 Maker Channel입니다. IFTTT는 수백 가지 서비스를 서로 연결하여 서비스 간 연결을 쉽게 만듭니다. 이것으로 OAuth가 필요 없으며 사용하기가 훨씬 쉽습니다. 그들은 Drive to Dropbox를 직접 지원하지 않으므로 API 인 Maker Channel을 사용해야합니다. 애플릿 제작자 채널을 보관 용으로 설정하면 POST API 호출을 통해 제작자 채널에 파일을 업로드 할 수 있습니다. 그것은 매우 사용하기 쉽습니다 그리고 나는 그것에 대한 기능을 만들었습니다. 는 보관 측에 올 때 당신이 IFTTT에 애플릿을 설정할 때

function sendToMaker(makerKey,eventName,value1,value2,value3){ 
    var url = 'https://maker.ifttt.com/trigger/' + eventName + '/with/key/' + makerKey; 

    var payload = { 
    'value1' : value1, 
    'value2' : value2, 
    'value3' : value3 
    }; 

    var options = { 
    'method' : 'POST', 
    'payload':payload, 
    }; 

    return UrlFetchApp.fetch(url,options); 
}; 

, 당신은 파일의 URL, 이름 및 대상을 매핑해야합니다. "Value1"에 파일 URL을 매핑하고 "Value2"에 이름을 지정하고 "Value3"대상을 매핑합니다. 목적지를 올바르게 포맷하는 것을 잊지 마십시오. IFTTT의 예제를보십시오.

일단 애플릿이 설정되면 드라이브를 Dropbox 형식으로 파일을 보낼 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 내가하는 모든 일에서 적어도 가능한 제 3 자 서비스를 사용하려고 노력하고 있습니다. 그리고 저는 마음에 다른 용도가 있기 때문에 Google 앱 스크립트에서이를 직접 수행하는 방법을 알고 싶습니다. 감사합니다, –

+0

그래, 그것은 해결책보다 해결 방법입니다. 행운을 빕니다. – Mullenb

+0

이 방법을 사용하는 경우 : 파일을 공유해야하며 다운로드가 가능하며 "값 1"에 다운로드 URL을 사용하고 보내려는 각 파일 사이에 약 1000ms를 기다려야합니다. –