Como criar uma aplicação para o Orkut usando o OpenSocial
Eu queria desenvolver algo com o OpenSocial desde que o Google o lançou como especificação comum para sites de redes sociais, e a chance surgiu há poucos dias, principalmente depois dos dois userscripts que escrevi para o Blip.fm usando o Greasemonkey que serviram de "motivação" para a tarefa. O Google implementa a API sugerida pelo OpenSocial na sua própria rede social, o Orkut. Como todos já estão lá mesmo, então resolvi criar a aplicação.
Para os que não conhecem o OpenSocial: trata-se de uma especificação criada e sugerida pelo Google para unificar o uso e o desenvolvimento de aplicações para sites de redes sociais, inclusive em nível de reaproveitamento de código e portabilidade de aplicações caso todos os sites implementem a especificação corretamente. Curiosamente a maioria das grandes redes sociais implementaram o OpenSocial e estão seguindo-o rapidamente, com várias delas atualizadas com as últimas modificações e novos recursos definidos na especificação.
Primeiro comecei formulando a idéia: criar uma aplicação server-side que fizesse a atualização do meu status no Orkut de acordo com o último post do meu profile do Twitter. Como a minha conta no Blip.fm também já está configurada para mostrar meus blips no Twitter, então teria uma integração bastante completa, com os posts sendo propagados por todos os serviços. Nesse caso a aplicação estaria rodando em um servidor externo ao Twitter e ao Orkut, e acessaria ambos através de suas APIs, porém isso não foi possível pois a utilização de acesso externo através de interfaces REST e XML-RPC só está especificado na versão 0.8 do OpenSocial, e curiosamente o próprio Google só implementou a versão 0.7 no Orkut, que não possui esse recurso.
Tive então que criar a aplicação dentro do Orkut, rodando dentro da página mesmo, client-side, ou seja, rodará no navegador do cliente assim que alguém visitar meu profile (como as outras aplicações que vocês já devem visto nas páginas de perfil dos amigos, como o BuddyPoke, MyMiniLife, iLike, Last.fm, etc).
A idéia, em termos mais práticos, é que o visitante veja meus posts mais recentes do Twitter e que eu, além de vê-los, possa adicioná-los às minhas atualizações, que são propagadas para todos os amigos. Como a aplicação é toda client-side, não foi surpresa ver que ela deveria ser escrita em Javascript incluindo as bibliotecas do OpenSocial.
A diferença para uma aplicação comum é que o Orkut fornece um Conteiner onde a aplicação é executada. É nesse container que as bibliotecas que implementam a especificação do OpenSocial estão disponíveis juntamente com outras funcionalidades. O que o Google fez foi trazer o Container utilizado no Google Gadgets e reaproveitá-lo dentro do Orkut para rodar as aplicações dos usuários. Então é esse o contexto (que eu nem gostei muito na realidade): codifique como se fosse um gadget, lançando mão de funções que integram a rede social à aplicação. Na prática você está criando um gadget que vai rodar dentro do container do Orkut, mas lembre-se que não é um gadget qualquer. Você deve seguir algumas diretrizes.
Tudo o que é relacionado aos dados (entre outros) da rede social é implementado em bibliotecas guardadas dentro do namescape opensocial. Qualquer outra funcionalidade fora desse contexto deve ser feito através da API dos gadgets. Para iniciantes no assunto isso não é muito claro, inclusive para mim no início da escrita deste app, pois eu não sabia o que era um google gadget de forma tecnicamente mais aprofundada. Isso gera confusão na hora de procurar nas APIs a funcionalidade que você quer ou então nos próprios mecanismos de busca. Caso alguém que esteja lendo este artigo resolva criar uma aplicação usando o OpenSocial e o Orkut, essa é a principal dica: pensar bem no que você precisa para definir em que contexto deve procurar ajuda, evitando perder tempo e paciência procurando no lugar errado.
Antes de ir para os aspectos diretamente relacionados ao desenvolvimento, falarei de alguns detalhes dessa experiência, pois nem todos querem ler a parte do código em si. Ao começar a desenvolver, você precisa de um cadastro para acessar o Sandbox do Orkut, que é o seu ambiente de desenvolvimento. Trata-se de um snapshot do Orkut original, para que o desenvolvedor possa brincar à vontade, sem medo de destruir dados ou ficar sob as restrições do ambiente de produção. Se quiser entrar no sandbox, o endereço é este aqui.
Parênteses: Atualmente o sandbox possui uma implementação híbrida com suporte completo à versão 0.7 do opensocial e suporte parcial da versão 0.8, tudo no mesmo conteiner que irá rodar sua aplicações. O problema é que alguns detalhes mudaram de uma versão para a outra, o que acarreta em vários problemas diferentes e aparentemente sem lógica, já que a própria documentação indica o procedimento que está falhando. Aqui entra outra dica importante: caso você queira ir para um ambiente realmente igual ao Orkut de produção, vá para o prod.sandbox.orkut.com. Essas dicas que dou aqui não constam em documentação alguma. Foram aprendidas e encontradas em pesquisas, listas de discussão, etc. Esta última por exemplo encontrei no blog orkutdeveloper. Esses detalhes que fazem toda a diferença não estão presentes na documentação oficial, o que é algo muito falho e que considerei um ponto negativo ao desenvolver a aplicação.
Quando você entra no sandbox, basta ir em adicionar apps e, ao invés de selecionar de uma lista como no Orkut real, indique a URL do arquivo XML que contém sua aplicação, ou seja, você vai precisar hospedar seu arquivo/aplicação em um servidor web com IP válido. No meu caso, a aplicação que criei (Twitter on Orkut) está hospedada aqui mesmo, no servidor do Hypercast. Você pode também usar o editor do Google, o GGE (Google Gadget Editor), que permite que você edite o código fonte da aplicação on-line e salve no próprio Google, associado à sua conta. Agora você vai só editando o arquivo XML, testando no sandbox e assim por diante.
Depois de criar a aplicação, é hora de fazer o "deploy", que consiste em ir neste endereço e submeter o link do seu arquivo XML e pronto. O pessoal do orkut vai avaliar sua aplicação e responder você por e-mail, fazendo algum comentário ou consideração. Recebi este e-mail uma semana depois de ter submetido a minha aplicação dizendo que eu não estava utilizando apropriadamente os "recursos sociais" fornecidos pelo OpenSocial, e que eles estavam interessados em aplicações mais sociais, que se utilizassem de recursos e aspectos que envolvessem outros usuários. Por fim, comentaram que o orkut está no momento mais focado na reestruturação de aplicações para utilizar os recursos sociais que integram mais as pessoas do que em aceitar todos os tipos de aplicação para aumentar em número.
Ou seja, minha aplicação não foi aceita. Eles disseram também que eu deveria seguir algumas práticas para deixar meu aplicativo mais "sociável"… Vou preferir ficar do fora mesmo. Mas tem como contornar essa restrição de outras formas
mas isso será tema de um próximo post aqui no Hypercast…
Agora vamos a detalhes específicos do desenvolvimento da aplicação.Primeiramente dei uma boa lida sobre o que é o OpenSocial e como ele se aplica ao Orkut na documentação oficial. Nela existe um tutorial sobre como criar uma aplicação bem simples, onde você pode dar e receber presentes para os seus amigos, incluindo-os na lista de atualizações, que são referenciadas na documentação e na especificação do OpenSocial como Activities que compõem um Activity Stream.
A primeira informação que minha aplicação precisava era do login do Twitter do usuário que adicionou a aplicação em seu profile. No meu caso é a parte correspondente a liusfc em http://twitter.com/liusfc. Essa informação deveria ser configurada pelo usuário no momento em que a aplicação é adicionada. Para resolver isso precisei pesquisar um certo tampo até que achei a solução. O que eu queria era que o próprio Orkut se responsabilizasse por pedir esse dado e armazená-lo, mas isso não é feito pelo OpenSocial….
Fui encontrar essa funcionalidade na API do Gadget como um elemento do documento XML (UserPrefs) da aplicação. Nesse caso como o gadget está rodando no container do orkut, é ele quem lê o arquivo e cria a interface necessária com formulário para o usuário entre com o dado em seu tipo correto.
Porém esse recurso não funcionou direito no sandbox. Às vezes dava certo, às vezes parecia que o usuário ainda não tinha inserido o dado. Como não sabia se isso funcionaria em produção e estava perdendo muito tempo, resolvi criar uma aplicação Ruby on Rails no servidor do Hypercast para salvar o login através de um web service RESTful falando JSON.
E agora temos outro problema, como acessar informações de fora do container (cross-domain request)? Tive que procurar bastante e encontrei várias informações desencontradas e contraditórias, mas a que funcionou estava aqui, na documentação dos gadgets, de novo… Aliás, você pode encontrar outras informações de I/O dos gadgets quando estes rodam sob o container do orkut aqui.
Ok, mas como enviar o meu login para o servidor Rails? De acordo com a especificação RESTful de exposição do model através do controller criando rotas automáticas, eu deveria fazer uma requisição utilizando o método POST para fora do container. Mais pesquisas e encontrei o método correto aqui.
Devo lembrar que todas as requisições estavam falhando "às vezes". Isso por que o orkut implementa uma espécie de monitor de latência e cache de requisições dentro do sandbox (o cache fica ativo por 1 hora). Mesmo sem saber se iria encontrar uma solução, resolvi pesquisar e encontrei exatamente o que queria aqui.
Certo, agora eu precisava saber se o usuário que estava olhando era o dono do profile que adicionou a aplicação ou um visitante (amigo, por exemplo). Este procedimento está documentado corretamente (acho que somente isso, de tudo o que testei no sandbox). Encontrei algumas funcões prontas nesta thread da lista de discussão do opensocial.
E por fim, tive que localizar a aplicação, pois é um requisito para submeter a aplicação para avaliação. Quero deixar aqui uma referência que ajudou muito, o OpenSocialDirectory, um repositório de apps para o opensocial (possui várias para o orkut) que podem servir de referência para implementação de alguns recursos. Enfim, sempre é bom ler código dos outros.
Espero que este artigo seja útil para alguém que queira desenvolver utilizando o OpenSocial e, possivelmente, o Orkut. Se quiserem trocar alguma idéia sobre o assunto, é só deixar um comentário. Até a próxima!!
PS: Vou deixar aqui uma referência legal e rápida para expressões regulares, ótima para quem não usa isso todo dia.
Artigos Relacionados:
Sobre este artigo
You’re currently reading “Como criar uma aplicação para o Orkut usando o OpenSocial,” an entry on Hypercast
- Published:
- 10.10.08 / 10am
- Category:
- Uncategorized
1 Comment
Jump to comment form | comments rss [?] | trackback uri [?]