2013年2月24日 星期日

Google 表單當資料庫

以下內容節錄自這裡,先在此備份一下


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