Google 表單當資料庫

Google 資料庫方案–Spreadsheet–(1)資料呈現

image
HEMiDEMi 的標籤: ,,

早在規劃『教育,意義! 』project時,
便有打算將整個網站建立過程撰寫一篇教學,讓有興趣以google 服務為基礎進行開發的朋友參考。
沒想到這個想法擺著就拖了好幾個月,
好在學生提出了問題,就趁這機會寫一寫吧。

基本上『教育,意義! 』網站的架構完全建立在Google提供的服務,
廣義來說也是個雲端的系統,
所有的資料是分散在不同的服務架構下,再用GAE, Javascrript將服務資訊串接起來,
由Blogspot 統一呈現。


省了租主機的費用,或架站的硬體、電費,
最好的地方在於不用管理主機維運的問題,
只要專心做我的創意、嘗鮮就好了!!多棒!

若將『教育,意義! 』網站依功能層次來分類,可以分為三層結構,
當中的層次與使用技術大致如下:

  1. UI 介面層
  2. App應用層 
  3. 資料層
本篇文章將著重在介紹以Google Spreadsheet 做為雲端資料庫,
其他主題將會陸續推出。
若對Google API 與 Google App Engine 初步建置有興趣,
可以參考之前文章:
佛心來著的 Google Data API – for JAVA
雲端的開始:Netbeans 無痛 Google App Engine Java 服務開發

Google Spreadsheet 做為資料庫系統

對於小型的資料系統來說,
採用Google Spreadsheet做為應用程式資料庫(如問卷調查或線上系統) 也算堪用,
目前的儲存限制為 :
  • 40 萬個儲存格
  • 每張工作表最多 256 欄

而Google Spreadsheet 的資料存取則有許多種做法,
可以透過Google Data API 函式以RSS feed進行存取,亦可以URL方式呈現直接匯入程式。
本文首先介紹如何呈現Spreadsheet資料,
並介紹在使用Google Data API前如何設定 Spread Sheet RSS Feed以供程式讀取。

首先,建立一Spreadsheet 試算表為範例,命名為TestSheet
Spreadsheet的建立方法可以直接進入Google Docs (Google文件)後建立新項目 - 試算表,

Google 文件 - temp


建立好的試算表中預設為一個工作表,但為求精確,
範例中建立兩個工作表來介紹其連結方式,其內容如下:

image image


資料顯示部份,以下逐一說明,

首先最重要的是取出Spreadsheet的 key 值做為將來連結指定的標的,
但一如Google 以往的Geek作法,這個key只能從網址上找到,
此外要注意,這個Key是登入帳號後進入該試算表(spreadsheet)的key,
不是設定共用後所提供的網址裡面的key!!
設定共用後提供的key必需在”發佈(publish)後才可使用,切記!

以本範例為例:
登入後連結link為
https://spreadsheets1.google.com/ccc?hl=zh_TW&key=tRfatqc-LjJEiTknzgX85Fg&hl=zh_TW#gid=0
( key值為:tRfatqc-LjJEiTknzgX85Fg )

而共用分享的Link為:
https://spreadsheets.google.com/ccc?key=0AsoQevXXmTncdFJmYXRxYy1MakpFaVRrbnpnWDg1Rmc&hl=zh_TW
( key值為:0AsoQevXXmTncdFJmYXRxYy1MakpFaVRrbnpnWDg1Rmc )


故使用的key值為:tRfatqc-LjJEiTknzgX85Fg
這個key便會用在之後資料接收時所要對應的spreadsheet連結。

隨後,便可以開始資料的連結與截取:


1. Spreadsheet  直接資料呈現

Spreadsheet 除了以共享方式讓其他人使用外,
還可以透過發佈(Publish) 的方式進行資料分享,

image

隨後便可以選擇要發佈的工作表、資料連結方式與發佈方式,
image

發佈後,便可以進行資料連結,
常用的資料連結方式有兩種,html與文字檔(csv)
其連結方式可用下面網址:

https://spreadsheets.google.com/pub?key=你的key值&output=html
https://spreadsheets.google.com/pub?key=你的key值&output=csv

如範例:
https://spreadsheets.google.com/pub?key=tRfatqc-LjJEiTknzgX85Fg&output=html
https://spreadsheets.google.com/pub?key=tRfatqc-LjJEiTknzgX85Fg&output=csv  


csv的連結會帶回一個csv檔,內容便是以逗點隔開資料的方式儲存如:
MID,Artist,Album
M0001,Elliott Smith,Either Or
M0002,Jeff Buckley,Grace
M0003,Arab Strap,Philophobia
M0004,Mogwai ,Happy Songs For Happy People

此外若spreadsheet有多個工作表,在使用時便要指定目標工作表,
方法為在網址上加上工作表ID:  gid = ?

如範例: (工作表一gid=0,工作表二gid=1)
https://spreadsheets.google.com/pub?key=tRfatqc-LjJEiTknzgX85Fg&output=csv&gid=0
https://spreadsheets.google.com/pub?key=tRfatqc-LjJEiTknzgX85Fg&output=csv&gid=1

透過文字檔的網址連結方式,
只要在撰寫程式時設計一個Buffer,將網址回傳的csv資料存入buffer,
再轉為String 或 StringBuffer物件 (java),
便可以直接取回資料庫內容。


2. RSS Feed (XML)  呈現

在RSS Feed (XML)呈現方式上,
好處是直接以XML顯示,在程式上只要套上XML parser就可以依序取出,
而且若採用Google Data API 進行連結,
無需使用發佈(publish)功能,便可以直接取用 (因API需要先行進行帳號密碼認證)。

針對已經Publish的spreadsheet,可以使用以下連結來檢視你的spreadsheet資訊,
當中有該spreadsheet資訊與各個工作表名稱,但不含各工作表資料內容
https://spreadsheets.google.com/feeds/worksheets/你的key值/public/basic


此外RSS Feed提供三種不同的資料表示方式:
Worksheet-based feed
List-based feed
Cell-based feed

標準連結設定格式如下 (標註藍色為需修改項目):

Worksheet-based feed
List-based feed
Cell-based feed

當中各別參數代表意義為:
key : SpreadSheet key
worksheetId : 工作表編號
visibility : 檢視權限 , 分為public與private,若有開起公佈(publish)才能使用public,一般private則為google data API連結時使用。
projection :  顯示內容形態,分為full/values/basic。 full 模式中除了顯示欄位資料外亦包含公式內容,values則不含公式資料(以值取代)但含有Data API項目,basic模式則僅含有欄位值。

詳細資料可參考 Google Spreadsheets Data API Reference Guide (v3.0) :http://code.google.com/apis/spreadsheets/data/3.0/reference.html#Feeds

基本上,使用private模式時都是透過Google Data API進行連結,
因此在full 模式下是允許更新資料的,然而在values/basic模式下則為唯讀。


以下使用範例介紹RSS Feed 結果,
因為設定public ,故無需透過API進行身份認證,以下使用 List-based feed模式:
工作表一連結
工作表二連結
image

以上為連結顯示的資料內容!
透過線上XML縮排網站( http://xmlindent.com/ ) 整理其內容,
可以清楚瞭解資料結構的呈現關係:
工作表一 RSS Feed縮排內容連結
工作表二 RSS Feed縮排內容 連結
image


以上,
就是Google SpreadSheet的資料顯示模式,
透過URL或RSS Feed資料交換方式,
我們就可以輕鬆利用Google SpreadSheet做為簡易的資料庫使用囉!

文章出處:http://bp.51donate.com/2011/04/google-spreadsheet1.html

沒有留言

技術提供:Blogger.