跳到主要內容

Google指令碼基本操作介紹 - Web Server篇

Google的指令碼是什麼東西呢?!原則上他就是Google的一份靜態檔案,但是透過Google的雲端服務平台的一些能力,將靜態檔案內的scriptlet片段拉到Google的後端作運算,寫起來就像在寫JavaScript(這邊說Node.js可能比較貼切,因為同為server side language)或JSP,而在scriptlet片段中,則可以操作許多Google的API服務,甚至他提供你連接JDBC的能力、URL呼叫的能力...等,宛如就是一套完整的雲端程式語言(這樣說應該不為過拉,這真是個創新!),有並駕於App Engine的氣勢喔!

Google指令碼的範圍很廣,筆者也仍在摸索中,之前介紹過透過Sheet+指令碼做一個簡單的URL監控(這裡),而本篇簡單介紹一下指令碼如何製作一個Web Server(嚴格說起來是Web Page拉,但是具備Server端運作功能喔!)。您將可以體驗到No-Hosting Web Server的威力!

指令碼是Google Drive的一個服務,Google將指令碼(Code)以檔案方式寄存在Drive中,類似的靜態檔案服務的應用,最近滿火紅的!


首先開啟指令碼時候,選擇"作為網路應用程式的指令碼",檔案開啟後,會有愈設定程式碼片段供編輯


程式碼片段大致上如下,是一個doGet function,Web base的指令碼需要認得doGet()作為server的進入點
如果選擇到空白專案的話,只要把doGet function建上即可


作為一個Cloud IDE,Google當然也有把Code Hint擺上來,透過簡單的提示,寫啟程是來就更容易拉!


而Web部分物件的建立主要是透過HtmlService這個模組來進行操作,我們利用他來output html, load static html page, load template html page..等,範例如下:

Output HTML:
// Script-as-app template.
function doGet(e) {
  return HtmlService.createHtmlOutput("<h1>HELLO!</h1>");
}

透過上HtmlService的createHtmlOutput的功能,可以簡單的把html文件吐交給前端做呈現,內部的html tag也會被browser轉意,因此上面的h1 tag最後會呈現成:


Load static html page:
指令碼中,允許一個以上的檔案存在,這邊我們需要另外建立一個HTML文件,透過HtmlService來把靜態文件load到前端:

建立HTML文件:


文件編輯如下:RegisterPage.html
<html>
  <body>
    <form id="regForm">
      <div>Username: <input type="text" id="username"/></div>
      <div>Email: <input type="text" id="mail"/></div>
      <input type="submit" value="submit"/>
    </form>
  </body>
</html>

指令碼部分修改如下:
// Script-as-app template.
function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('RegisterPage')
}
這邊是叫用createHtmlOutputFromFile()來讀取靜態文...

執行後輸出:


Load template html page:
Load template的部份與前段的差異在template是希望竟泰文建中有部分片段可以有scriptlet程式功能,指令碼中透過templet檔案中的<? ?>, <?= ?>來代表scriptlet程式片段,這邊可以直接修改HTML檔案如下:
RegisterPage.html
<html>
  <body>
    <h1><?=showDate()?></h1>
    <form id="regForm">
      <div>Username: <input type="text" id="username"/></div>
      <div>Email: <input type="text" id="mail"/></div>
      <input type="submit" value="submit"/>
    </form>
  </body>
</html>

而指令碼部分修改如下:
// Script-as-app template.
function doGet(e) {
  return HtmlService.createTemplateFromFile('RegisterPage').evaluate();
}
function showDate(){
 return new Date().toString(); 
}

上面程式片段中指出,指令馬中多了一個function,則html template中可以透過scriptlet來叫用該新增的function,另外,載入template html的部份是使用HtmlService.createTemplateFromFile()。而值得注意的,其中有一些同名函數,可以辨別輸入的物件型態來呼叫不同操作(OO中的泛型概念),這點是JavaScript語法中所沒有的...

上面片段的輸出如下:


上述的三種方式,相信應該對聰明的程序員來說已經有相當多的衍生了...,可以開始建立No-Hosting Web Service服務拉!


留言

  1. 你好,想跟你請教一下

    我在做表單的統計時,有個問題

    我的問卷回覆是文字例如:"[A] 5分 而 [B] 0分"

    要如何將文字轉換成數值呢?例如把上面那段文字,轉換成5

    回覆刪除

張貼留言

這個網誌中的熱門文章

透過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來了!