本篇大綱
未發佈到網路也能取得資料
之前寫過一篇「如何用Google Excel當作資料庫」,知道Google Sheet的id,並且有發佈到網路的狀況下,可以直接用網址取得這份Google Sheet的JSON。
那一篇適合的情境,通常是那個Google Sheet是我們自己所擁有,可以執行發佈到網路這個步驟。
那如果要抓的是別人Google Sheet的資料呢?
最近新冠肺炎的消息飛來飛去,下了班不太想去人太多的地方,就只好躲在家裡追劇寫code,又看到有一個站整理了確診之類的資料:Coronavirus 2019-nCoV,想說不然結合之前寫的Google Maps API,來做個熱圖(Heat map)。
然後,在第一步取得資料悲劇就發生了,Augustus無法直接用網址的方式取得Google Sheet裡的資料,因為對方沒有選擇發佈到網路上,只有單純的檢視權限。
幸好這個時代有偉大的Google,爬了一下文後,找到了另一種取得Google Sheet資料的方法,就是用Google Apps Script的API來取得。(Google Apps Script以下簡稱GAS、Google Sheet以下簡稱Sheet)
取得資料的事前工作
在用GAS取得Sheet的資料前,有兩樣東西必備,一個就是要有一份Sheet,一個就是要有一個GAS……嗯,寫完這句後有點在講廢話的感覺。
Sheet:取得id、設定共用
Sheet的id,直接從網址上看,我們進到Sheet的頁面後,網址會像這樣:
https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0
Sheet的id就是:abc1234567
像新冠肺炎Coronavirus 2019-nCoV上面寫的資料來源是這個:
這是廣告,點擊一下可以幫本站多個一點點的廣告收入,謝謝
id就是:1UF2pSkFTURko2OvfHWWlFpDFAr1UxCBA4JLwlSP6KFo
2020.02.11補充:根劇這個Sheet的公告,他們的資料將會更新在Github上,Sheet就不再更新了,因此這個ID的更新日期只到2/10。本篇單純成為如何用GAS取得Sheet資料的筆記。
設定共用也很簡單,先按下右上角的「共用」:

會出現一個燈箱,按下右上角的「開啟連結共用設定」:

會看到燈箱變成一段分享用的網址,就代表共用設定成功:

這個步驟一定要執行,一定要設定成可以被檢視,不然就會拿不到資料。
Coronavirus 2019-nCoV的資料來源我們點開來是看得到資料的,就代表的共用設定是設成可以檢視。
GAS要部署成網路網路應用程式
GAS要當成API來用,之後才能回傳抓到的Sheet資料,這部份直接看之前寫過的筆記文:
Google Apps Script 基本使用:跨網域AJAX、接Firebase
GAS上的程式碼部份
一開始是搜尋GAS sheet的說明文件,看到官方說明長這樣:
這是廣告,點擊一下可以幫本站多個一點點的廣告收入,謝謝
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app
可以看到每種type又是一個文件的連結,整個加起來就要比萬里長城還長了。
還好,我們這邊只需要做取資料的動作,之前在寫GAS接Firebase時,看到的說明文件就有提供,只需要以下程式就可以取得Sheet的資料:
發佈後用postman看有沒有取得Sheet資料:
可以看到成功取得資料了,而且原Sheet裡的一行就是一個陣列,知道這個規則後,可以在GAS回傳資料前先做個整理。
因為之後會拿來接Google Maps API,在整理時也要保留經緯度,用一個for迴圈來整理需要的資料:
2020.02.10補充:今天發現對方的Sheet改了欄位,移掉了原本的第三欄,因此取得的欄位實際上有做修改,在此補充。
再次發佈後,用postman就可以看到整理過的資料:
以上,就是用GAS取得Sheet資料的方式,完整程式碼如下:
最後拿資料畫在Google Map的部份寫在這篇:畫新冠肺炎分佈圖

