(Pic from: veryicon.com)由於本文為更新版的內容,主要是修正舊文的參數,關於重要的原理、Json 資料格式、使用要點等內容便不再重複,請直接參考舊文「利用 Google 問卷(試算表)當小型資料庫__(二)讀取、儲存資料庫」,以下直接利用「上一篇」 取得的參數來進行資料庫的讀取與寫入。
最近發現 Google 又封鎖了本文經由問卷儲存資料的功能,因此目前仍是只有舊版試算表(問卷)能正常運作。在我找到新的方法之前,需要此功能的讀者,請留下你的email,如 email 不想公開,可使用「私密留言」留下 email 及註明這件事。
請注意,將來新的方法我不會公開發佈,避免發生這兩篇更新版的結果,因此只有留下 email,日後我才會個別通知。
二、讀取資料庫
1. 轉換為 Json 格式:
根據「上一篇」→「一、製作資料庫」→ 第 14 個步驟,我們得到「https://spreadsheets.google.com/feeds/list/0AikclfTTti-0dGFNMHRKdFVIaG12eE9wbUdkS1NYYXc/od6/public/basic?alt=rss」這樣的字串。
將這一行改為以下字串:
https://spreadsheets.google.com/feeds/list/0AikclfTTti-0dGFNMHRKdFVIaG12eE9wbUdkS1NYYXc/od6/public/values?alt=json-in-script
2. 分析 Json 內容:
將改過的字串貼到網址列,從瀏覽器顯示的 Json 格式資料,依照「舊版的方法」,問卷問題的資料將儲存在以下的位置:
json.feed.entry[0].gsx$問題標題.$t
在「上一篇」中我們設定了兩個問題標題 "Q1" 及 "Q2",因此這兩個問題的資料將分別儲存在:
json.feed.entry[0].gsx$q1.$t
json.feed.entry[0].gsx$q2.$t
請注意標題 "Q1" 及 "Q2" 都被自動轉換成小寫 "q1" 及 "q2" 了,因此之後使用 javascript 讀取資料時也必須用小寫的參數。
3. 印出資料庫內容:
接下來使用以下簡單的 javascript 就能呼叫試算表資料轉換的 Json 格式,呈現在自己的網頁:
B:設定處理 Json 的函數名為「test」,括弧內的參數建議設定為 json。
C:變數「a」抓出資料庫內儲存的資料組數。
E~F:設定變數「b、c」抓出每筆資料的儲存欄位
G:印出每筆資料
K:最重要的一行,綠色字串就是步驟 1 我們更改後的字串;紅色字串代表把抓出來的 Json 格式資料傳送給要執行的函數;藍色字串必須填上處理 Json 資料的函數,就是 B 行的 test 函數。
可以開一篇文章貼上程式碼看看跑出來的結果。
三、寫入資料庫
1. 利用網址傳送資料:我們在「上一篇」→ 第 7 個步驟得到的字串「https://docs.google.com/forms/d/1iVpKF_oArILEsQmjar5Ds4Zd7IRiurx6osjuiSTltbA/formResponse」
再配合第 8 個步驟得到的字串──
第一筆資料:entry.146652736
第二筆資料:entry.2142316379
假設我們第一筆資料填入 "WFU BLOG",第二筆資料填入 "http://wayne-fu.blogspot.com",那麼可組合成以下字串──
https://docs.google.com/forms/d/1iVpKF_oArILEsQmjar5Ds4Zd7IRiurx6osjuiSTltbA/formResponse?entry.146652736=WFU BLOG&entry.2142316379=http://wayne-fu.blogspot.com&submit=Submit
注意以上綠字的各種符號,網址填入參數必須以「?」問號開始,每筆參數、資料以「&」符號隔開,參數與資料之間使用「=」等號,最後填入「&submit=Submit」結束;
將以上字串貼到網址列按下 Enter,再回到試算表一看:
兩筆資料均順利寫入試算表!
2. 寫入資料注意事項:
- 第 1 點的舉例只傳送兩筆資料,如果問卷有多個問題,依照以上格式將所有問題依序塞入字串即可。
- 當使用 javascript 傳送資料時,為了避免某些字元在網址列被辨識錯誤,字串最好經過 escape 轉換,確保能成功存入試算表。
3. 動態傳送資料:使用 Iframe 來傳送資料的提示方法請參考「舊版文章」→「二、寫入資料庫」→「3. 動態傳送資料」。
四、資料庫應用舉例
舊版文章提供了「推文系統」 當作應用的舉例,目前而言比較近期的作品「部落格即時留言板 WYBOARD」會是較好的例子。
只是這兩個當作應用範例的話,程式仍是過於龐大,不是那麼淺顯易懂。將來有機會的話會弄個簡易範例,易於資料庫讀取、寫入的實際運用說明。