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 post é mostrar como conectar sua aplicação com o DropBox.
Lets go…
Starting…
No inicio 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 por serem bem diretas. No meu caso usei a opção full Access e permiti que a aplicação acesse 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 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: https://www.dropbox.com/developers/core/start/java
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 post vamos ver como resolver isso.
Abraços, see ya!!