junho de 2007
- Introdução
- Design e implementação
- Como conseguir e implantar o editor de eventos
- Como executar o aplicativo
- Próximas etapas e possíveis melhorias
- Apêndice
Introdução
Você já quis manter várias informações sobre reuniões, eventos ou conferências em uma planilha Google e compartilhar e pesquisar esses dados com facilidade? No Google, fazemos exatamente isso com nosso calendário de eventos para desenvolvedores. Os dados que alimentam o calendário vêm de uma grande variedade de Googlers em toda a empresa. Muitos deles têm acesso de edição a uma planilha Google onde os dados são armazenados. Na planilha, os eventos não confirmados aparecem junto com os engajamentos bem divulgados. Às vezes, as pessoas até inserem eventos futuros, mesmo antes de uma proposta ser enviada ou de um possível patrocínio ser investigado. Um "editor" é responsável por publicar eventos e registrar os eventos publicados em uma coluna da planilha.
Por que não mantemos esses eventos diretamente no Google Agenda? O Google Agenda é ótimo para identificar quando e onde um evento vai acontecer, mas, quando se trata de manter muitas informações estruturadas, como listas de palestrantes, prazos de envio etc., uma planilha é mais adequada.

A planilha Google de origem com a lista de eventos
Um dos meus colegas do Google sugeriu que continuássemos a manter os eventos nas Planilhas, mas removêssemos o processo manual de publicação no nosso calendário público externo. Eu também queria um projeto interessante baseado em várias APIs de dados do Google ("GData", para abreviar) para demonstrar no Mashup Camp. Assim nasceu o Event Publisher.
O Event Publisher é um aplicativo de prova de conceito desenvolvido rapidamente que mantém uma lista de eventos nas Planilhas e os publica no Google Agenda e no Google Base. O Google Agenda é uma ótima maneira de compartilhar eventos e facilitar a inclusão deles na visualização da agenda das pessoas. Embora o Google Agenda permita pesquisar eventos, o Google Base oferece outra maneira de divulgar eventos e é excelente para armazenar dados estruturados de forma fácil de pesquisar.
As Planilhas, o Agenda e o Base oferecem uma API que aceita operações completas de leitura/gravação. Melhor ainda, cada um desses serviços expõe o acesso aos dados usando o protocolo da API Google Data.
Design e implementação
A fase de design deste projeto foi bem simples: eu sabia que queria criar um aplicativo da Web para publicar dados de planilhas em um calendário. Embora o objetivo de longo prazo fosse criar um aplicativo que pudesse ser usado no calendário de eventos para desenvolvedores, o objetivo de curto prazo era produzir um mashup de prova de conceito funcional que pudesse ser demonstrado durante o Mashup Camp. Com esses objetivos em mente, escolhi a biblioteca de cliente Java GData porque ela é uma das bibliotecas de cliente mais completas, e eu tenho experiência em escrever apps da Web em Java. Usar uma das bibliotecas de cliente fornecidas me liberou da preocupação com o protocolo GData bruto e o modelo de dados XML. Em vez disso, pude me concentrar na implementação da lógica de aplicativo relativamente simples necessária para publicar eventos.
Baixei a biblioteca de cliente Java e comecei a projetar o modelo de classe para o editor de eventos. Criei um servlet, chamado EventPublisherServlet, que atua como controlador de todas as solicitações recebidas no aplicativo da Web. Também criei uma classe chamada EventPublisher para processar a lógica de negócios da interação com o Google Agenda, o Base e o Planilhas. Por fim, escrevi uma classe Bean para armazenar dados de eventos. A interface do usuário do aplicativo foi desenvolvida usando alguns JSPs.
A vantagem de trabalhar com vários serviços do GData é que eles são consistentes nas interfaces, e muitas das bibliotecas de cliente incluem classes auxiliares específicas do serviço para seus Serviços do Google favoritos. Como a biblioteca de cliente tinha as mesmas classes Service, Entry e Feed para os três serviços que eu estava usando, consegui usar um código muito semelhante para recuperar eventos das Planilhas e publicá-los no Base e no Agenda. Isso reduziu significativamente meu tempo de desenvolvimento em comparação com o que seria necessário para trabalhar com três APIs distintas. Examine os métodos publishEventToCalendar() e publishEventToBase() no EventPublisher para conferir as semelhanças entre eles.
Como conseguir e implantar o editor de eventos
O aplicativo Event Publisher é distribuído como parte do download da biblioteca de cliente Java do Google Data. Depois de baixar a biblioteca de cliente Java, procure o diretório java/mashups/eventpub. Consulte a seção estrutura do projeto no apêndice para mais informações sobre o significado de cada arquivo no exemplo.
O aplicativo tem várias bibliotecas dependentes que precisam ser baixadas antes da criação do Event Publisher. Depois de configurar as opções de build e de tempo de execução adequadas (consulte o arquivo README.TXT), o Ant pode ser usado para compilar as classes Java e gerar um arquivo WAR. Esse arquivo WAR pode ser implantado no seu mecanismo de servlet favorito, como o Tomcat 5.5, que usei para testar esse aplicativo. O Tomcat, executado com uma configuração padrão, exige apenas que o arquivo deploy/EventPublisher.war gerado seja copiado para o diretório webapps. Em seguida, ele será implantado automaticamente e poderá ser acessado em http://hostname:8080/EventPublisher.
Como executar o aplicativo: processo

Autenticação na conta do Google Planilhas via AuthSub.
- O aplicativo é carregado ao acessar /EventPublisher no host que o executa. No meu caso, estou executando o aplicativo em http://localhost:8080/EventPublisher
- Autenticação para as Planilhas Google
- O usuário clica no link "authenticate" gerado pela função estática: AuthSubUtil.getRequestUrl().
- O usuário é redirecionado para os serviços da Conta do Google, onde, se ele ainda não tiver feito login no Google, será solicitado que ele informe as credenciais.
- O usuário concede permissão ao Event Publisher para acessar os dados das Planilhas Google.
- O usuário é redirecionado de volta para o Event Publisher com um token AuthSub de uso único no URL. O editor de eventos troca o token de uso único por um token de sessão do AuthSub usando o serviço AuthSubSessionToken.
- Código:consulte
EventPublisherServlet.processAcceptAuthSubToken()
- Documentação:consulte a documentação do AuthSub.
- Selecionar planilha/página
- O usuário é redirecionado pelo editor de eventos para uma lista das planilhas acessíveis ao usuário autorizado.
- Depois de selecionar uma planilha de onde os dados de eventos serão extraídos, o usuário também precisa escolher a planilha adequada na planilha selecionada.
- Código:consulte
EventPublisher.getSsList()
eEventPublisher.getWsList()
- Recuperar e mapear cabeçalhos de coluna
- Em seguida, o aplicativo usa o feed de células das Planilhas Google para recuperar a primeira linha de dados da planilha, que representa os cabeçalhos das colunas. Cada dado necessário é listado para o usuário, que precisa selecionar o cabeçalho de coluna que melhor corresponde aos dados. Na captura de tela à direita, cada tipo de dado necessário tem uma caixa de seleção ao lado em que você escolhe o cabeçalho de coluna correspondente. Esse mapeamento é armazenado na sessão do usuário usando o mecanismo de processamento de sessão do contêiner de servlet.
- Código:consulte
EventPublisherServlet.processListEvents()
- Recuperar entradas e armazenar em Beans
- Depois que as colunas são mapeadas, o Event Publisher recupera o feed da lista de planilhas Google, que contém uma única entrada para cada linha na planilha. Cada linha representa um único evento, e os dados da linha são preenchidos em instâncias do Event Bean. A coleção de Beans é armazenada na sessão e também é exibida na tela para confirmação usando a página outputEventList.jsp.
- Publicar as entradas no Google Agenda e/ou na base
- O usuário seleciona o destino de publicação adequado (Calendário, Base ou ambos) e clica no botão "Publicar". Os eventos são enviados da coleção de objetos de evento armazenados na sessão do usuário para os serviços apropriados usando os métodos
publishEventsToBase()
epublishEventsToCalendar
em EventPublisher. Esses métodos criam objetos de entrada dos tipos adequados para os serviços:CalendarEventEntry
eGoogleBaseEntry
. Essas entradas são postadas por umHTTP POST
realizado pelas classes serviceCalendarService
eGoogleBaseService
. - À medida que os eventos são publicados, os URLs de edição retornados por cada serviço de destino são armazenados na planilha Google usando o método
EventPublisher.updateSsEventEditUrl()
. Para iterações futuras do processo de publicação, os eventos que contêm um URL de edição para cada serviço na planilha são editados em vez de criados. Isso evita dados de eventos duplicados.
- O usuário seleciona o destino de publicação adequado (Calendário, Base ou ambos) e clica no botão "Publicar". Os eventos são enviados da coleção de objetos de evento armazenados na sessão do usuário para os serviços apropriados usando os métodos


Mapear os dados necessários para as colunas da planilha e visualizar os eventos que serão publicados.
Próximas etapas e possíveis melhorias
Como mencionado anteriormente neste artigo, esse aplicativo é apenas um protótipo. Não é um código pronto para produção. Para preparar o Event Publisher para produção, é necessário incluir algum tratamento de erros. No momento, os erros são enviados apenas para stderr. Em vez disso, os erros que ocorrerem durante a recuperação, publicação ou outras ações devem ser exibidos no navegador do usuário.
Além disso, para manter a integridade do conjunto de dados, o Google Base expira os itens após um período se eles não forem atualizados. Se um evento já tiver sido adicionado ao Google Base, o editor de eventos tentará atualizar o evento usando o URL de edição armazenado na planilha Google. Se o item do evento na Base expirar, o URL de edição não será mais válido, e um erro 404 será retornado no momento da publicação. Uma solução alternativa seria tentar inserir o evento ao receber uma resposta 404.
Outro recurso que pode ser adicionado ao aplicativo Event Publisher é a capacidade de armazenar e publicar os horários exatos dos eventos, e não apenas a data. Como o Google Base exige que os horários sejam anexados aos eventos, armazenar o horário de cada evento impede que horários arbitrários sejam associados aos eventos nas entradas do Base. O Google Agenda também pode apresentar os eventos nos horários adequados.
Você também pode querer ter um mecanismo de armazenamento de dados persistente para armazenar configurações de planilhas específicas, incluindo mapeamentos de colunas. Isso pode ser uma planilha Google separada, um banco de dados ou um armazenamento em disco local.
Espero que este artigo tenha despertado sua imaginação para criar novas ideias incríveis de aplicativos que usam as APIs de dados do Google. Se você quiser conferir a origem desse aplicativo ou criá-lo e modificá-lo para atender às suas necessidades, acesse a biblioteca de cliente Java das APIs de dados do Google no diretório mashups/eventpub. Além disso, envie seu feedback sobre este artigo no fórum para desenvolvedores das APIs de dados do Google. Para perguntas relacionadas a um serviço específico, poste nos grupos de discussão específicos do serviço.