顯示具有 Google Sheets 標籤的文章。 顯示所有文章
顯示具有 Google Sheets 標籤的文章。 顯示所有文章

Google 試算表使用玉山富果(Fugle) API

更新

原 v0 版本將於 2021-06-26 終止服務。連結要改成 v0.2 喔!

前言

Google 試算表已經有一個好用的函式叫 GOOGLEFINANCE,比如用 GOOGLEFINANCE("TPE:2330") 就能拿到台積電的股價,不過這個函式只支援上市的股票

,上櫃/興櫃都是其他方式去抓,時好時壞,用沒多久可能就失效了!

這個月在玉山銀行辦了玉山證券富果帳戶,帳戶開通後就能使用他們的 API,免費方案一分鐘能呼叫60次,WebSocket 連線數5條,還有線上文件可以參考,平常就常在串接/開發 API,這個 API 不拿來用實在太可惜。

按照以下教學,就可以在 Google 試算表中用函式的方式拿到上市/上櫃/興櫃的股價:


玉山證券富果 API 文件

步驟1:先看一下線上文件,最終最終決定用 META(提供盤中個股/指數當日基本資訊) 這支 API,priceReference 就是今日參考價。


玉山證券富果開帳號取得 Token

步驟2:你要先有玉山證券富果帳戶,透過此連結開帳號你我都能得到富果幣回饋金,右上方帳號 > API 權限 / 管理,複製 API Token。




Google 試算表新增函式

步驟3:開一張新的 Google 試算表,工具 > 指令碼編輯器。


步驟4:在指令碼編輯器中貼上以下程式碼,儲存。


function FUGLEMETA(code)
{
  const url = "https://api.fugle.tw/realtime/v0.2/intraday/meta?symbolId=" + code + "&apiToken=貼上步驟2複製的API Token";
  const response = UrlFetchApp.fetch(url);
  const json = response.getContentText("UTF-8");
  const data = JSON.parse(json);
  return data.data.meta.priceReference;
}


步驟5:你這張 Google 試算表就多了一個函式 FUGLEMETA 可以用了,比如用 FUGLEMETA(2330) 就能拿到台積電的股價。



用 Google Sheets 爬網頁資料


Google 提供的試算表很好用又免費,很多人拿來做自己系統的運算,如果今天有個表格欄位是要填網頁上的某個文字,每次都要自己手動填是不是很麻煩,不用另外寫程式(script),只要學會 IMPORTXML 和 REGEXEXTRACT 兩個函式,就可以完成這個需求。

以下用抓網頁上的報價這個情境當作範例,帶大家走一次。我們想要抓 https://www.f2pool.com/help 上面乙太幣的24小時理論收益(下圖紅字處)。


先使用 IMPORTXML 函式

利用 IMPORTXML,可以抓網頁上指定的區塊。
  • 第一個參數要填網址,填上 https://www.f2pool.com/help
  • 第二個參數要填 XPath 代表某個網頁區塊在 HTML 裡的位置(往下看有教你如何用 Chrome 取得 XPath),在此我們填上 //*[@id='miner-overview']/div/table/tbody/tr[6]/td[5]/strong[1]
    • 使用 Chrome 選取要的文字,右鍵按檢查就會跳出開發者主控台,它會跳到該文字在 HTML 上的位置。

    • 開發者主控台選取 HTML 上的位置,右鍵按 Copy > Copy XPath 就能取得 XPath。這邊取得為 //*[@id="miner-overview"]/div/table/tbody/tr[6]/td[5]/strong[1]

    • 把剛剛取得的 XPath 裡頭的雙引號改成單引號,要不然函式會出錯。
上述完成後,我們可以看到試算表已經正確顯示了“0.00047846 ETH 每 Mhash/s”這個字串。


但我們只想要數字,不想要後面多的描述,這時候你就至少要懂一下正規表示法了,不用到可以憑空寫出但至少要能做到邊看規格邊改的程度。如果真的看不懂那也不勉強,至少不用開網頁就手動複製要的那段數字吧。

使用 REGEXEXTRACT 函式

利用 REGEXEXTRACT,可以從字串中擷取出我們想要的部分。
  • 第一個參數填上字串或是表格,這邊我們填上表格。
  • 第二個參數填上正規運算式,這邊我們填上 \d+.\d+ ,白話就是找出這個字串中有小數點的數字。


上述完成後,我們可以看到試算表已經正確顯示了“0.00047846”這個字串。

寫在最後

上述方法碰到一些用 JavaScript 動態更新的網頁上會失效。這做法並不會一直更新,而是會暫存這結果約兩個小時才會在更新,如果想要進一步做到定期更新的話,就需要利用 Google App Script 去定期更新這張試算表,這篇有破臉書100個喜歡再來花時間介紹好了。