Olá, pessoal!
Hoje quero compartilhar uma experiência bem bacana que tive com a API do Dropbox. Estou trabalhando em um projeto novo e vamos usar alguns recursos do DropBox como ferramenta para poder automatizar alguns processos e facilitar a vida do usuário. A ideia deste artigo é mostrar como conectar sua aplicação com o DropBox.
No início foi meio confuso de entender como funcionava a documentação do Dropbox. É até boa, mas o tutorial não é muito objetivo. Levei algumas horas para entender nos detalhes como realmente as coisas funcionavam, até porque na primeira versão sempre que eu parava e iniciava a aplicação, o code da autorização precisava ser gerado de novo. Veja os passos que precisamos fazer antes de colocar a mão no código:
- Ir no https://www.dropbox.com/developers/apps e create app. Daí é só seguir os passos e ir respondendo as perguntas. Não tem erro aqui, uma vez que bem diretas. No meu caso, usei a opção Full Access e permiti que a aplicação acessasse os arquivos já existentes. Claro que você precisa estar logado no Dropbox.
- Ao clicar na app que foi criada, teremos dois caras importantes, veja:
Precisamos dessas keys para poder conectar a nossa conta.
Pronto, só isso. Agora vamos programar!
Development
Crie um Java Project
O nosso exemplo será com o Java Application somente para vermos a conexão e listagem do que temos no Dropbox. O meu projeto é um maven project, portanto vamos precisar da API do Dropbox. Adicione o código abaixo no pom.xml.
<dependency> <groupId>com.dropbox.core</groupId> <artifactId>dropbox-core-sdk</artifactId> <version>1.7.2</version> </dependency>
Crie uma classe com método main do Java (chamei minha classe de Main). O código a seguir é o que está nessa página.
A ideia aqui é explicar como fazer tudo funcionar. Ter apenas o código e executar não é o suficiente. Veja o código:
public class Main { public static void main(String[] args) { final String APP_KEY = "KEY HERE"; final String APP_SECRET = "KEY SECRET HERE"; DbxAppInfo appInfo = new DbxAppInfo(APP_KEY, APP_SECRET); // DbxRequestConfig config = new DbxRequestConfig("JavaTutorial/1.0", Locale.getDefault().toString()); DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo); String authorizeUrl = webAuth.start(); System.out.println("AuthorizeURL " + authorizeUrl); System.out.println("3. Copy the authorization code."); try { String code = new BufferedReader(new InputStreamReader(System.in)).readLine().trim(); DbxAuthFinish authFinish = null; authFinish = webAuth.finish(code); DbxClient client = new DbxClient(config, authFinish.accessToken); System.out.println("Linked account: " + client.getAccountInfo().displayName); DbxEntry.WithChildren listing = client.getMetadataWithChildren("/"); System.out.println("Files in the root path:"); for (DbxEntry child : listing.children) { System.out.println(" " + child.name + ": " + child.toString()); } }catch (DbxException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Agora é que vem o pulo do gato: se você rodar essa app e não fizer nada, o que acontece? Bem, você poderia esperar que fossem listados todos os seus arquivos que estão na raiz da sua conta do Dropbox, certo? Por causa dessa linha aqui:
DbxEntry.WithChildren listing = client.getMetadataWithChildren("/");
Rode e veja o resultado a seguir:
O que você precisa fazer? Copiar a URL e colar no browser. O dropbox vai solicitar allow para app que está querendo acessar, então você dar autorização e ele gera um token:
Feito isso vá para a aplicação e vamos alterar apenas uma linha. Veja qual:
//String code = new BufferedReader(new InputStreamReader(System.in)).readLine().trim(); String code = "TOKEN CREATED HERE";
Observe que comentei uma linha e coloquei o token que foi gerado na variavel code; poderia também ter digitado no console. Se tudo der certo, você vai ver tudo que tem na raiz do seu Dropbox:
Simples, não? Você pode fazer o que quiser com os arquivos. Na documentação você pode ver como fazer o download.
Problema
Se você rodar a aplicação novamente, o code gerado acima é inválido e será preciso criar um novo. No próximo artigo vamos ver como resolver isso.
Abraços!