Google 試算表透過 Apps Script 抓「台灣證券交易所」股價資訊

更新 發佈閱讀 12 分鐘

本程式碼原始由網路上收集而來,但我已經忘記原本的作者是誰,我也做過許多修改。

股票資料來源是「 台灣證券交易所 」提供的API

例如我要取得(上市) 2330 台積電股價,只要抓取「 https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2330.tw&json=1&delay=0&_=20250825162321 」就可以得到以下JSON資料:

{"msgArray":[{"@":"2330.tw","tv":"2460","ps":"2305","pid":"9.tse.tw|14550","pz":"1170.0000","bp":"0","fv":"53","oa":"1175.0000","ob":"1170.0000","m%":"000000","^":"20250825","key":"tse_2330.tw_20250825","a":"1175.0000_1180.0000_1185.0000_1190.0000_1195.0000_","b":"1170.0000_1165.0000_1160.0000_1155.0000_1150.0000_","c":"2330","#":"13.tse.tw|2090","d":"20250825","%":"14:30:00","ch":"2330.tw","tlong":"1756103400000","ot":"14:30:00","f":"901_3104_2469_1466_1173_","g":"23_953_1245_930_867_","ip":"0","mt":"000000","ov":"29514","h":"1180.0000","i":"24","it":"12","oz":"1175.0000","l":"1160.0000","n":"台積電","o":"1165.0000","p":"0","ex":"tse","s":"2460","t":"13:30:00","u":"1245.0000","v":"25021","w":"1025.0000","nf":"台灣積體電路製造股份有限公司","y":"1135.0000","z":"1170.0000","ts":"0"}],"referer":"","userDelay":5000,"rtcode":"0000","queryTime":{"sysDate":"20250825","stockInfoItem":3890,"stockInfo":486,"sessionStr":"UserSession","sysTime":"16:25:23","showChart":false,"sessionFromTime":1756103475118,"sessionLatestTime":1756103475118},"rtmessage":"OK","exKey":"if_tse_2330.tw_zh-tw.null","cachedAlive":1660}
raw-image

再例如,我要取得(上櫃)00687B 國泰美債20年,只把網址改一下:「 https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=otc_00687B.tw&json=1&delay=0&_=20250825162321

raw-image

基於JSON資料於是我們寫了以下程式碼:

/* https://mis.twse.com.tw/stock/fibest.jsp?stock=2330 台灣證券交易所 */
function get_stock_price(code,gettype,ot) {
 
  //code="2330"
  //gettype = "z"
  //ot = "tse" //tse:上市;otc:上櫃;
  if (ot== ""){ ot = "tse" }
  try {  
    var headers = {"User-Agent":"Mozilla/5.0"}
    var options_step2 = {"method":"get","headers":headers,"timeout":50000}    
    //var now = Date.now()
    // 取得現在日期&時間
    var date = new Date();
    var year = date.getYear()+1900;
    var month = date.getMonth() + 1;  if(month.toString().length==1){var month = '0'+month;}
    var day = date.getDate(); if(day.toString().length==1){var day = '0'+day;}
    var hour = date.getHours(); if(hour.toString().length==1){var hour = '0'+hour;}
    var minu = date.getMinutes(); if(minu.toString().length==1){var minu = '0'+minu;}
    var seco = date.getSeconds(); if(seco.toString().length==1){var seco = '0'+seco;}
    var datestr = year+month+day+hour+minu+seco;

    //var url = "http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch="+ot+"_" + code + ".tw&json=1&delay=0&_=" + now.toString()
    var url="https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch="+ot+"_"+code+".tw&json=1&delay=0&_="+datestr
    var re_step2 = UrlFetchApp.fetch(url, options_step2)

    /* 取得資料後,整理回傳到Google試算表 */
    var data = JSON.parse(re_step2.getContentText())

    //var stockinfo = new FORMAT()
    //stockinfo.recentprice = data.msgArray[0].z  /* 最近成交價 */
    //stockinfo.tempvol = data.msgArray[0].tv  /* 當盤成交量 */
    //stockinfo.totalvol = data.msgArray[0].v  /* 今日成交量 */
    //stockinfo.best5saleprice = data.msgArray[0].a  /* 最佳五檔賣價 */
    //stockinfo.best5salevol = data.msgArray[0].f  /* 最佳五檔賣量 */
    //stockinfo.best5buyprice = data.msgArray[0].b  /* 最佳五檔買價 */
    //stockinfo.best5buyvol = data.msgArray[0].g  /* 最佳五檔買價 */
    //stockinfo.crawltime = data.msgArray[0].t  /* 資料時間 */
    //stockinfo.datatime = data.msgArray[0].tlong  /* 資料時間 */
    //return stockinfo

    if (gettype == "z") // 回傳最近成交價
    {
    if(data.msgArray[0].z == "-")
    { // 當最近成交價 不存在時
      // 用五檔賣價最高或五檔買價最低來代替
      buy_5 = data.msgArray[0].b.split("_");
      if(buy_5[0] == "-") // 但是沒有人買 跌停
      {
        sell_5 = data.msgArray[0].a.split("_");
        if(parseFloat(sell_5[0]) == 0)  // 市價買入 漲停
        {
          return parseFloat(sell_5[1])
        }
      else
        {
          return parseFloat(sell_5[0])
        }
      }
      else if(parseFloat(buy_5[0]) == 0)  // 市價買入 漲停
    {
        return parseFloat(buy_5[1])
      }
      else
      {
        return parseFloat(buy_5[0])
      }
    }
    else
    {
      return parseFloat(data.msgArray[0].z)
    }
    }
  else if(gettype == "n"){ // 回傳股票簡稱
    return data.msgArray[0].n
    }
    else if(gettype == "y") // 回傳昨日收盤價
    {
      return parseFloat(data.msgArray[0].y)
    }
    else{
      return ""
    }
  }
  catch(e){
    // Logger.log(e);
    //Handle error e here
    // Parse e to get the response code
    return e;
  }
}

要取得(上市)2330 台積電的股價就用公式'=get_stock_price("2330","z","tse")'

raw-image

要取得(上櫃)00687B 的股票名稱就用公式'=get_stock_price("00687B","n","otc")'

raw-image

如此本程式可以替代 GOOGLEFINANCE 不能抓 「上櫃」股票的資訊的遺憾,但從證交所抓也是常常會抓不到。。。。想不花錢抓即時股價,真難!

留言
avatar-img
天空
3會員
25內容數
如果可以無所事事的放空,那才是真的幸福?
天空的其他內容
2025/08/25
首先建立一個交易紀錄表: 紀錄表裡有「股票代號、股票名稱、交易帳戶、上市/上櫃、個股/ETF/ETN、交易日期、單價、交易股數、價金、交易手續費、證交稅、合計金額、庫存數量、備註」 「股票代號」為股票上市公司在證交所的代號。 「股票名稱」為代號所對應的股票名稱,「上市」的台灣股票利用 GOO
Thumbnail
2025/08/25
首先建立一個交易紀錄表: 紀錄表裡有「股票代號、股票名稱、交易帳戶、上市/上櫃、個股/ETF/ETN、交易日期、單價、交易股數、價金、交易手續費、證交稅、合計金額、庫存數量、備註」 「股票代號」為股票上市公司在證交所的代號。 「股票名稱」為代號所對應的股票名稱,「上市」的台灣股票利用 GOO
Thumbnail
2024/12/11
2021年時除了開始投資台灣股市外,我也開了eToro帳戶。 eToro主打可以用信用卡小額入金,再加上開戶相當方便和快速,買賣不用手續費。 eToro更有一個相當有趣跟單系統,你可以選擇eToro上的任何一個投資明星,依該投資者的持股比例去跟單。 在2022年2月台灣金管會對eToro進
Thumbnail
2024/12/11
2021年時除了開始投資台灣股市外,我也開了eToro帳戶。 eToro主打可以用信用卡小額入金,再加上開戶相當方便和快速,買賣不用手續費。 eToro更有一個相當有趣跟單系統,你可以選擇eToro上的任何一個投資明星,依該投資者的持股比例去跟單。 在2022年2月台灣金管會對eToro進
Thumbnail
2024/11/29
寫在最前面: 投資有風險,入市須謹慎。您在進行任何投資決策時,應充分評估自身的風險承受能力,並深入了解所投資標的的相關資訊。過去的表現不代表未來的結果,請根據自身情況謹慎行事。切勿輕信市場資訊,理性投資,方能保障自身的資金安全。 這是已經執行3年的投資計畫: 開始執行日期是2021年11月08
Thumbnail
2024/11/29
寫在最前面: 投資有風險,入市須謹慎。您在進行任何投資決策時,應充分評估自身的風險承受能力,並深入了解所投資標的的相關資訊。過去的表現不代表未來的結果,請根據自身情況謹慎行事。切勿輕信市場資訊,理性投資,方能保障自身的資金安全。 這是已經執行3年的投資計畫: 開始執行日期是2021年11月08
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
投資理財內容聲明 文內如有投資理財相關經驗、知識、資訊等內容,皆為作者個人分享行為。 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。 希望您能從這些分享內容汲取投資養份,養成獨立
Thumbnail
投資理財內容聲明 文內如有投資理財相關經驗、知識、資訊等內容,皆為作者個人分享行為。 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。 希望您能從這些分享內容汲取投資養份,養成獨立
Thumbnail
對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!
Thumbnail
對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!
Thumbnail
這是一份每週投資筆記,記錄了投資事情、股票表現以及未來操作策略。文章中還包含了市場爭論、未來技術趨勢和特斯拉股東會等內容。
Thumbnail
這是一份每週投資筆記,記錄了投資事情、股票表現以及未來操作策略。文章中還包含了市場爭論、未來技術趨勢和特斯拉股東會等內容。
Thumbnail
因為工作的關係,需要在EXCEL產生和台股有關的資訊。 要抓取台股的方式有很多,譬如說用EXCEL 現在的功能從網頁匯入,但是畢竟愛寫程式的人就是因為懶,不想每次都用滑鼠點點點,所以就想要如何用VBA克服。 還好研究了一下,備齊以下幾個工具,就可以了。 (1)要有一個可以解析JSON格式的Li
Thumbnail
因為工作的關係,需要在EXCEL產生和台股有關的資訊。 要抓取台股的方式有很多,譬如說用EXCEL 現在的功能從網頁匯入,但是畢竟愛寫程式的人就是因為懶,不想每次都用滑鼠點點點,所以就想要如何用VBA克服。 還好研究了一下,備齊以下幾個工具,就可以了。 (1)要有一個可以解析JSON格式的Li
Thumbnail
台股籌碼的盤勢觀察中,主要以現貨、期貨和選擇權等不同的籌碼面向進行每日的分析,以掌握市場的變化。同時,透過指數貢獻度的觀察,清楚地了解盤勢的控盤走向。此外也將技術面和主力籌碼面結合,以篩選出市場中的重點股,這有助於更全面地理解市場動態。
Thumbnail
台股籌碼的盤勢觀察中,主要以現貨、期貨和選擇權等不同的籌碼面向進行每日的分析,以掌握市場的變化。同時,透過指數貢獻度的觀察,清楚地了解盤勢的控盤走向。此外也將技術面和主力籌碼面結合,以篩選出市場中的重點股,這有助於更全面地理解市場動態。
Thumbnail
2024年投資理財筆記:美股台股走勢兩極化、特斯拉FSD功能問題、市場錯估事件等
Thumbnail
2024年投資理財筆記:美股台股走勢兩極化、特斯拉FSD功能問題、市場錯估事件等
Thumbnail
  本篇文章分享了自行開發的臺指期當沖策略,並使用XQ全球贏家進行自動化交易買賣。主要內容包括今日交易重點、當日損益、自動交易損益計算與績效圖以及各交易策略說明。文章強調策略的執行和分享交易績效的重要性。閱讀者可以從中獲得交易策略方面的參考,並瞭解相關風險和盈虧。
Thumbnail
  本篇文章分享了自行開發的臺指期當沖策略,並使用XQ全球贏家進行自動化交易買賣。主要內容包括今日交易重點、當日損益、自動交易損益計算與績效圖以及各交易策略說明。文章強調策略的執行和分享交易績效的重要性。閱讀者可以從中獲得交易策略方面的參考,並瞭解相關風險和盈虧。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News