🕸️ GAS 爬蟲實戰:定時抓取匯率與股市資料

很多人以為 Google Apps Script (GAS) 只能用來「操作」試算表裡面的格子。 但其實,GAS 內建了一個超級強大的武器:UrlFetchApp

這代表你的 Google Sheet 可以「連上網路」,去抓取全世界的資料!再加上 GAS 免費的時間觸發器 (Time-driven Triggers),你就可以零成本打造一個「每天定時執行」的全自動爬蟲機器人。

本章我們將實戰寫一支爬蟲,每天早上 9 點準時去台灣銀行抓取最新的美金匯率,並寫入你的試算表。


1. 認識終極武器 UrlFetchApp

在一般的 JavaScript 裡,我們打 API 用的是 fetch() 或是 axios。 但是在 GAS 的環境裡,沒有 fetch 可以用,Google 為我們準備了專屬的 UrlFetchApp.fetch()

基本語法:

// 抓取網頁的 HTML 原始碼 (爬蟲)
var response = UrlFetchApp.fetch("https://example.com");
var html = response.getContentText();

// 呼叫 API 取得 JSON
var apiResponse = UrlFetchApp.fetch("https://api.exchangerate-api.com/v4/latest/USD");
var data = JSON.parse(apiResponse.getContentText());

2. 實戰:抓取台灣銀行美金匯率 API

網路上有很多免費的匯率 API,這裡我們示範串接一個公開的匯率 API 來取得「1 塊美金等於多少台幣」。

步驟 1:建立試算表並開啟 GAS 編輯器

  1. 打開一個全新的 Google Sheet,命名為「我的財務大盤」。
  2. 在 A1 輸入「日期」,B1 輸入「美金匯率」。
  3. 點擊上方選單的 擴充功能 -> Apps Script

步驟 2:撰寫爬蟲腳本

將以下程式碼貼到你的 Code.gs 中:

// 這是我們的主程式,負責抓資料並寫入表格
function fetchDailyExchangeRate() {
  // 1. 指定要抓取的 API 網址 (這是一個免費公開的匯率 API)
  var apiUrl = "https://api.exchangerate-api.com/v4/latest/USD";
  
  try {
    // 2. 發起請求抓取資料
    var response = UrlFetchApp.fetch(apiUrl);
    var jsonString = response.getContentText();
    
    // 3. 將文字轉成 JavaScript 的物件
    var data = JSON.parse(jsonString);
    
    // 4. 從資料中抽取出「美金對台幣 (TWD)」的匯率
    var usdToTwd = data.rates.TWD;
    
    // 如果找不到資料,防呆報錯
    if (!usdToTwd) {
      Logger.log("找不到 TWD 匯率資料!");
      return;
    }
    
    Logger.log("今日美金匯率:" + usdToTwd);
    
    // 5. 準備要寫入表格的資料:[今天日期, 匯率]
    var today = new Date();
    // 格式化日期為 YYYY/MM/DD
    var dateString = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy/MM/dd");
    
    // 6. 把資料寫入試算表的最底層
    appendToSheet(dateString, usdToTwd);
    
  } catch (error) {
    Logger.log("爬蟲發生錯誤:" + error.toString());
  }
}

// 寫入試算表的輔助函數
function appendToSheet(date, rate) {
  // 取得當前綁定的試算表與工作表 1
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  
  // 在表格最後一行新增資料 (傳入陣列 [A欄, B欄])
  sheet.appendRow([date, rate]);
  
  Logger.log("✅ 成功寫入資料表!");
}

步驟 3:手動測試

點擊上方的「執行」按鈕 (記得函數要選擇 fetchDailyExchangeRate)。 第一次執行時,Google 會跳出「需要授權」的警告視窗,這是因為你的腳本要求了「連上外部網路」的權限。 請點擊「審查權限 -> 選擇你的帳號 -> 進階 -> 前往 (不安全)」,允許授權。

授權完成後,切換回你的 Google Sheet,你會發現第二行神奇地出現了今天的日期與美金匯率!


3. 進階爬蟲技巧:加上 Headers 或偽裝 User-Agent

有時候你去抓某些財經網站,對方會阻擋機器人。這時候你必須偽裝成一般瀏覽器,或是加上特定的 API Key 才能抓到資料。

UrlFetchApp 的第二個參數可以讓你傳遞複雜的設定 (Options):

function fetchWithHeaders() {
  var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC";
  
  var options = {
    "method": "get",
    // 如果對方只允許指定的瀏覽器,你可以加上 User-Agent
    // 如果對方是付費 API,你可以加上 API Key
    "headers": {
      "X-CMC_PRO_API_KEY": "YOUR_API_KEY_HERE",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    },
    // 防止抓錯時整個程式崩潰 (預設抓到 404/500 會直接 Throw Error)
    "muteHttpExceptions": true 
  };

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

💡 實戰地雷: 如果你抓的是台灣的網站(例如 PTT 或證交所),請記得把編碼轉回 UTF-8 或是 Big5,否則你抓回來的 HTML 會變成一堆亂碼!


4. 終極自動化:設定時間觸發器 (Time-driven Triggers)

程式碼寫好了,但總不能每天早上自己起床按「執行」吧? 我們要設定一個鬧鐘,叫 Google 的伺服器每天早上準時幫我們跑這段程式碼。

  1. 在 GAS 編輯器的左側選單,點擊那顆像「鬧鐘」的圖示 (觸發器 Triggers)。
  2. 點擊右下角的藍色按鈕 新增觸發器 (Add Trigger)
  3. 設定如下:
    • 選擇要執行的功能:fetchDailyExchangeRate
    • 選擇執行部署作業:Head
    • 選取事件來源:時間驅動 (Time-driven)
    • 選取時間型觸發程序類型:日計時器 (Day timer)
    • 選取時間:上午 9 點到 10 點
  4. 點擊儲存

大功告成!🎉

從現在開始,每天早上 9 點多,Google 的超級電腦就會在背後默默地啟動你的爬蟲程式,去 API 抓取最新的美金匯率,然後整整齊齊地填入你的試算表裡!

這就是自動化工程師的浪漫,只要寫一次程式碼,機器就會為你工作一輩子。 在下一章,我們將結合這個爬蟲,讓它在抓到資料後,主動發送 LINE 訊息到你的手機上!

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!