Haziran 2007
- Giriş
- Tasarım ve Uygulama
- Etkinlik Yayınlayıcıyı Edinme ve Dağıtma
- Uygulamayı çalıştırma
- Sonraki Adımlar ve Olası İyileştirmeler
- Ek
Giriş
Toplantılar, etkinlikler veya konferanslarla ilgili bir sürü bilgiyi Google E-Tablosu'nda tutmak ve bu bilgilerin kolayca paylaşılmasını ve aranmasını hiç istediniz mi? Google'da Geliştiriciler Etkinlik Takvimi ile tam olarak bunu yapıyoruz. Takvimi besleyen veriler, şirketin tamamındaki çok çeşitli Google çalışanlarından gelir. Bu çalışanların çoğu, verilerin depolandığı bir Google E-Tablosu'na düzenleme erişimine sahiptir. E-tabloda, iyi duyurulmuş etkileşimlerin yanı sıra onaylanmamış etkinlikler de yer alıyor. Kullanıcılar bazen teklif gönderilmeden veya olası sponsorluklar araştırılmadan bile yaklaşan etkinlikleri girer. "Düzenleyici", etkinlikleri yayınlamaktan ve yayınlanan etkinlikleri e-tablodaki bir sütuna kaydetmekten sorumludur.
Neden bu etkinlikleri doğrudan Google Takvim'de tutmuyoruz? Takvim, bir etkinliğin ne zaman ve nerede gerçekleşeceğini belirlemek için uygundur ancak konuşmacı listeleri ve gönderim son tarihleri gibi birçok yapılandırılmış bilgiyi yönetmek için e-tablo daha uygundur.

Etkinlik listesini içeren kaynak Google e-tablosu
Google'daki bir iş arkadaşım, etkinlikleri E-Tablolar'da tutmaya devam etmemizi ancak bunları harici herkese açık takvimimizde yayınlama işlemini kaldırmamızı önerdi. Ayrıca Mashup Camp'te göstermek için birden fazla Google Veri API'sine ("GData" olarak kısaltılır) dayalı ilgi çekici bir proje istiyordum ve böylece Etkinlik Yayıncısı doğdu.
Event Publisher, E-Tablolar'da etkinlik listesini tutan ve hem Takvim'de hem de Google Base'de yayınlayan, hızlıca geliştirilmiş bir konsept kanıtlama uygulamasıdır. Google Takvim, etkinlikleri paylaşmak ve kullanıcıların bu etkinlikleri kendi takvim görünümlerine kolayca eklemelerini sağlamak için harika bir yöntem sunar. Takvim, etkinlikleri arama olanağı sunsa da Google Base, etkinlikleri duyurmak için başka bir platform sağlar ve yapılandırılmış verileri kolayca aranabilecek şekilde depolama konusunda üstündür.
E-Tablolar, Takvim ve Base'in her biri tam okuma/yazma işlemlerini destekleyen bir API sağlar. Dahası, bu hizmetlerin her biri, Google Data API protokolünü kullanarak verilerine erişim sunar.
Tasarım ve Uygulama
Bu projenin tasarım aşaması oldukça basitti: E-tablo verilerini bir takvimde yayınlamak için bir web uygulaması oluşturmak istediğimi biliyordum. Uzun vadeli hedef, Geliştiriciler Etkinlik Takvimi için kullanılabilecek bir uygulama oluşturmaktı. Kısa vadeli hedef ise Mashup Camp sırasında gösterilebilecek, işlevsel bir konsept kanıtı mashup'ı üretmekti. Bu hedefleri göz önünde bulundurarak, daha olgun istemci kitaplıklarından biri olduğu ve Java web uygulamaları yazma konusunda deneyimli olduğum için GData Java İstemci Kitaplığı'nı seçtim. Sağlanan istemci kitaplıklarından birini kullanmak, beni ham GData protokolü ve XML veri modeli hakkında endişelenmekten kurtardı. Bunun yerine, etkinlik yayınlamak için gereken nispeten basit uygulama mantığını uygulamaya odaklanabildim.
Java istemci kitaplığını indirdim ve etkinlik yayıncısı için sınıf modelini tasarlamaya başladım. Web uygulamasına gelen tüm istekler için denetleyici görevi gören EventPublisherServlet adlı bir servlet oluşturdum. Ayrıca Takvim, Base ve E-Tablolar ile etkileşimde bulunmak için gereken iş mantığını işlemek üzere EventPublisher adlı bir sınıf oluşturdum. Son olarak, etkinlik verilerini depolamak için bir Bean sınıfı yazdım. Uygulamanın kullanıcı arayüzü, birkaç JSP kullanılarak geliştirildi.
Birden fazla GData hizmetiyle çalışmanın avantajı, arayüzlerinin tutarlı olması ve birçok istemci kitaplığının, en sevdiğiniz Google hizmetleri için hizmete özel yardımcı sınıflar içermesidir. İstemci kitaplığında, kullandığım üç hizmet için aynı Service, Entry ve Feed sınıfları bulunduğundan, etkinlikleri elektronik tablolardan alıp Base ve Takvim'de yayınlamak için çok benzer bir kod kullanabildim. Bu, üç farklı API ile çalışmak için gereken süreye kıyasla geliştirme süremde önemli bir kısalma sağladı. Farklı yöntemler arasındaki benzerlikleri görmek için EventPublisher'daki publishEventToCalendar() ve publishEventToBase() yöntemlerini inceleyebilirsiniz.
Event Publisher'ı Edinme ve Dağıtma
Event Publisher uygulaması, Google Data Java Client Library indirme işleminin bir parçası olarak dağıtılır. Java istemci kitaplığını indirdikten sonra java/mashups/eventpub dizinine bakın. Örnekteki her dosyanın anlamı hakkında daha fazla bilgi için lütfen ekteki proje yapısı bölümüne bakın.
Uygulamanın, Event Publisher oluşturulmadan önce indirilmesi gereken bir dizi bağımlı kitaplığı vardır. Uygun derleme ve çalışma zamanı seçeneklerini yapılandırdıktan sonra (README.TXT dosyasına bakın) Java sınıflarını derlemek ve bir WAR dosyası oluşturmak için Ant kullanılabilir. Bu WAR dosyası daha sonra bu uygulamayı test ederken kullandığım Tomcat 5.5 gibi en sevdiğiniz servlet motoruna dağıtılabilir. Varsayılan yapılandırmayla çalışan Tomcat'in, oluşturulan deploy/EventPublisher.war dosyasının webapps dizinine kopyalanması dışında bir gereksinimi yoktur. Ardından otomatik olarak dağıtılır ve http://hostname:8080/EventPublisher üzerinden erişilebilir.
Uygulamayı çalıştırma - Süreç

AuthSub aracılığıyla Google E-Tablolar hesabında kimlik doğrulama.
- Uygulama, uygulamayı çalıştıran ana makinede /EventPublisher adresi ziyaret edilerek yüklenir. Benim durumumda uygulamayı http://localhost:8080/EventPublisher adresinde çalıştırıyorum.
- Google E-Tablolar için kimlik doğrulama
- Kullanıcı, statik işlev AuthSubUtil.getRequestUrl() tarafından oluşturulan "kimlik doğrulama" bağlantısını tıklar.
- Kullanıcı, Google Hesabı hizmetlerine yönlendirilir. Kullanıcı Google'da oturum açmamışsa kimlik bilgileri istenir.
- Kullanıcı, Etkinlik Yayınlayıcı'ya E-Tablolar verilerine erişme izni verir.
- Kullanıcı, URL'de tek kullanımlık bir AuthSub jetonuyla Etkinlik Yayınlayıcı'ya geri yönlendirilir. Etkinlik Yayıncısı, AuthSubSessionToken hizmetini kullanarak tek kullanımlık jetonu AuthSub oturum jetonuyla değiştirir.
- Kod:
EventPublisherServlet.processAcceptAuthSubToken()
bölümüne bakın. - Belgeler: AuthSub belgelerine bakın.
- E-tablo/çalışma sayfası seçin
- Kullanıcı, Etkinlik Yayınlayıcı tarafından yetkili kullanıcının erişebildiği elektronik tabloların listesine yönlendirilir.
- Etkinlik verilerinin alınacağı e-tabloyu seçtikten sonra kullanıcıdan, seçilen e-tablodaki uygun çalışma sayfasını da seçmesi istenir.
- Kod:
EventPublisher.getSsList()
veEventPublisher.getWsList()
simgelerine bakın.
- Sütun başlıklarını alma ve eşleme
- Uygulama daha sonra e-tablodaki ilk veri satırını almak için E-Tablolar hücre feed'ini kullanır. Bu ilk satır, sütun başlıklarını temsil eder. Gerekli verilerin her biri kullanıcı için listelenir ve verilerle en iyi eşleşen sütun başlığını seçmesi istenir. Sağdaki ekran görüntüsünde, gereken her veri türünün yanında ilgili sütun başlığını seçebileceğiniz bir seçim kutusu bulunur. Bu eşleme, servlet kapsayıcının oturum işleme mekanizması kullanılarak kullanıcının oturumunda saklanır.
- Kod:
EventPublisherServlet.processListEvents()
bölümüne bakın.
- Girişleri alma ve Beans'te saklama
- Sütunlar eşlendikten sonra Etkinlik Yayıncısı, çalışma sayfasındaki her satır için tek bir giriş içeren E-tablolar listesi feed'ini alır. Her satır tek bir etkinliği temsil eder ve satırdaki veriler, Event Bean örneklerine doldurulur. Daha sonra toplanan Bean'ler oturumda saklanır ve outputEventList.jsp sayfası kullanılarak onay için ekrana da verilir.
- Girişleri Takvim ve/veya Base'de yayınlama
- Kullanıcı uygun yayın hedefini (Takvim, Base veya her ikisi) seçer ve "Yayınla" düğmesini tıklar. Etkinlikler, kullanıcının oturumunda depolanan Etkinlik nesneleri koleksiyonundan EventPublisher'daki
publishEventsToBase()
vepublishEventsToCalendar
yöntemleri kullanılarak uygun hizmetlere gönderilir. Bu yöntemler, hizmetler için uygun türlerde giriş nesneleri oluşturur:CalendarEventEntry
veGoogleBaseEntry
. Bu girişler daha sonraHTTP POST
aracılığıyla hizmet sınıflarıCalendarService
veGoogleBaseService
tarafından yayınlanır. - Etkinlikler yayınlandıkça her hedef hizmet tarafından döndürülen düzenleme URL'leri,
EventPublisher.updateSsEventEditUrl()
yöntemi kullanılarak Google E-Tablosu'nda depolanır. Yayınlama sürecinin gelecekteki yinelemelerinde, e-tablodaki her hizmet için düzenleme URL'si içeren etkinlikler oluşturulmak yerine düzenlenir. Bu, yinelenen etkinlik verilerini önler.
- Kullanıcı uygun yayın hedefini (Takvim, Base veya her ikisi) seçer ve "Yayınla" düğmesini tıklar. Etkinlikler, kullanıcının oturumunda depolanan Etkinlik nesneleri koleksiyonundan EventPublisher'daki


Gerekli verileri e-tablo sütunlarıyla eşleme ve yayınlanacak etkinliklerin önizlemesini yapma.
Sonraki Adımlar ve Olası İyileştirmeler
Bu makalenin önceki bölümlerinde belirtildiği gibi, bu uygulama şu anda yalnızca bir prototiptir. Üretime hazır kod olması amaçlanmamıştır. Event Publisher'ı üretime hazır hale getirmek için bazı hata işleme yöntemlerinin eklenmesi gerekir. Şu anda hatalar yalnızca stderr'ye gönderilmektedir. Bunun yerine, alma, yayınlama veya diğer işlemler sırasında oluşan hatalar kullanıcının tarayıcısında gösterilmelidir.
Ayrıca, Google Base'in veri kümesinin bütünlüğünü korumak için güncellenmeyen öğelerin belirli bir süre sonra geçerlilik süresinin sona erdiği de unutulmamalıdır. Bir etkinlik Google Base'e zaten eklenmişse Etkinlik Yayıncısı, Google E-Tablosu'nda depolanan düzenleme URL'sini kullanarak etkinliği güncellemeye çalışır. Base'deki etkinlik öğesinin süresi dolmuşsa düzenleme URL'si artık geçerli değildir ve yayınlama sırasında 404 hatası döndürülür. Geçici çözüm olarak, 404 yanıtı alındıktan sonra etkinliği eklemeyi deneyebilirsiniz.
Etkinlik Yayınlayıcı uygulamasına eklenebilecek bir diğer özellik de etkinliklerin yalnızca tarihini değil, tam saatlerini de saklama ve yayınlama olanağıdır. Google Base, etkinliklere saat eklenmesini gerektirdiğinden her etkinliğin saatini depolamak, Base girişlerindeki etkinliklerle rastgele saatlerin ilişkilendirilmesini önler. Takvim, etkinlikleri uygun zamanlarda da gösterebilir.
Ayrıca, sütun eşlemeleri de dahil olmak üzere belirli e-tabloların yapılandırmalarını depolamak için kalıcı bir veri depolama mekanizması kullanmak isteyebilirsiniz. Bu, ayrı bir Google E-Tablosu, bir veritabanı veya yerel disk depolama alanı şeklinde olabilir.
Umarım bu makale, Google Veri API'lerini kullanan uygulamalar için harika yeni fikirler üretme konusunda hayal gücünüzü harekete geçirmiştir. Bu uygulamanın kaynağına bakmak veya uygulamayı oluşturup ihtiyaçlarınıza göre değiştirmek istiyorsanız uygulamayı Google Veri API'leri Java İstemci Kitaplığı'ndaki mashups/eventpub dizininde bulabilirsiniz. Ayrıca, bu makaleyle ilgili geri bildirimlerinizi Google Veri API'leri geliştirici forumunda paylaşabilirsiniz. Belirli bir hizmetle ilgili sorularınızı lütfen hizmete özel tartışma gruplarında paylaşın.