用 Google 試算表抓取上櫃資料教學

上市股票的股價可以用GOOGLEFINANCE("TPE:xxxx")來抓到即時資料,
但找了好久一直找不到最新可用的方法來抓上櫃的,
索性就study了一下,沒想到最後真的成功了,特別分享一下給大家也順便記錄一下
簡單說就是用"指令碼編輯器"來實現抓取台灣證券交易所的即時股價這個功能,

1.請點選 工具=>指令碼編輯器 如圖一

圖一:

2.出現圖二畫面後,將以下程式碼貼上去 如圖二,記得存檔

function OTCPRICE(code) { 
  var url = "https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=otc_" + code + ".tw&json=1&delay=0";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText("UTF-8");
  var data = JSON.parse(json);
  var z = data.msgArray[0].z;
  var a = data.msgArray[0].a;
  var u = data.msgArray[0].u;
  var ret;
  if(z > '0')
    ret = parseFloat(z).toFixed(2);
  else if(a > '0')
    ret = parseFloat(a).toFixed(2);
  else //漲停價
    ret = parseFloat(u).toFixed(2);
  
  return ret;
}

function TSEPRICE(code) { 
  var url = "https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_" + code + ".tw&json=1&delay=0";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText("UTF-8");
  var data = JSON.parse(json);
  var z = data.msgArray[0].z;
  var a = data.msgArray[0].a;
  var u = data.msgArray[0].u;
  var ret;
  if(z > '0')
    ret = parseFloat(z).toFixed(2);
  else if(a > '0')
    ret = parseFloat(a).toFixed(2);
  else //漲停價
    ret = parseFloat(u).toFixed(2);
  
  return ret;
}

圖二:


3.回到google 試算表 找到要拿到即時上市或上櫃股價的儲存格,填入 
=IFERROR(TSEPRICE(D2),OTCPRICE(D2))
記得把D2換成你輸入股票代碼的地方(我是放在D2)如下圖三
圖三:


只要以上三個步驟就完工了,我是連原本上市的個股一律都用台灣證券交易所的即時資料,會比GOOGLEFINANCE()還來得即時,若是日後還有問題,歡迎留言討論喔!

Comments