Back-End

21 out, 2010

Consumindo serviços do Flickr com Java no Netbeans

Publicidade

O Flickr, popular site de hospedagem e de compartilhamento de imagens, disponibiliza para os desenvolvedores acesso as suas funcionalidades através de uma API de serviços REST. Com essa API, o desenvolvedor pode soltar a imaginação e criar novos aplicativos, inclusive interagindo também com outros serviços disponíveis na web. Quem estiver interessado em conhecer os aplicativos criados utilizando a API do Flickr pode acessar o App Garden. Esse site é uma iniciativa da própria empresa para reunir os aplicativos que utilizam o Flickr.
 
Mas por que eu precisaria do Netbeans para consumir os serviços do Flickr?

Não, você não precisa do Netbeans para utilizar os serviços. Entretanto, a IDE disponibiliza um esquema de drag and drop que facilita muito algumas partes do trabalho. Nós veremos aqui como utilizar esse esquema para ter acesso a álbuns e fotos de forma simples e rápida.

Lembrando que o Netbeans auxilia no acesso aos serviços de diversas outras APIs, como Facebook, Google, Delicious, Twitter, Yahoo! e muitas outras que não serão tratadas neste artigo. Porém, a estratégia utilizada nas demais APIs é semelhante e você poderá tomar como base o que mostraremos aqui para trabalhar com outros serviços.
 
A primeira coisa a se fazer é criar uma conta no Yahoo! (caso você já não tenha) para ter acesso ao Flickr. Ter acesso ao Flickr é importante porque você precisará registrar um aplicativo no App Garden.

Com acesso ao Flickr, você deve ir a esta página para criar um novo aplicativo. Precisamos dessa etapa porque o Flickr só fornece permissão para uso dos serviços se a aplicação tiver uma chave e um segredo específicos para ela. O Flickr não cobra nada para registrar a aplicação e fornecer a chave. Nós utilizaremos essa chave e o segredo alguns passos à frente.

Ao acessar a página de criação de aplicativo, você verá o seguinte:

Como nosso objetivo não é comercial, escolha a opção “solicitar uma chave não comercial”.

Agora escolha um nome para sua aplicação, forneça uma pequena descrição, aceite os termos de compromisso e clique em enviar. Após enviar, você terá acesso à sua chave e ao seu segredo, da mesma forma que a figura abaixo:


Anote a chave e o segredo em algum lugar para usarmos logo mais.

Vamos partir para o Netbeans agora.

Agora crie uma classe com um método main. 

Testaremos os serviços dentro desse método. Será nele que iremos arrastar e soltar um método do serviço do Flickr.

Agora vá até a aba Serviços que fica ao lado das abas Arquivos e Projetos  

 
e busque o seguinte nó da árvore Flickr > Photo Service > services > rest > photosets_getList e arraste e solte o método photosets_getList para dentro do método main da classe que você criou. Aparecerá a seguinte tela:


Apenas clique em OK pra que os códigos necessários terminem de ser gerados.

Após o OK será gerado o seguinte código para você:

import org.netbeans.saas.flickr.FlickrPhotoService;
import org.netbeans.saas.RestResponse;


public class Main {

public static void main(String[] args) {

// início do código que será gerado -------------------------
try {
String userId = null;

RestResponse result = FlickrPhotoService.photosetsGetList(userId);
if (result.getDataAsObject(flickr.photoservice.flickrresponse.Rsp.class) instanceof flickr.photoservice.flickrresponse.Rsp) {
flickr.photoservice.flickrresponse.Rsp resultObj = result.getDataAsObject(flickr.photoservice.flickrresponse.Rsp.class);
}
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
// fim do código que será gerado -------------------------------
}
}

O objeto resultObj é responsável, nesse caso, por conter a lista de todos os álbuns de um usuário. É esse objeto que iremos manipular.

Para termos acessos à lista dos álbuns, podemos utilizar esse objeto da seguinte forma:

resultObj.getPhotosets().getPhotoset()

Esse método retorna uma lista de álbuns.

Para testar, vamos listar na tela o id de todos os álbuns do seu Flickr da seguinte forma:

import org.netbeans.saas.flickr.FlickrPhotoService;
import org.netbeans.saas.RestResponse;

public class Main {

public static void main(String[] args) {

// início do código que será gerado -------------------------
try {
String userId = null;

RestResponse result = FlickrPhotoService.photosetsGetList(userId);
if (result.getDataAsObject(flickr.photoservice.flickrresponse.Rsp.class) instanceof flickr.photoservice.flickrresponse.Rsp) {
flickr.photoservice.flickrresponse.Rsp resultObj = result.getDataAsObject(flickr.photoservice.flickrresponse.Rsp.class);
// listagem do id de todos os albuns
for (int i = 0; i < resultObj.getPhotosets().getPhotoset().size(); i++) {
System.out.println("Album com id = " + resultObj.getPhotosets().getPhotoset().get(i).getId());
}

}
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
// fim do código que será gerado -------------------------------
}
}

Antes de executar, é necessário configurar o arquivo .properties, responsável pela autenticação, utilizando a chave e o segredo que você pegou no Flickr. Esse arquivo foi gerado automaticamente e se encontra no pacote org.netbeans.saas.flickr com o nome flickrphotoserviceauthenticator.properties. Preencha esse arquivo com a sua chave e com o seu segredo.

Pronto, agora ao executar a sua classe será exibida esta tela:

Antes de clicar em OK, é necessário copiar o link e colar no navegador para que o site do Flickr dê a permissão para acessar seu serviço.

Ao executar o link no browser, aparecerá a seguinte tela:

Escolha a opção “ok, eu autorizo” e depois volte para a execução no Netbeans e clique em OK no JDialog de autorização. Dessa forma, seus álbuns serão listados no console do Netbeans.

Dicas

  • O método photosets_getPhotos disponível no serviço é útil para buscar o id e o título das fotos de um álbum. Nesse caso, é necessário passar o id do álbum para conseguir utilizar o método. A dica está na forma de acessar a lista de fotos. É necessário utilizar o objeto resultObj como é apresentado em seguida:
resultObj.getPhotoset().getPhoto().get(i).getId();
  • O método photos_getInfo disponível no serviço encontra a descrição e o título de uma foto passando o id da foto. Para acessar essas informações, você pode utilizar o objeto resultObj da seguinte forma:
resultObj.getPhoto().getDescription();
resultObj.getPhoto().getTitle();
  • O método photos_getSizes disponível no serviço encontra as urls (uma para cada tamanho) de uma foto. O uso desse método precisa também do id da foto. Através dele, você pode exibir as fotos na sua aplicação. O objeto resultObj deve ser utilizado da seguinte forma:
resultObj.getSizes().getSize().get(0).getSource();
resultObj.getSizes().getSize().get(1).getSource();
resultObj.getSizes().getSize().get(2).getSource();
resultObj.getSizes().getSize().get(3).getSource();
resultObj.getSizes().getSize().get(4).getSource();

Cada posição da lista retornada é um tamanho diferente da foto.

Conclusão

Vimos neste artigo os passos necessários para acessarmos a API do Flickr. Vimos como é simples consumir serviços com o auxilio do Netbeans. A partir de agora, você pode explorar outros serviços para construir diversos tipos de aplicações customizadas.