跳到主要內容

Advance Google Form - 使用Google Form搭配Web Server做即時資料處理

Google Form提供了一個強大的線上編輯功能
並且結合Google Sheet可以做到分析與後製圖表等動作
而不斷"長大"的Google推出Apps Script之後
許多的應用不斷的在衍生...

這邊介紹如何透過Apps Script結合Form的服務,並直接後送後端的HTTP伺服器做即時的後續處理動作(這邊不規範後續處理,範圍太大了@@)...

1. 建置屬於你的Form表單


2. 完成Form建置後,可以發現從Drive點選Form會以Sheet的方式打開,此時點選插入,選擇"指令碼"


3. 選擇指令碼後,Google會開立一個Apps Script的編輯畫面,此時可以幫你的Script命名...


4. 這邊我們直接採用readRows(),可以直接把下面這段code加到for loop下面

  Logger.log('Call url...');
  var response = UrlFetchApp.fetch("http://hello.my.micloud.tw:1337/test", {
    method:"POST",
    payload:{
      row_a:row[0],row_b:row[1],row_c:row[2]
    }
  });
  Browser.msgBox(response.getContentText());

上面程式中,主要是針對http://hello.my.micloud.tw:1337/test做POST的動作
因此在UrlFetchApp.fetch的第二個參數中加入option參數,告知要用POST method以及表單的內容(payload欄位)
最後透過getContentText()來trigger整個http request的動作

5. 然後,接下來要把function attach到form的event裡面,點選工具列的啟動程序(小時中按鈕)


6. 啟動程序視窗中增加readRows()的執行,活動選擇"來自試算表",最後的動作選擇"提交表單時" (通知的部份,如果有需要寄mail通知有人提交表單的話,可以在這邊增加)


7. Server Side: 這邊用Node.js實作接取的route部分
7.1 Create server using express
express test
7.2 Install dependency
cd test && npm install
7.3 Add new route... (新增加下面route到app.js中)
app.all('/test', function(req, res){
  console.log(req.body);
  //TODO: 處理之實作
  res.end(JSON.stringify(req.body));
});
7.4 啟動Server
node app.js

測試:提交測試表單


檢視Web Server Log: 
因為Web Server上有接收相對應的傳入,並寫Log(這邊只做到Log的處理啦,進階可以搭配發信或是其他動作處理傳入的資料...),因此可以在Log Console中看到Form填完沒多久就會有資料傳入了...



細心的各位看倌,如果有發現啟動程序的活動下拉還有其他項目的話...沒錯,他可以當做時間排程器來用,意思是說... 將來可以透過Apps Script做http監控拉、排程trigger服務...拉∼讚!

留言

  1. 能教一下Web Server
    如何架設媽?
    感謝!

    回覆刪除
  2. 如果可以接受Google表單的制定格式
    其實可以搭配Google Site + Google Doc + Apps Script來做到一個漂亮的網站
    以Site作為靜態資料發佈的介面,Doc作為資料儲存的媒體,Script作為動態的腳本程式
    要建立一個基本的服務網站,相信已經足夠

    但如果要建立更專業的網站,有兩個方向給您參考:
    1. 使用github page做靜態網站,結合web2.0的各項服務外掛或開發Action Script作為Server端,以REST為資料傳輸協定
    2. 使用雲端主機服務,例如MiCloud, AWS等等,透過像WordPress等的架站程式建構網站

    回覆刪除

張貼留言

這個網誌中的熱門文章

透過Google Apps Script結合Google Form做即時郵件通知

體驗過Google Apps Script的功能後,也發現他結合GmailApps的模組 GmailApps的應用可以用在表單填寫完成後,做發信的通知 例如您開立了一個訂購的表單,為了要在第一時間通知商家有訂單進入 就可以直接呼叫Gmail做發信的通知,讓手持Smart Phone的我們可以很快的知道生意上門了! 下面規劃三個function,其中: onCommit():為form commit時候觸發的function,需要掛載於form commit trigger上 jsonArrToTable():目的將json array解析成為一個Table getLastRowTable():目的將整個table的回傳過濾為剩下第一筆(表頭,含有Form的欄位說明)與最後一筆(原則上就是剛剛送出的那一筆表單) 完整程式碼如下: function onCommit(){   var sheet = SpreadsheetApp.getActiveSheet();   var rows = sheet.getDataRange();   var numRows = rows.getNumRows();   var values = rows.getValues();   var content = getLastRowTable(values);   var htmlBody = "Hi Admin: <br/><br/>有訂單拉,檢查一下吧! <br/><br/>" + content + '<br/><br/>Send by Google Apps';   GmailApp.sendEmail(     " your-email-address@gmail.com ",      "Order Confirm Notice",      htmlBody,      {from: ' from-email-...

Share a chrome plugin for manage google cloud platform

好玩意兒報報.... 同事的新作,把Google Project List在Chrome Plugin中! 對一次管理多個專案的人來說,真得超方便的拉! 下載: https://chrome.google.com/webstore/detail/gdclauncher/bicgkglnnilldakpenngnblekooejnpg 使用說明: 1. Use browser url bar to quick search: Type "gdcl" in browser Press "TAB" to start search Type the project id key word then select the search result... 2. Using quick launch bar... You can search by keyword or click project name to go to the project or gae link to go to gae or go to billing page....

Cloud Monitor嚐鮮

GCP上,我們非常想要的一個功能,終於問世.... Cloud Monitor來了!