台灣證券交易所(上市)和台灣櫃檯買賣中心(上櫃)每天收盤後(下午三點以後抓)都會整理好每檔股票當日的交易資訊,透過下列網址即可下載CSV檔:
台灣證券交易所 https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data

於是我就想把這些資料也填到我們的Google試算表中,所以我們在股票的試算表中追加兩個頁籤“每日上市成交資訊”,“每日上櫃成交資訊”

接下來打開 “擴充功能 → Apps Script”

在這裡寫了四段程式碼:



第一段為 function fetchUrl(url),用來抓URL的回傳資料:
/* 嘗試使用URL抓取資料 */
function fetchUrl(url) {
// 嘗試最多三次來獲取URL資料
for (var count = 0; count < 3; count++) {
try {
var response = UrlFetchApp.fetch(url, {
method: "GET",
muteHttpExceptions: true
});
// 如果響應代碼為200,則返回響應內容
if (response.getResponseCode() == 200) {
return response;
}
// 如果伺服器錯誤,則等待3秒後重試
Utilities.sleep(3000);
} catch (error) {
// 記錄任何捕獲的錯誤和相關的URL
Logger.log("Error fetching data from URL: " + url);
Logger.log("Error message: " + error.message);
}
}
// 如果三次嘗試後仍然失敗,則拋出錯誤
throw new Error("Failed to fetch data from URL after 3 attempts: " + url);
}
第二段為 function parseStockData(data, sheetName),用來解析抓回來的CSV檔=力存回試算表:
/* 解析csv檔,存入試算表 */
function parseStockData(data, sheetName) {
// 使用正則表達式移除所有引號
const regex = /"/g;
var dataset = [];
// 將數據分割成行
var rows = data.getContentText().split('\n');
for (var position = 0; position < rows.length && rows[position] != ""; position++) {
line = rows[position].replace(regex, '').split(',');
dataset.push(line);
}
// 打開指定ID的工作表並獲取指定名稱的子表
var sheet = SpreadsheetApp.openById(PropertiesService.getScriptProperties().getProperty("sheetID")).getSheetByName(sheetName);
// 清除子表的現有內容
sheet.clearContents();
// 設置範圍,準備寫入新數據
var range = sheet.getRange(sheet.getLastRow()+1, 1, dataset.length, line.length);
// 設定單元格格式為文本並填充數據
range.setNumberFormat("@").setValues(dataset);
}
第三段 function getTSEstockinfo() 和第四段 function getOTCstockinfo(),則是分別去抓取上市與上櫃的股票資訊:
/* 取得每日上市股票交易資訊 */
function getTSEstockinfo(){
// 指定台灣證券交易所每日交易資訊的URL
const url = "https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data";
// 獲取網站資料
var response = fetchUrl(url);
// 解析資料並寫入指定的Google Sheets工作表
parseStockData(response, '每日上市成交資訊');
}
/* 取得每日上櫃股票交易資訊 */
function getOTCstockinfo(){
// 指定台灣櫃檯買賣中心交易所每日交易資訊的URL
const url = "https://www.tpex.org.tw/web/stock/aftertrading/DAILY_CLOSE_quotes/stk_quote_result.php?l=zh-tw&o=data";
// 獲取網站資料
var response = fetchUrl(url);
// 解析資料並寫入指定的Google Sheets工作表
parseStockData(response, '每日上櫃成交資訊');
}
Apps Script 專案設定:在這裡我們必須要把 試算表的 sheetID 設定好:
(Apps Script左手邊有個齒輪,按下去)

再向下一點,找到指令碼屬性,我們按一下「新增指令碼屬性」

新增一個名稱叫「sheetID」的屬性,

屬性的值就是我們試算表的ID,在瀏覽器的網址列,可以看到:在"https://docs.google.com/spreadsheets/d/" 之後到下一個 "/"之間的代碼就是我們的 sheetID。

設定好後記得儲存:

接下來分別去執行 getTSEstockinfo() 和getOTCstockinfo() ,即可得今日股票的交易資訊:

在試算表就可以看到今日上市/上櫃股票資訊:


111











