發布活動 - 整合 Google 試算表、日曆和 Base

Ryan Boyd,Google Data API 團隊
2007 年 6 月
  1. 簡介
  2. 設計與實作
  3. 取得及部署事件發布者
  4. 執行應用程式
  5. 後續步驟和潛在改善項目
  6. 附錄

簡介

您是否曾想在 Google 試算表中維護大量會議、活動或研討會資訊,並輕鬆分享及搜尋這些資訊?在 Google,我們就是透過開發人員活動日曆來達成這個目標。日曆的資料來源是整個公司中各式各樣的 Google 員工,其中許多人都有權編輯儲存資料的 Google 試算表。在試算表中,未確認的活動會與廣為宣傳的參與度並存。有時,使用者甚至會在提案提交或潛在贊助調查之前,輸入預期活動。「編輯者」負責發布活動,並在試算表的欄中記錄已發布的活動。

為什麼我們不直接在 Google 日曆中維護這些活動?Google 日曆適合用來識別活動的時間和地點,但如果要維護大量結構化資訊 (例如講者名單、提交期限等),試算表會更合適。

Google 試算表的螢幕截圖,顯示活動
含有活動清單的來源 Google 試算表

其中一位 Google 員工建議我們繼續在試算表中維護活動,但移除手動將活動發布至外部公開日曆的程序。此外,我也想在 Mashup Camp 展示一個有趣的專案,該專案是以多個 Google Data API (簡稱「GData」) 為基礎,因此 Event Publisher 就此誕生。

活動發布工具是快速開發的概念驗證應用程式,可維護試算表中的活動清單,並將活動發布至 Google 日曆和 Google Base。Google 日曆提供分享活動的絕佳方式,讓使用者輕鬆將活動加入自己的日曆檢視畫面。雖然日曆提供活動搜尋功能,但 Google Base 也能宣傳活動,而且擅長儲存結構化資料,方便搜尋。

試算表、日曆和 Base 各自提供支援完整讀取/寫入作業的 API。更棒的是,這些服務都使用 Google Data API 協定公開資料存取權!

設計與實作

這個專案的設計階段相當簡單:我知道自己想製作網頁應用程式,在日曆上發布試算表資料。長期目標是建構可供開發人員活動日曆使用的應用程式,短期目標則是製作可運作的混合式概念驗證,以便在 Mashup Camp 期間展示。考量到這些目標,我選擇了 GData Java 用戶端程式庫,因為這是較成熟的用戶端程式庫之一,而且我熟悉如何編寫 Java 網路應用程式。使用提供的其中一個用戶端程式庫,讓我不必擔心原始 GData 通訊協定和 XML 資料模型,可以專心實作發布事件所需的相對簡單應用程式邏輯。

我下載了 Java 用戶端程式庫,並開始設計事件發布者的類別模型。我建立了一個名為 EventPublisherServlet 的 Servlet,做為所有傳入網路應用程式要求的控制器。我也建立了名為 EventPublisher 的類別,用於處理與 Google 日曆、Base 和試算表互動的商業邏輯。最後,我編寫了 Bean 類別,用於儲存事件資料。應用程式的使用者介面是使用少數 JSP 開發而成。

使用多項 GData 服務的好處是,這些服務的介面一致,而且許多用戶端程式庫都包含您喜愛的 Google 服務專用輔助類別。由於我使用的三項服務都採用相同的用戶端程式庫,因此我能夠使用非常類似的程式碼,從試算表擷取事件並發布至 Base 和日曆。與使用三種不同的 API 相比,這大幅縮短了我的開發時間。您可以檢查 EventPublisher 中的 publishEventToCalendar() 和 publishEventToBase() 方法,瞭解不同方法之間的相似之處。

取得及部署事件發布者

Event Publisher 應用程式會隨 Google Data Java 用戶端程式庫下載內容一併發布。下載 Java 用戶端程式庫後,請查看 java/mashups/eventpub 目錄。如要進一步瞭解範例中每個檔案的意義,請參閱附錄中的「專案結構」一節。

應用程式有許多相依程式庫,必須先下載這些程式庫,才能建構 Event Publisher。設定適當的建構和執行階段選項後 (請參閱 README.TXT 檔案),即可使用 Ant 編譯 Java 類別並產生 WAR 檔案。接著,您可以將這個 WAR 檔案部署到慣用的 Servlet 引擎,例如 Tomcat 5.5 (我用來測試這個應用程式)。在預設設定下執行的 Tomcat 只需要將產生的 deploy/EventPublisher.war 檔案複製到 webapps 目錄即可。系統會自動部署,並透過 http://hostname:8080/EventPublisher 存取。

執行應用程式 - 程序

AuthSub 驗證程序的螢幕截圖
透過 AuthSub 向 Google 試算表帳戶驗證。
  • 在執行應用程式的主機上前往 /EventPublisher,即可載入應用程式。以我的情況來說,我是在 http://localhost:8080/EventPublisher 執行應用程式
  • Google 試算表驗證
    • 使用者點選靜態函式 AuthSubUtil.getRequestUrl() 產生的「驗證」連結。
    • 使用者會重新導向至 Google 帳戶服務,如果尚未登入 Google,系統會提示使用者輸入憑證。
    • 使用者授予「活動發布者」權限,允許對方存取自己的試算表資料。
    • 使用者會重新導向至活動發布者,網址中包含一次性 AuthSub 權杖。事件發布者會使用 AuthSubSessionToken 服務,將一次性權杖換成 AuthSub 工作階段權杖。
    • 程式碼:請參閱 EventPublisherServlet.processAcceptAuthSubToken()
    • 說明文件:請參閱 AuthSub 說明文件
  • 選取試算表/工作表
    • Event Publisher 會將使用者重新導向至授權使用者可存取的試算表清單。
    • 選取要從哪個試算表擷取事件資料後,系統也會提示使用者在所選試算表中選取適當的工作表。
    • 程式碼:請參閱 EventPublisher.getSsList()EventPublisher.getWsList()
  • 對應欄位的螢幕截圖 對應欄位的螢幕截圖
    將必要資料對應至試算表欄,並預覽要發布的活動。
  • 擷取及對應欄標題
    • 接著,應用程式會使用試算表儲存格動態饋給,從試算表擷取第一列資料,也就是資料欄標題。系統會列出使用者需要的每項資料,並提示他們選取最符合資料的欄標題。在右側的螢幕截圖中,每個必要資料類型旁邊都有一個選取方塊,您可以在其中選擇對應的欄標題。這項對應會使用 Servlet 容器的工作階段處理機制,儲存在使用者工作階段中。
    • 程式碼:請參閱 EventPublisherServlet.processListEvents()
  • 擷取項目並儲存在 Beans 中
    • 對應資料欄後,事件發布者會擷取試算表清單動態消息,其中包含工作表每列的單一項目。每一列代表一個事件,而該列的資料會填入 Event Bean 的例項。接著,Bean 集合會儲存在工作階段中,並輸出至畫面以供確認 (使用 outputEventList.jsp 頁面)。
  • 將項目發布至 Google 日曆和/或 Base
    • 使用者選取適當的發布目標 (日曆、基地或兩者),然後按一下「發布」按鈕。系統會使用 EventPublisher 中的 publishEventsToBase()publishEventsToCalendar 方法,將使用者工作階段中儲存的 Event 物件集合推送至適當的服務。這些方法會為服務建立適當類型的項目物件CalendarEventEntryGoogleBaseEntry。這些項目隨後會透過 HTTP POST 發布,由 服務類別 CalendarServiceGoogleBaseService 執行
    • 發布活動時,每個目標服務傳回的編輯網址會使用 EventPublisher.updateSsEventEditUrl() 方法儲存在 Google 試算表中。日後發布程序疊代時,系統會編輯試算表中每個服務的編輯網址,而不是建立網址。避免重複計算事件資料。

後續步驟和潛在改善項目

如本文稍早所述,這個應用程式目前僅為原型。這並非適用於正式環境的程式碼。如要讓 Event Publisher 適用於正式環境,必須加入一些錯誤處理機制。目前錯誤只會傳送至 stderr。而應在使用者瀏覽器中顯示擷取、發布或其他動作期間發生的錯誤。

此外,請注意,為維護資料集的完整性,如果項目未更新,Google Base 會在一段時間後讓項目過期。如果活動已新增至 Google Base,活動發布者會嘗試使用 Google 試算表儲存的編輯網址更新活動。如果 Base 中的活動項目已過期,編輯網址就會失效,發布時會傳回 404 錯誤。解決方法是在收到 404 回應時嘗試插入事件。

Event Publisher 應用程式可新增另一項功能,也就是儲存及發布活動的確切時間,而不只是日期。由於 Google Base 規定事件必須附上時間,因此儲存每個事件的時間可避免任意時間與 Base 項目中的事件建立關聯。Google 日曆也會在適當時間顯示活動。

您可能也希望擁有持續性資料儲存機制,以便儲存特定試算表的設定,包括資料欄對應。這可以是獨立的 Google 試算表、資料庫或本機磁碟儲存空間。

希望本文能激發您的想像力,為運用 Google Data API 的應用程式發想出一些絕妙的新點子!如要查看這個應用程式的來源,或建構及修改應用程式以符合需求,請前往 Google Data API Java 用戶端程式庫mashups/eventpub 目錄。此外,歡迎在 Google Data APIs 開發人員論壇中,對本文提出意見回饋。如有特定服務相關問題,請在該服務的討論群組中發布貼文。

附錄

其他資源