如何設計好網站的搜尋框(Search Bar)?
只是搜尋框「而已」,有這麼多事情可以特別來寫一篇文章嗎?有的!其實搜尋框的各種細節,包含的都是設計師的貼心!
Google Apps Script 是一種程式碼語言,語法類似 Javascript,開發者完全不需要準備開發工具,就可以擴展 Google Apps 建構類似巨集的效果,達到工作流程自動化的目標,也可以建立 Web 應用程式,整合 Google 協作工具。
客戶狀況前情提要:
1. 客戶使用 Google Sheets 完成前台頁面的變化。
2. Google Sheets 可以有個 API 讓 Wordprss 可以 request。
原先預想 運用 Google Sheets 可以直接用「發佈到網路」,如果這樣使用 ajax 引用的話會有 CORS 的問題。
主要不使用的原因是直接從 Google Sheets 下來的資料其實有太多不是我們想要的。如果直接使用 WordPress 做 request 的話,會額外花太多精力在清洗資料不能直接拿來用,所以最後決定使用Google Apps Script 來做 Google Sheet 的轉接。
有些網路上會說:「透過 Google Sheet API 拿回來的資料預設會帶有 CORS Header,所以不受跨 domain 存取限制,很方便吧!」但僅限於舊版 Google Sheets 能這樣做,現在的版本都不行了。
I’ve confirmed that this is a bug in the Drive API, but it is only affecting the exportLinks for New Google Sheets file. Old Google Sheets and other Google file types should work correctly. I’ve raised it with the team, but it’s unclear how long it will take to fix. Unfortunately there are no simple workarounds, and the only solution would be to introduce a server-side component that would download the file and then pass it along to the client.
如果真的想要只用 Google Sheets 做 API 可以用 Tabletop javascript 來引入,就不會有 CORS 的問題了。Google Apps Script 在接 Google 相關服務其實都蠻方便的,比如說 Google Drive 或是 Google Calendar 等。
(2021/08/22更新)
前些日子用 Tabletop javascript(新版好像叫做 Papa parse) 或測試直接串 google excel (就是網路上用 google excel key 組出一個 url 的那種方式),發現此方法被 google 檔了,會有 CORS 的問題,但如果用 google app script 做轉接仍然會通
Step 1 / 完成 Sheets 的編輯後,在雲端硬碟新增一個 Google Apps script,如果沒有就點擊「更多…」尋找。
用 Google Apps Script 不用 「發佈到網路」
Step 2 / Google Apps Script 是吃 doGet() 開始的
function doGet(e){
var ss = SpreadsheetApp.openByUrl(“google sheet 的 URL”);
var sheet = ss.getSheetByName(“該 sheet 的 name (下方該表單的名稱)”);
return getUsers(sheet);
}
function getUsers(sheet){
var jo = {};
var dataArray = [];
// 從地 3 橫排開始收集資料, 並從第一直排到最後橫排及最後直排
var rows = sheet.getRange(3,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
for(var i = 0, l= rows.length; i<l ; i++){
var dataRow = rows[i];
var record = {};
record[‘secondary_category’] = dataRow[2];
record[‘name’] = dataRow[3];
dataArray.push(record);
}
jo.user = dataArray;
var result = JSON.stringify(jo);
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
因為目前 Google Apps Script 並非 100% 支援 ES6 的語法,所以有寫還是要用舊語法來寫
Step 3 / 把 Google Apps Script 對外發佈。
發佈 → 部署為網路應用程式
Step 4 / 專案版本,點擊新增,選擇新增才會更新 Google Apps Script 的對外 API 資訊。
應用程式存取權只用者,更改為 「任何人,甚至是匿名使用者」
Step 5 /點擊「部署」
Stpe 6 / 給予授權
就會獲得該網路應用的網址
Step 7 / 簡單地使用 postman 測試,是有成功拿到我們要的 Google Sheets 資料跟 json 格式
Google Sheets 可以當一個簡單的後台來做,網路上也有很多服務也是用 Google Sheets 做後台編輯,例如 timeline.js。
野薑在實際運用於客戶專案上時,發現由 Google Sheets 呈現出來的 Excel 表格,客戶接受度掌握度比較高,對客戶顯而易見的好處是:
所以運用 Google Sheets 做一個簡易的 CMS ,成本親民且上手接單,許多客戶的接受度都相當高。
免費版本的 Google Sheets API 限制為每 100 秒 500 個請求,每個用戶每 100 秒可以發出 100 個請求。讀取和寫入的限制是單獨計算。沒有每日使用限制。
基本上 Google Apps Script 是免費的,但如果流量變大超越上述,才需要付費給 Google :
要查看或更改項目的使用限制,又或是需要增加配額,請執行以下操作:
野薑為客戶建置的網站「台灣健康都市聯盟:文獻資源」,即是透過編寫 Google Sheets 而達成的基礎資料庫。
No ‘Access-Control-Allow-Origin’ header for exportLink
No CORS header on GET of exportLink of New Google Sheets
How to use Google Sheets As Your Website Database
Get Sheet Done — using Google Spreadsheets as your data backend
利用-Google-試算表-Google-Sheet-作為外部資料來源
利用 Google 試算表當小型資料庫 (4)使用 SQL 語法讓搜尋功能更強大
Vedio:Get Google Sheet Data in JSON Format using App Script code
野薑已經轉型不再執行此業務囉!可以參考我們其他服務唷!