Mempublikasikan Acara - Menggabungkan Google Spreadsheet, Kalender, dan Base

Ryan Boyd, tim Google Data API
Juni 2007
  1. Pengantar
  2. Desain dan Penerapan
  3. Mendapatkan dan Men-deploy Event Publisher
  4. Menjalankan Aplikasi
  5. Langkah Berikutnya dan Potensi Peningkatan
  6. Lampiran

Pengantar

Pernahkah Anda ingin menyimpan banyak informasi tentang rapat, acara, atau konferensi di Google Spreadsheet dan membuat informasi tersebut mudah dibagikan dan ditelusuri? Nah, di Google, kami melakukannya dengan Kalender Acara Developer kami. Data yang dimasukkan ke dalam kalender berasal dari berbagai Googler di seluruh perusahaan. Banyak di antaranya memiliki akses edit ke Spreadsheet Google tempat data disimpan. Dalam spreadsheet, terdapat acara yang belum dikonfirmasi bersama dengan interaksi yang dipublikasikan dengan baik. Orang bahkan terkadang memasukkan acara prospektif -- bahkan sebelum proposal dikirimkan atau potensi sponsor diselidiki. "Editor" bertanggung jawab untuk memublikasikan acara dan mencatat acara yang dipublikasikan di kolom spreadsheet.

Mengapa kita tidak mengelola acara ini langsung di Google Kalender? Kalender cocok untuk mengidentifikasi kapan dan di mana suatu acara berlangsung, tetapi untuk mengelola banyak informasi terstruktur, seperti daftar pembicara, batas waktu pengiriman, dan sebagainya, spreadsheet lebih cocok.

Perekaman layar Google Spreadsheet dengan peristiwa
Spreadsheet Google sumber dengan daftar acara

Salah satu rekan Googler menyarankan agar kami terus mengelola acara di Spreadsheet, tetapi menghapus proses manual untuk memublikasikannya ke kalender publik eksternal kami. Saya juga menginginkan project menarik berdasarkan beberapa Google Data API ("GData" untuk singkatnya) untuk didemonstrasikan di Mashup Camp, sehingga lahirlah Event Publisher.

Event Publisher adalah aplikasi bukti konsep yang dikembangkan dengan cepat, yang menyimpan daftar acara di Spreadsheet dan memublikasikannya ke Kalender dan Google Base. Google Kalender menyediakan cara yang efektif untuk membagikan acara dan memudahkan orang menyertakan acara tersebut dalam tampilan kalender mereka sendiri. Meskipun Kalender menyediakan kemampuan untuk menelusuri acara, Google Base menyediakan platform lain untuk memublikasikan acara dan unggul dalam menyimpan data terstruktur dengan cara yang mudah ditelusuri.

Spreadsheet, Kalender, dan Base masing-masing menyediakan API yang mendukung operasi baca/tulis penuh. Lebih baik lagi, setiap layanan ini mengekspos akses ke datanya menggunakan protokol Google Data API.

Desain dan Penerapan

Fase desain proyek ini cukup sederhana: Saya tahu bahwa saya ingin membuat aplikasi web untuk memublikasikan data spreadsheet di kalender. Meskipun tujuan jangka panjangnya adalah membangun aplikasi yang dapat digunakan untuk Kalender Acara Developer, tujuan jangka pendeknya adalah menghasilkan mashup bukti konsep yang berfungsi dan dapat didemonstrasikan selama Mashup Camp. Dengan tujuan ini, saya memilih GData Java Client Library karena merupakan salah satu library klien yang lebih matang, dan saya sudah terbiasa menulis aplikasi web Java. Dengan menggunakan salah satu library klien yang disediakan, saya tidak perlu mengkhawatirkan protokol GData mentah dan model data XML, dan dapat berkonsentrasi pada penerapan logika aplikasi yang relatif sederhana yang diperlukan untuk memublikasikan peristiwa.

Saya mendownload Java Client Library dan mulai mendesain model class untuk penerbit acara. Saya membuat servlet, yang diberi nama EventPublisherServlet, yang bertindak sebagai pengontrol untuk semua permintaan yang masuk ke aplikasi web. Saya juga membuat class bernama EventPublisher untuk menangani logika bisnis dalam berinteraksi dengan Kalender, Base, dan Spreadsheet. Terakhir, saya menulis class Bean untuk menyimpan data peristiwa. Antarmuka pengguna aplikasi dikembangkan menggunakan beberapa JSP.

Keunggulan bekerja dengan beberapa layanan GData adalah layanan tersebut konsisten di seluruh antarmukanya dan banyak library klien menyertakan class helper khusus layanan untuk layanan Google favorit Anda. Karena Client Library memiliki class Service, Entry, dan Feed yang sama untuk tiga layanan yang saya gunakan, saya dapat menggunakan kode yang sangat mirip untuk mengambil peristiwa dari Spreadsheet dan memublikasikannya ke Base dan Kalender. Hal ini mempersingkat waktu pengembangan saya secara signifikan dibandingkan dengan waktu yang diperlukan untuk bekerja dengan tiga API yang berbeda. Anda dapat memeriksa metode publishEventToCalendar() dan publishEventToBase() di EventPublisher untuk melihat kesamaan antara berbagai metode.

Mendapatkan dan Men-deploy Event Publisher

Aplikasi Event Publisher didistribusikan sebagai bagian dari download Java Client Library Google Data. Setelah mendownload Library Klien Java, lihat di direktori java/mashups/eventpub. Lihat bagian struktur project di lampiran untuk mengetahui informasi selengkapnya tentang arti setiap file dalam contoh.

Aplikasi memiliki sejumlah library dependen yang perlu didownload sebelum membangun Event Publisher. Setelah mengonfigurasi opsi build dan runtime yang sesuai (lihat file README.TXT), Ant dapat digunakan untuk mengompilasi class Java dan membuat file WAR. File WAR ini kemudian dapat di-deploy ke mesin servlet favorit Anda, seperti Tomcat 5.5 yang saya gunakan dalam menguji aplikasi ini. Tomcat, yang berjalan di bawah konfigurasi default, hanya memerlukan file deploy/EventPublisher.war yang dihasilkan untuk disalin ke direktori webapps-nya. Kemudian, aplikasi akan di-deploy secara otomatis dan dapat diakses melalui http://hostname:8080/EventPublisher.

Menjalankan Aplikasi - Proses

Screenshot proses autentikasi AuthSub
Mengautentikasi ke akun Google Spreadsheet melalui AuthSub.
  • Aplikasi dimuat dengan membuka /EventPublisher di host yang menjalankan aplikasi. Dalam kasus saya, saya menjalankan aplikasi di http://localhost:8080/EventPublisher
  • Autentikasi untuk Google Spreadsheet
    • Pengguna mengklik link "authenticate" yang dibuat oleh fungsi statis: AuthSubUtil.getRequestUrl().
    • Pengguna akan dialihkan ke layanan Akun Google. Jika pengguna belum login ke Google, mereka akan diminta untuk memasukkan kredensialnya.
    • Pengguna memberikan izin kepada Penerbit Acara untuk mengakses data Spreadsheet mereka.
    • Pengguna akan dialihkan kembali ke Event Publisher dengan token AuthSub sekali pakai di URL. Penerbit Peristiwa menukarkan token sekali pakai dengan token sesi AuthSub menggunakan layanan AuthSubSessionToken.
    • Kode: Lihat EventPublisherServlet.processAcceptAuthSubToken()
    • Dokumentasi: Lihat dokumentasi AuthSub
  • Pilih spreadsheet/lembar kerja
    • Pengguna akan dialihkan oleh Penerbit Acara ke daftar spreadsheet yang dapat diakses oleh pengguna yang diotorisasi.
    • Setelah memilih spreadsheet tempat data peristiwa harus diambil, pengguna juga akan diminta untuk memilih worksheet yang sesuai di spreadsheet yang dipilih.
    • Kode: Lihat EventPublisher.getSsList() dan EventPublisher.getWsList()
  • Screenshot kolom pemetaan Screenshot kolom pemetaan
    Memetakan data yang diperlukan ke kolom spreadsheet dan melihat pratinjau peristiwa yang akan dipublikasikan.
  • Mengambil dan memetakan header kolom
    • Kemudian, aplikasi menggunakan feed sel Spreadsheet untuk mengambil baris pertama data dari spreadsheet -- baris pertama ini mewakili header kolom. Setiap data yang diperlukan dicantumkan untuk pengguna dan mereka diminta untuk memilih header kolom yang paling cocok dengan data. Pada screenshot di sebelah kanan, setiap jenis data yang diperlukan memiliki kotak pilihan di sampingnya tempat Anda akan memilih header kolom yang sesuai. Pemetaan ini disimpan dalam sesi pengguna menggunakan mekanisme penanganan sesi penampung servlet.
    • Kode: Lihat EventPublisherServlet.processListEvents()
  • Mengambil entri dan menyimpannya di Beans
    • Setelah kolom dipetakan, Event Publisher akan mengambil feed daftar Spreadsheet yang berisi satu entri untuk setiap baris dalam lembar kerja. Setiap baris mewakili satu peristiwa, dan data dari baris tersebut diisi ke dalam instance Event Bean. Koleksi Beans kemudian disimpan dalam sesi dan juga ditampilkan ke layar untuk dikonfirmasi -- menggunakan halaman outputEventList.jsp.
  • Publikasikan Entri ke Kalender dan/atau Base
    • Pengguna memilih target publikasi yang sesuai (Kalender, Basis, atau keduanya) dan mengklik tombol 'Publikasikan'. Peristiwa dikirim dari kumpulan objek Peristiwa yang disimpan dalam sesi pengguna ke layanan yang sesuai menggunakan metode publishEventsToBase() dan publishEventsToCalendar di EventPublisher. Metode ini membuat objek entri dari jenis yang sesuai untuk layanan: CalendarEventEntry dan GoogleBaseEntry. Entri ini kemudian diposting melalui HTTP POST yang dilakukan oleh class service CalendarService dan GoogleBaseService
    • Saat peristiwa dipublikasikan, URL pengeditan yang ditampilkan oleh setiap layanan target disimpan di Spreadsheet Google menggunakan metode EventPublisher.updateSsEventEditUrl(). Untuk iterasi mendatang dari proses publikasi, peristiwa yang berisi URL pengeditan untuk setiap layanan terkait di Spreadsheet akan diedit, bukan dibuat. Hal ini mencegah duplikasi data peristiwa.

Langkah Berikutnya dan Potensi Peningkatan

Seperti yang disebutkan sebelumnya dalam artikel ini, aplikasi ini saat ini hanya berupa prototipe. Kode ini tidak dimaksudkan untuk menjadi kode yang siap produksi. Agar Event Publisher siap digunakan dalam produksi, beberapa penanganan error perlu disertakan. Saat ini, error hanya dikirim ke stderr. Sebagai gantinya, error yang terjadi selama pengambilan, publikasi, atau tindakan lainnya harus ditampilkan di browser pengguna.

Selain itu, perlu diperhatikan bahwa Google Base, untuk menjaga integritas set datanya, akan mengakhiri masa berlaku item setelah jangka waktu tertentu jika item tersebut tidak diperbarui. Jika peristiwa telah ditambahkan ke Google Base, Penayang Acara akan mencoba memperbarui peristiwa menggunakan URL edit yang disimpan di Google Spreadsheet. Jika item acara di Base telah berakhir masa berlakunya, URL pengeditan tidak lagi valid dan error 404 akan ditampilkan pada saat publikasi. Solusinya adalah mencoba menyisipkan peristiwa setelah menerima respons 404.

Fitur lain yang dapat ditambahkan ke aplikasi Event Publisher adalah kemampuan untuk menyimpan dan memublikasikan waktu pasti acara, bukan hanya tanggalnya. Karena Google Base mengharuskan waktu dilampirkan ke acara, menyimpan waktu setiap acara akan mencegah waktu arbitrer dikaitkan dengan acara dalam entri Base. Kalender juga dapat menampilkan acara pada waktu yang tepat.

Anda mungkin juga ingin memiliki mekanisme penyimpanan data persisten untuk menyimpan konfigurasi spreadsheet tertentu, termasuk pemetaan kolom. Data ini dapat berupa Spreadsheet Google terpisah, database, atau penyimpanan disk lokal.

Semoga artikel ini memicu imajinasi Anda untuk menghasilkan ide-ide baru yang cemerlang untuk aplikasi yang memanfaatkan Google Data API. Jika Anda tertarik untuk melihat atau membuat dan mengubah aplikasi ini agar sesuai dengan kebutuhan Anda, Anda dapat menemukannya di Java Client Library Google Data API di direktori mashups/eventpub. Selain itu, kami menerima masukan Anda tentang artikel ini di forum developer Google Data API. Untuk pertanyaan terkait layanan tertentu, posting di grup diskusi khusus layanan.

Lampiran

Referensi Tambahan