Juin 2007
- Introduction
- Conception et implémentation
- Obtenir et déployer l'éditeur d'événements
- Exécuter l'application
- Étapes suivantes et améliorations potentielles
- Annexe
Introduction
Vous avez déjà voulu conserver de nombreuses informations sur des réunions, des événements ou des conférences dans une feuille de calcul Google Sheets, et les partager et les rechercher facilement ? Chez Google, nous faisons exactement cela avec notre agenda des événements pour les développeurs. Les données qui alimentent l'agenda proviennent d'un grand nombre de Googlers de toute l'entreprise, dont beaucoup ont accès en modification à une feuille de calcul Google Sheets où les données sont stockées. La feuille de calcul contient des événements non confirmés, ainsi que des engagements très médiatisés. Les utilisateurs saisissent parfois des événements potentiels, avant même qu'une proposition soit envoyée ou qu'un sponsoring potentiel soit étudié. Un "éditeur" est responsable de la publication des événements et de leur enregistrement dans une colonne de la feuille de calcul.
Pourquoi ne pas gérer ces événements directement dans Google Agenda ? Agenda est idéal pour identifier le quand et le où d'un événement, mais une feuille de calcul est plus adaptée pour gérer de nombreuses informations structurées, comme les listes d'intervenants, les dates limites de soumission, etc.

Feuille de calcul Google Sheets source contenant la liste des événements
Un de mes collègues chez Google m'a suggéré de continuer à gérer les événements dans Google Sheets, mais de supprimer le processus manuel de publication dans notre agenda public externe. Je voulais également un projet intéressant basé sur plusieurs API de données Google ("GData" en abrégé) à présenter au Mashup Camp. C'est ainsi qu'est né Event Publisher.
Event Publisher est une application de validation de concept développée rapidement. Elle gère une liste d'événements dans Spreadsheets et les publie à la fois dans Agenda et Google Base. Google Agenda est un excellent moyen de partager des événements et de permettre aux utilisateurs de les inclure facilement dans leur propre vue d'agenda. Bien que Google Agenda permette de rechercher des événements, Google Base offre un autre moyen de les faire connaître. Il excelle dans le stockage de données structurées de manière à ce qu'elles soient faciles à rechercher.
Sheets, Agenda et Base fournissent chacun une API qui prend en charge les opérations de lecture/écriture complètes. Mieux encore, chacun de ces services expose l'accès à ses données à l'aide du protocole Google Data API.
Conception et implémentation
La phase de conception de ce projet était assez simple : je savais que je voulais créer une application Web pour publier des données de feuille de calcul dans un calendrier. L'objectif à long terme était de créer une application pouvant être utilisée pour le calendrier des événements pour les développeurs, tandis que l'objectif à court terme était de produire un mashup fonctionnel de preuve de concept pouvant être présenté lors du Mashup Camp. Dans cette optique, j'ai choisi la bibliothèque cliente Java GData, car il s'agit de l'une des bibliothèques clientes les plus abouties et que je suis habitué à écrire des applications Web Java. L'utilisation de l'une des bibliothèques clientes fournies m'a permis de ne pas avoir à me soucier du protocole GData brut et du modèle de données XML, et de me concentrer plutôt sur l'implémentation de la logique d'application relativement simple requise pour publier des événements.
J'ai téléchargé la bibliothèque cliente Java et commencé à concevoir le modèle de classe pour l'éditeur d'événements. J'ai créé un servlet, judicieusement nommé EventPublisherServlet, qui sert de contrôleur pour toutes les requêtes entrantes dans l'application Web. J'ai également créé une classe nommée EventPublisher pour gérer la logique métier d'interaction avec Agenda, Base et Sheets. Enfin, j'ai écrit une classe Bean pour stocker les données d'événement. L'interface utilisateur de l'application a été développée à l'aide de quelques JSP.
L'avantage de travailler avec plusieurs services GData est qu'ils sont cohérents dans leurs interfaces et que de nombreuses bibliothèques clientes incluent des classes d'assistance spécifiques aux services pour vos services Google préférés. Comme la bibliothèque cliente utilisait les mêmes classes Service, Entry et Feed pour les trois services que j'utilisais, j'ai pu utiliser un code très similaire pour récupérer les événements de Spreadsheets et les publier dans Base et Agenda. Cela a considérablement réduit mon temps de développement par rapport à ce qui aurait été nécessaire pour travailler avec trois API distinctes. Vous pouvez examiner les méthodes publishEventToCalendar() et publishEventToBase() dans EventPublisher pour voir les similitudes entre les différentes méthodes.
Obtenir et déployer l'éditeur d'événements
L'application Event Publisher est distribuée dans le téléchargement de la bibliothèque cliente Java Google Data. Après avoir téléchargé la bibliothèque cliente Java, recherchez le répertoire java/mashups/eventpub. Pour en savoir plus sur la signification de chaque fichier dans l'exemple, veuillez consulter la section Structure du projet de l'annexe.
L'application comporte un certain nombre de bibliothèques dépendantes qui doivent être téléchargées avant de créer l'éditeur d'événements. Après avoir configuré les options de compilation et d'exécution appropriées (consultez le fichier README.TXT), Ant peut être utilisé pour compiler les classes Java et générer un fichier WAR. Ce fichier WAR peut ensuite être déployé sur votre moteur de servlet préféré, tel que Tomcat 5.5, que j'ai utilisé pour tester cette application. Tomcat, qui s'exécute sous une configuration par défaut, exige uniquement que le fichier deploy/EventPublisher.war généré soit copié dans son répertoire webapps. Il sera ensuite déployé automatiquement et accessible via http://hostname:8080/EventPublisher.
Exécuter l'application : processus

Authentification auprès du compte Google Sheets via AuthSub.
- L'application est chargée en accédant à /EventPublisher sur l'hôte sur lequel elle s'exécute. Dans mon cas, j'exécute l'application à l'adresse http://localhost:8080/EventPublisher.
- Authentification pour Google Sheets
- L'utilisateur clique sur le lien "authenticate" (authentifier) généré par la fonction statique AuthSubUtil.getRequestUrl().
- L'utilisateur est redirigé vers les services de compte Google où, s'il n'est pas déjà connecté à Google, il est invité à saisir ses identifiants.
- L'utilisateur accorde à l'éditeur d'événements l'autorisation d'accéder à ses données dans Google Sheets.
- L'utilisateur est redirigé vers l'éditeur d'événements avec un jeton AuthSub à usage unique dans l'URL. L'éditeur d'événements échange le jeton à usage unique contre un jeton de session AuthSub à l'aide du service AuthSubSessionToken.
- Code : voir
EventPublisherServlet.processAcceptAuthSubToken()
- Documentation : consultez la documentation AuthSub.
- Sélectionner une feuille de calcul
- L'utilisateur est redirigé par l'éditeur d'événements vers une liste des feuilles de calcul accessibles par l'utilisateur autorisé.
- Après avoir sélectionné une feuille de calcul à partir de laquelle les données d'événement doivent être récupérées, l'utilisateur est également invité à sélectionner la feuille de calcul appropriée dans la feuille de calcul sélectionnée.
- Code : consultez
EventPublisher.getSsList()
etEventPublisher.getWsList()
- Récupérer et mapper les en-têtes de colonne
- L'application utilise ensuite le flux de cellules Spreadsheets pour récupérer la première ligne de données de la feuille de calcul, qui représente les en-têtes de colonnes. Chaque élément de données requis est listé pour l'utilisateur, qui est invité à sélectionner l'en-tête de colonne qui correspond le mieux aux données. Dans la capture d'écran à droite, chaque type de données requis est associé à une zone de sélection dans laquelle vous devez choisir l'en-tête de colonne correspondant. Ce mappage est stocké dans la session de l'utilisateur à l'aide du mécanisme de gestion des sessions du conteneur de servlet.
- Code : voir
EventPublisherServlet.processListEvents()
- Récupérer des entrées et les stocker dans Beans
- Une fois les colonnes mappées, Event Publisher récupère le flux de liste de feuilles de calcul contenant une seule entrée pour chaque ligne de la feuille de calcul. Chaque ligne représente un événement unique, et les données de la ligne sont insérées dans des instances du bean d'événement. La collection de Beans est ensuite stockée dans la session et affichée à l'écran pour confirmation, à l'aide de la page outputEventList.jsp.
- Publier les entrées dans Agenda et/ou Base
- L'utilisateur sélectionne la cible de publication appropriée (Agenda, Base ou les deux) et clique sur le bouton "Publier". Les événements sont envoyés depuis la collection d'objets Event stockés dans la session de l'utilisateur vers les services appropriés à l'aide des méthodes
publishEventsToBase()
etpublishEventsToCalendar
dans EventPublisher. Ces méthodes créent des objets d'entrée des types appropriés pour les services :CalendarEventEntry
etGoogleBaseEntry
. Ces entrées sont ensuite publiées via unHTTP POST
effectué par les classes serviceCalendarService
etGoogleBaseService
. - À mesure que les événements sont publiés, les URL de modification renvoyées par chaque service cible sont stockées dans la feuille de calcul Google à l'aide de la méthode
EventPublisher.updateSsEventEditUrl()
. Pour les futures itérations du processus de publication, les événements qui contiennent une URL de modification pour chaque service respectif dans la feuille de calcul sont modifiés plutôt que créés. Cela permet d'éviter les données d'événement en double.
- L'utilisateur sélectionne la cible de publication appropriée (Agenda, Base ou les deux) et clique sur le bouton "Publier". Les événements sont envoyés depuis la collection d'objets Event stockés dans la session de l'utilisateur vers les services appropriés à l'aide des méthodes


Mappez les données requises aux colonnes de la feuille de calcul et prévisualisez les événements à publier.
Prochaines étapes et améliorations potentielles
Comme indiqué précédemment dans cet article, cette application n'est actuellement qu'un prototype. Il ne s'agit pas d'un code prêt à être mis en production. Pour que l'éditeur d'événements soit prêt pour la production, il est nécessaire d'inclure une gestion des erreurs. Actuellement, les erreurs ne sont envoyées qu'à stderr. Les erreurs qui se produisent lors de la récupération, de la publication ou d'autres actions doivent être affichées dans le navigateur de l'utilisateur.
Il convient également de noter que Google Base, pour maintenir l'intégrité de son ensemble de données, fait expirer les éléments au bout d'un certain temps s'ils ne sont pas mis à jour. Si un événement a déjà été ajouté à Google Base, l'éditeur d'événements tente de le modifier à l'aide de l'URL de modification stockée dans la feuille de calcul Google. Si l'événement dans Base a expiré, l'URL de modification n'est plus valide et une erreur 404 sera renvoyée au moment de la publication. Une solution de contournement consiste à tenter d'insérer l'événement à la réception d'une réponse 404.
Une autre fonctionnalité qui pourrait être ajoutée à l'application Event Publisher est la possibilité de stocker et de publier les heures exactes des événements, et pas seulement la date. Étant donné que Google Base exige que des heures soient associées aux événements, le stockage de l'heure de chaque événement empêcherait que des heures arbitraires soient associées aux événements dans les entrées Base. Agenda peut également présenter les événements aux moments appropriés.
Vous pouvez également souhaiter disposer d'un mécanisme de stockage de données persistant pour stocker les configurations de feuilles de calcul spécifiques, y compris les mappages de colonnes. Il peut s'agir d'une feuille de calcul Google Sheets distincte, d'une base de données ou d'un stockage sur disque local.
J'espère que cet article vous a donné de nouvelles idées d'applications utilisant les API Google Data. Si vous souhaitez consulter le code source de cette application, ou la compiler et la modifier pour l'adapter à vos besoins, vous pouvez la trouver dans la bibliothèque cliente Java des API Google Data, dans le répertoire mashups/eventpub. N'hésitez pas à nous faire part de vos commentaires sur cet article sur le forum des développeurs des API Google Data. Pour toute question concernant un service spécifique, veuillez la poser dans les groupes de discussion dédiés.