Autor Convidado: Renato Mangini é desenvolvedor Java e OpenSocial e fundador da Geolabs além de idealizador e criador do WapaWapa. É também um evangelizador de aplicativos sociais e fã do Android. Siga o @renatomangini no twitter.

Recentemente a Google anunciou a biblioteca para código cliente do Orkut. Passei alguns dias estudando a biblioteca e fazendo um aplicativo para teste, e queria compartilhar o que aprendi.

A quem esse artigo interessa? A quem está desenvolvendo um site e deseja integrá-lo ao Orkut. Com essa biblioteca, você pode, por exemplo, ler e enviar recados (scraps), listar os amigos do usuário e baixar e enviar fotos dos álbuns. Claro que tudo é protegido e só pode ser acessado com autorização do usuário e dentro das regras de uso para desenvolvedores do Orkut. Por isso, nada de brincar de instalar vírus no perfil dos outros, ok?

A biblioteca se baseia em OAuth. Se você não sabe o que é OAuth, é melhor dar uma lida neste excelente tutorial antes. Vou partir do pressuposto que você entende o que é 3-legged authentication e como ela funciona em um container OpenSocial como o Orkut (neste link você acha um esquemático bem simples de entender).

Mãos à obra

Antes de começar, você vai precisar de:

  1. consumerKey e consumerSecret do Google Account para o seu website. https://www.google.com/accounts/ManageDomains (guarde com MUITO CUIDADO com esses dados)
  2. biblioteca orkut-os-client
  3. coisas básicas que qualquer desenvolvedor Java deve ter: JDK 1.6, uma boa IDE, ant, etc.

Extraia o arquivo orkut-os-client-1.0-007f393481.tar.bz2 (ou a versão que você baixou no passo 2, se for diferente). Vá para o subdiretório java e execute

ant run-sample

Se tudo der “certo”, você receberá a mensagem “signature_invalid”, e a exceção “net.oauth.OAuthProblemException: HTTP/1.1 400 Bad Request”. Edite o arquivo java/sample/oauth.properties e substitua os valores de “consumerKey” e “consumerSecret” pelos obtidos no passo 1 acima. Rode de novo o ant, e agora ele deve abrir uma janela do seu navegador pedindo autorização para acessar sua conta do Orkut. Autorize e você verá na linha de comando a lista de seus amigos sendo impressa, como por exemplo:

[java] Hello, Pedro Antônio Carlos!
[java] Friend: Paulo Ferreira
[java] Friend: Girino
[java] Friend: Renato Mangini
[java] Friend: Carla
[java] Friend: João
[java] Friend: Paulo

Simples assim, né? Agora vamos ver o que aconteceu nas entrelinhas.

Entendendo o exemplo em poucas palavras

O código executado está em sample/sample-src/com/google/orkut/client/sample/SampleApp.java. Vá lá e dê uma olhadinha… A mágica está na classe Transport (sample/sample-src/com/google/orkut/client/sample/Transport.java). Em pouquíssimas palavras, ela faz o seguinte:

  • verifica se o usuário está logado (método init()). Caso não esteja, abre um browser na página de autenticação do OAuth do Google. Após a autenticação o browser é redirecionado para uma URL específica local, por isso o código do exemplo sobe com um servidor Jetty só para receber essa resposta de que a autenticação foi feita com sucesso (classe DesktopClient do exemplo);
    • Nesse request de resposta, o Google devolve dois códigos: accessToken e accessSecret. Observe que isso não tem nada a ver com o consumerKey e consumerSecret usado antes. Os consumerKey/Secret são do seu Website, enquanto o accessToken/Secret são do usuário que autenticou. Lembre das três pernas do 3-legged OAuth. Você pode guardar o accessToken e accessSecret no seu banco de dados, pois precisará deles para fazer qualquer request em nome desse usuário. Importante: mesmo que algum hacker roube esses dois códigos, eles só são válidos se o request for assinado com o consumerKey/Secret do seu website. Por isso é tão importante guardar o consumerKey/Secret em um lugar seguro.
  • enfileira o request (getprofile, writescrap, getphoto, etc) para ser enviado em lote
  • envia os requests enfileirados para o Orkut, devidamente assinados com o consumerKey/consumerSecret do seu website, e usando o accessToken/accessSecret do usuário

A classe Transport do exemplo obviamente não pode ser usada em uma aplicação web. Por quê?

  • Ela executa o browser diretamente (veja a classe sample/sample-src/com/centerkey/utils/BareBonesBrowserLaunch.java) . No caso de uma aplicação web, o código rodará no servidor e temos formas mais elegantes de fazer isso;
  • Ela executa um servidor Jetty só para receber o resultado do processo de autenticação. A sua aplicação web já estará rodando, então basta criar uma servlet específica para isso.

Próximos passos: como adaptar sua aplicação web

Em breve a segunda parte deste post explicando como adaptar a sua aplicação web.

Enquanto isso, você pode baixar o aplicativo de testes feito pelo pessoal do Google. Não é lá muito explicativo e depende fortemente do Google App Engine, mas os mais fuçadores conseguirão fazer muita coisa a partir dele.