将Google应用程序脚本连接到Dropbox

时间:2016-11-16 14:19:41

标签: google-apps-script dropbox dropbox-api

我希望能够将文件从驱动器发送到Dropbox,但我遇到了一些问题。我收到一条消息要进入授权网址:

请访问以下网址,然后重新运行脚本:https://www.dropbox.com/1/oauth/authorize?oauth_token=xxxxxxx

我这样做,应用程序被添加到dropbox(或者至少我得到一条消息说),但如果我重新运行脚本,我会再次收到相同的消息。如果我检查连接到Dropbox的应用程序列表,那么这个应用程序就不会出现......我试着遵循这个:Migrating from OAuthConfig to the OAuth1 library尽可能接近......我做错了什么?

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 个答案:

答案 0 :(得分:1)

查看IFTTT他们有一个名为Maker Channel的频道。 IFTTT将数百种服务连接在一起,使服务之间的连接变得容易。有了这个,你不需要OAuth,它更容易使用。他们没有Drive to Dropbox的直接支持,因此您必须使用他们的Maker Channel,这是一个API。将applet Maker Channel设置为Dropbox后,您可以通过POST api调用将文件上传到Maker Channel。它非常容易使用,我已经为它做了一个功能。

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);
};

当您在Dropbox端设置IFTTT上的小程序时,您需要映射文件URL,名称和目标。我将文件URL映射到“Value1”,名称为“Value2”,目标为“Value3”。请记住正确格式化目标,只需查看IFTTT的示例。

设置小程序后,您可以将文件从Drive发送到Dropbox。