Giugno 2007
- Introduzione
- Progettazione e implementazione
- Ottenere e implementare Event Publisher
- Esecuzione dell'applicazione
- Passaggi successivi e potenziali miglioramenti
- Appendice
Introduzione
Ti è mai capitato di voler gestire una serie di informazioni su riunioni, eventi o conferenze in un foglio di lavoro Google e di volerle condividere e cercare facilmente? In Google, facciamo proprio questo con il nostro calendario degli eventi per sviluppatori. I dati che alimentano il calendario provengono da una vasta gamma di dipendenti Google di tutta l'azienda, molti dei quali hanno accesso in modifica a un foglio Google in cui sono archiviati i dati. Nel foglio di lavoro, gli eventi non confermati esistono insieme a quelli ben pubblicizzati. A volte le persone inseriscono anche eventi potenziali, prima ancora che venga inviata una proposta o che venga esaminata una potenziale sponsorizzazione. Un "editor" è responsabile della pubblicazione degli eventi e della registrazione degli eventi pubblicati in una colonna del foglio di lavoro.
Perché non gestiamo questi eventi direttamente in Google Calendar? Calendar è perfetto per identificare quando e dove si svolgerà un evento, ma quando si tratta di gestire molte informazioni strutturate, come elenchi di relatori, scadenze per l'invio e così via, un foglio di lavoro è più adatto.

Il foglio di lavoro Google di origine con l'elenco degli eventi
Un mio collega di Google ha suggerito di continuare a gestire gli eventi in Fogli, ma di rimuovere la procedura manuale di pubblicazione nel nostro calendario pubblico esterno. Volevo anche un progetto interessante basato su più API Google Data ("GData" in breve) da mostrare al Mashup Camp, così è nato Event Publisher.
Event Publisher è un'applicazione proof-of-concept sviluppata rapidamente che gestisce un elenco di eventi in Fogli e li pubblica sia in Calendar che in Google Base. Google Calendar offre un ottimo modo per condividere eventi e consentire alle persone di includerli facilmente nella propria visualizzazione del calendario. Sebbene Calendar offra la possibilità di cercare eventi, Google Base fornisce un altro modo per pubblicizzare gli eventi ed eccelle nell'archiviazione di dati strutturati in modo semplice da cercare.
Fogli, Calendar e Base forniscono ciascuno un'API che supporta operazioni di lettura/scrittura complete. Ancora meglio, ciascuno di questi servizi espone l'accesso ai propri dati utilizzando il protocollo Google Data API.
Progettazione e implementazione
La fase di progettazione di questo progetto è stata piuttosto semplice: sapevo di voler creare un'applicazione web per pubblicare i dati dei fogli di lavoro in un calendario. Sebbene l'obiettivo a lungo termine fosse quello di creare un'applicazione che potesse essere utilizzata per il calendario degli eventi per gli sviluppatori, l'obiettivo a breve termine era quello di produrre un mashup di proof-of-concept funzionante che potesse essere dimostrato durante il Mashup Camp. Tenendo a mente questi obiettivi, ho scelto la libreria client Java GData perché è una delle librerie client più consolidate e ho familiarità con la scrittura di app web Java. L'utilizzo di una delle librerie client fornite mi ha evitato di preoccuparmi del protocollo GData non elaborato e del modello di dati XML e mi ha permesso di concentrarmi sull'implementazione della logica dell'applicazione relativamente semplice necessaria per pubblicare gli eventi.
Ho scaricato la libreria client Java e ho iniziato a progettare il modello di classe per il publisher di eventi. Ho creato una servlet, chiamata EventPublisherServlet, che funge da controller per tutte le richieste in entrata nell'applicazione web. Ho anche creato una classe denominata EventPublisher per gestire la logica di business per l'interazione con Calendar, Base e Fogli. Infine, ho scritto una classe Bean per archiviare i dati sugli eventi. L'interfaccia utente dell'applicazione è stata sviluppata utilizzando alcune JSP.
Il bello di lavorare con più servizi GData è che sono coerenti nelle loro interfacce e molte delle librerie client includono classi helper specifiche del servizio per i tuoi servizi Google preferiti. Poiché la libreria client aveva le stesse classi Service, Entry e Feed per i tre servizi che utilizzavo, ho potuto utilizzare un codice molto simile per recuperare gli eventi da Fogli e pubblicarli su Base e Calendar. In questo modo, il tempo di sviluppo è stato ridotto notevolmente rispetto a quello che sarebbe stato necessario per lavorare con tre API distinte. Ti consigliamo di esaminare i metodi publishEventToCalendar() e publishEventToBase() in EventPublisher per vedere le somiglianze tra i diversi metodi.
Ottenere e implementare Event Publisher
L'applicazione Event Publisher viene distribuita come parte del download della libreria client Java di Google Data. Dopo aver scaricato la libreria client Java, cerca nella directory java/mashups/eventpub. Per ulteriori informazioni sul significato di ogni file nell'esempio, consulta la sezione Struttura del progetto nell'appendice.
L'applicazione ha una serie di librerie dipendenti che devono essere scaricate prima di creare Event Publisher. Dopo aver configurato le opzioni di build e runtime appropriate (vedi il file README.TXT), è possibile utilizzare Ant per compilare le classi Java e generare un file WAR. Questo file WAR può quindi essere implementato nel tuo motore servlet preferito, ad esempio Tomcat 5.5, che ho utilizzato per testare questa applicazione. Tomcat, in esecuzione con una configurazione predefinita, richiede solo che il file deploy/EventPublisher.war generato venga copiato nella directory webapps. Verrà quindi eseguito il deployment automatico e sarà accessibile tramite http://hostname:8080/EventPublisher.
Esecuzione dell'applicazione - Procedura

Autenticazione all'account Google Fogli tramite AuthSub.
- L'applicazione viene caricata visitando /EventPublisher sull'host che la esegue. Nel mio caso, eseguo l'applicazione all'indirizzo http://localhost:8080/EventPublisher
- Autenticazione per Fogli Google
- L'utente fa clic sul link "Autentica" generato dalla funzione statica: AuthSubUtil.getRequestUrl().
- L'utente viene reindirizzato ai servizi dell'Account Google dove, se non ha già eseguito l'accesso a Google, gli vengono richieste le credenziali.
- L'utente concede all'editore di eventi l'autorizzazione ad accedere ai propri dati di Fogli.
- L'utente viene reindirizzato all'editore di eventi con un token AuthSub monouso nell'URL. L'editore di eventi scambia il token monouso con un token di sessione AuthSub utilizzando il servizio AuthSubSessionToken.
- Codice: vedi
EventPublisherServlet.processAcceptAuthSubToken()
- Documentazione:consulta la documentazione di AuthSub
- Seleziona foglio di lavoro/foglio
- L'utente viene reindirizzato dal publisher di eventi a un elenco dei fogli di lavoro accessibili all'utente autorizzato.
- Dopo aver selezionato un foglio di lavoro da cui recuperare i dati degli eventi, all'utente viene chiesto di selezionare il foglio di lavoro appropriato nel foglio di lavoro selezionato.
- Codice: vedi
EventPublisher.getSsList()
eEventPublisher.getWsList()
- Recuperare e mappare le intestazioni di colonna
- L'applicazione utilizza quindi il feed delle celle dei fogli di lavoro per recuperare la prima riga di dati dal foglio di lavoro, che rappresenta le intestazioni di colonna. Ogni dato necessario viene elencato per l'utente, a cui viene chiesto di selezionare l'intestazione di colonna che corrisponde meglio ai dati. Nella schermata acquisita a destra, ogni tipo di dati necessario ha una casella di selezione accanto in cui scegliere l'intestazione di colonna corrispondente. Questa mappatura viene memorizzata nella sessione dell'utente utilizzando il meccanismo di gestione delle sessioni del contenitore servlet.
- Codice: vedi
EventPublisherServlet.processListEvents()
- Recuperare le voci e archiviarle in Beans
- Una volta mappate le colonne, Event Publisher recupera il feed dell'elenco Fogli di lavoro contenente una singola voce per ogni riga del foglio di lavoro. Ogni riga rappresenta un singolo evento e i dati della riga vengono inseriti nelle istanze del bean evento. La raccolta di fagioli viene quindi memorizzata nella sessione e viene anche visualizzata sullo schermo per la conferma, utilizzando la pagina outputEventList.jsp.
- Pubblica le voci in Calendar e/o Base
- L'utente seleziona la destinazione di pubblicazione appropriata (Calendario, Base o entrambi) e fa clic sul pulsante "Pubblica". Gli eventi vengono inviati dalla raccolta di oggetti Event memorizzati nella sessione dell'utente ai servizi appropriati utilizzando i metodi
publishEventsToBase()
epublishEventsToCalendar
in EventPublisher. Questi metodi creano oggetti di voce dei tipi appropriati per i servizi:CalendarEventEntry
eGoogleBaseEntry
. Queste voci vengono poi pubblicate tramite unHTTP POST
eseguito dalle classi serviceCalendarService
eGoogleBaseService
- Man mano che gli eventi vengono pubblicati, gli URL di modifica restituiti da ogni servizio di destinazione vengono memorizzati nel foglio di lavoro Google utilizzando il metodo
EventPublisher.updateSsEventEditUrl()
. Per le iterazioni future del processo di pubblicazione, gli eventi che contengono un URL di modifica per ogni servizio nel foglio di lavoro vengono modificati anziché creati. In questo modo, si evitano dati sugli eventi duplicati.
- L'utente seleziona la destinazione di pubblicazione appropriata (Calendario, Base o entrambi) e fa clic sul pulsante "Pubblica". Gli eventi vengono inviati dalla raccolta di oggetti Event memorizzati nella sessione dell'utente ai servizi appropriati utilizzando i metodi


Mappatura dei dati obbligatori alle colonne del foglio di lavoro e anteprima degli eventi da pubblicare.
Passaggi successivi e potenziali miglioramenti
Come accennato in precedenza in questo articolo, questa applicazione è attualmente solo un prototipo. Non è inteso come codice pronto per la produzione. Per rendere Event Publisher pronto per la produzione, è necessario includere la gestione degli errori. Al momento, gli errori vengono inviati solo a stderr. Gli errori che si verificano durante il recupero, la pubblicazione o altre azioni devono essere visualizzati nel browser dell'utente.
Inoltre, è importante notare che Google Base, per mantenere l'integrità del proprio set di dati, fa scadere gli elementi dopo un periodo di tempo se non vengono aggiornati. Se un evento è già stato aggiunto a Google Base, l'editore dell'evento tenta di aggiornarlo utilizzando l'URL di modifica memorizzato nel foglio di lavoro Google. Se l'elemento evento in Base è scaduto, l'URL di modifica non è più valido e al momento della pubblicazione verrà restituito un errore 404. Una soluzione alternativa consiste nel tentare di inserire l'evento al ricevimento di una risposta 404.
Un'altra funzionalità che potrebbe essere aggiunta all'applicazione Event Publisher è la possibilità di memorizzare e pubblicare gli orari esatti degli eventi anziché solo la data. Poiché Google Base richiede che gli orari siano associati agli eventi, memorizzare l'ora di ogni evento impedirebbe che orari arbitrari vengano associati agli eventi nelle voci di Base. Calendar può anche presentare gli eventi negli orari appropriati.
Potresti anche voler disporre di un meccanismo di archiviazione permanente dei dati per memorizzare le configurazioni di fogli di lavoro specifici, inclusi i mapping delle colonne. Potrebbe trattarsi di un foglio di lavoro Google separato, di un database o di un archivio su disco locale.
Spero che questo articolo abbia stimolato la tua immaginazione per trovare nuove idee per applicazioni che utilizzano le API Google Data. Se ti interessa esaminare l'origine di questa applicazione o crearla e modificarla in base alle tue esigenze, puoi trovarla nella libreria client Java delle API di Google Data nella directory mashups/eventpub. Inoltre, ti invitiamo a inviarci il tuo feedback su questo articolo nel forum per gli sviluppatori delle API di dati di Google. Per domande relative a un servizio specifico, pubblicale nei gruppi di discussione specifici per il servizio.