用Google Apps Script取得Google Excel資料

用Google Apps Script取得Google Excel資料

未發佈到網路也能取得資料

之前寫過一篇「如何用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上面寫的資料來源是這個:

https://docs.google.com/spreadsheets/d/1UF2pSkFTURko2OvfHWWlFpDFAr1UxCBA4JLwlSP6KFo/htmlview?usp=sharing&sle=true#

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資料:

用postman取得Sheet資料
用postman取得Sheet資料(點擊看原圖)

可以看到成功取得資料了,而且原Sheet裡的一行就是一個陣列,知道這個規則後,可以在GAS回傳資料前先做個整理。

因為之後會拿來接Google Maps API,在整理時也要保留經緯度,用一個for迴圈來整理需要的資料:

2020.02.10補充:今天發現對方的Sheet改了欄位,移掉了原本的第三欄,因此取得的欄位實際上有做修改,在此補充。

再次發佈後,用postman就可以看到整理過的資料:

整理過的資料
整理過的資料(點擊看原圖)

以上,就是用GAS取得Sheet資料的方式,完整程式碼如下:

最後拿資料畫在Google Map的部份寫在這篇:畫新冠肺炎分佈圖


Summary
用Google Apps Script取得Google Excel資料
Article Name
用Google Apps Script取得Google Excel資料
Description
本篇大綱:未發佈到網路也能取得資料。取得資料的事前工作。Sheet:取得id、設定共用。GAS要部署成網路網路應用程式。GAS上的程式碼部份。一種取得Google Sheet資料的方法,就是用Google Apps Script的API來取得。
Augustus
Let's Write
Let's Write
Publisher Logo
訂閱
通知
guest
0 Comments
Inline Feedbacks
看所有留言