用 Google Sheets 自動追蹤你想看的新聞:以台積電為例,修改 Apps Script 實戰教學
發布時間: 2025年 4月 12日 地點: 台灣新北市
你是不是常常需要關注特定公司、主題或人物的最新新聞?每天手動搜尋是不是覺得有點煩人?其實,你可以利用
Google Sheets 和一點點程式魔法,讓試算表自動幫你收集整理相關新聞!
先前我們可能已經建立了一個 Google Apps Script,用來追蹤像是「川普
關稅」這樣的主題。但如果你想追蹤的目標改變了呢?例如,你現在更關心的是台灣的護國神山——「台積電」(TSMC)的動態。
別擔心!修改現有的 Apps Script
並不難。這篇文章將一步步帶你把原本的腳本修改成專門追蹤「台積電」新聞的利器。
我們需要什麼工具? * Google Sheets: 我們的老朋友,資料的家。 * Google Apps
Script (GAS): Google 提供的免費雲端腳本平台,可以用 JavaScript 語法操作 Google
Workspace 的各種服務(包括 Sheets)。 * Google News RSS Feed:
我們將透過構造一個 Google News 的 RSS Feed
網址來獲取結構化的新聞資料,這比直接爬取網頁更穩定。
修改腳本:讓它聚焦台積電
假設你已經有了一個先前用來追蹤其他主題的 Apps Script
程式碼。現在,我們要動手修改它,讓它開始為我們關注「台積電」。
主要修改點: *
修改搜尋關鍵字 (SEARCH_TERMS):
這是最核心的改動。找到定義搜尋關鍵字的變數,把它改成 "台積電"。 // 原本可能是:
// var SEARCH_TERMS = "Trump tariffs"; // 修改為: var SEARCH_TERMS = "台積電";
* 更新 RSS Feed 網址 (RSS_URL):
光改關鍵字還不夠,為了獲得最相關的中文新聞,我們需要調整 RSS 網址中的語言 (hl)
和地區 (gl) 參數。 // 原本可能是美國英文新聞的網址: // var RSS_URL =
"https://news.google.com/rss/search?q=" + encodeURIComponent(SEARCH_TERMS) +
"&hl=en-US&gl=US&ceid=US:en"; // 修改為台灣繁體中文新聞的網址: var RSS_URL =
"https://news.google.com/rss/search?q=" + encodeURIComponent(SEARCH_TERMS) +
"&hl=zh-TW&gl=TW&ceid=TW:zh-Hant"; * hl=zh-TW:指定語言為繁體中文。 *
gl=TW:指定地區為台灣。 * ceid=TW:zh-Hant:對應的識別碼。 * (建議)
更改工作表名稱 (SHEET_NAME): 為了讓你的 Google Sheet
保持整潔,建議幫存放台積電新聞的工作表取個新名字。 // 原本可能是: // var
SHEET_NAME = "新聞"; // 修改為: var SHEET_NAME = "台積電新聞"; * (建議)
更改函數名稱: 原本的函數名稱可能反映的是舊主題(例如
findTrumpTariffNews)。為了可讀性,最好改成與新主題相關的名稱。注意:改了函數名,後面的觸發條件也要跟著改!
// 原本可能是: // function findTrumpTariffNews() { ... } // 修改為: function
findTsmcNews() { ... } 別忘了,函數內部的錯誤記錄 Logger.log
或郵件通知訊息也可以順便更新一下,讓它們更符合現在的功能。
____________________
更新後的完整程式碼範例, 這裡提供整合上述修改的完整 Apps Script
程式碼,你可以直接複製使用:
// --- 設定 --- var SEARCH_TERMS = "台積電"; // ***
修改:設定新的搜尋關鍵字 *** var SHEET_NAME = "台積電新聞"; // ***
建議修改:設定新的工作表名稱 *** var MAX_RESULTS_TO_CHECK = 50; // 每次檢查 RSS
Feed 中的前 N 筆資料 var LINK_COLUMN_INDEX = 3; // 連結在哪一欄 (A=1, B=2,
C=3...),用來檢查重複 // *** 修改:更新 RSS Feed
URL,使用新的搜尋關鍵字,並設定為台灣繁體中文新聞 *** var RSS_URL =
"https://news.google.com/rss/search?q=" + encodeURIComponent(SEARCH_TERMS) +
"&hl=zh-TW&gl=TW&ceid=TW:zh-Hant"; /** * *** 建議修改:主要函數名稱 *** *
主要函數:擷取、解析並將台積電新聞寫入試算表 */ function findTsmcNews() { // ***
修改:函數名稱 *** try { var ss = SpreadsheetApp.getActiveSpreadsheet(); var
sheet = ss.getSheetByName(SHEET_NAME); // 使用更新後的工作表名稱 //
如果工作表不存在,則建立它並加入標頭 if (!sheet) { sheet =
ss.insertSheet(SHEET_NAME); sheet.appendRow(["擷取時間", "標題", "連結",
"發布日期"]); SpreadsheetApp.flush(); Logger.log("已建立工作表 '%s'
並加入標頭。", SHEET_NAME); } var existingLinks = getExistingLinks(sheet);
Logger.log("目前工作表 '%s' 中有 %s 個連結可供比對。", SHEET_NAME,
existingLinks.size); Logger.log("正在從 RSS Feed 擷取關於 '%s' 的新聞: %s",
SEARCH_TERMS, RSS_URL); var response = UrlFetchApp.fetch(RSS_URL, {
muteHttpExceptions: true }); var responseCode = response.getResponseCode(); var
xmlContent = response.getContentText(); if (responseCode !== 200) {
Logger.log("錯誤:無法擷取 RSS Feed。狀態碼: %s, 回應: %s", responseCode,
xmlContent); return; } var document = XmlService.parse(xmlContent); var root =
document.getRootElement(); var channel = root.getChild('channel'); var items =
channel.getChildren('item'); Logger.log("在 RSS Feed 中找到 %s 個項目。",
items.length); var newItemsAdded = 0; var itemsToCheck = Math.min(items.length,
MAX_RESULTS_TO_CHECK); for (var i = 0; i < itemsToCheck; i++) { var item =
items[i]; var title = item.getChild('title').getText(); var link =
item.getChild('link').getText(); var pubDateText = item.getChild('pubDate') ?
item.getChild('pubDate').getText() : "N/A"; var fetchTimestamp = new Date(); if
(!existingLinks.has(link)) { sheet.appendRow([
Utilities.formatDate(fetchTimestamp, Session.getScriptTimeZone(), "yyyy-MM-dd
HH:mm:ss"), title, link, pubDateText ]); Logger.log("新增新聞: %s", title);
newItemsAdded++; existingLinks.add(link); } } if (newItemsAdded > 0) {
Logger.log("已新增 %s 則關於 '%s' 的新聞到 '%s' 工作表。", newItemsAdded,
SEARCH_TERMS, SHEET_NAME); } else { Logger.log("沒有找到關於 '%s'
的新新聞項目。", SEARCH_TERMS); } } catch (error) { Logger.log("執行
findTsmcNews 時發生錯誤: %s", error); Logger.log("錯誤堆疊: %s", error.stack); }
} /** * 輔助函數:從工作表中讀取現有連結,用於去重 */ function
getExistingLinks(sheet) { var linkSet = new Set(); var lastRow =
sheet.getLastRow(); if (lastRow > 1) { var range = sheet.getRange(2,
LINK_COLUMN_INDEX, lastRow - 1, 1); var values = range.getValues(); for (var i =
0; i < values.length; i++) { if (values[i][0]) {
linkSet.add(values[i][0].toString().trim()); } } } return linkSet; } /** *
(可選) 函數:如果需要,可以用來手動設定標頭 */ function setupSheet() { var ss =
SpreadsheetApp.getActiveSpreadsheet(); var sheet =
ss.getSheetByName(SHEET_NAME); // 使用更新後的工作表名稱 if (!sheet) { sheet =
ss.insertSheet(SHEET_NAME); } sheet.clearContents();
sheet.appendRow(["擷取時間", "標題", "連結", "發布日期"]);
sheet.getRange("A1:D1").setFontWeight("bold"); SpreadsheetApp.flush();
Logger.log("工作表 '%s' 已設定標頭。", SHEET_NAME); }
________________________
如何實施?
* 打開編輯器:
前往你的 Google Sheet,點擊「擴充功能」->「Apps Script」。 * 取代程式碼:
將編輯器裡舊的程式碼全部刪除,貼上上面提供的新程式碼。 * 儲存: 點擊儲存圖示。 *
測試運行: 在編輯器頂部的函數下拉選單中,選擇你剛剛修改的函數名稱(例如
findTsmcNews),然後點擊旁邊的「▶ 執行」按鈕。檢查你的 Google Sheet
是否出現了新的工作表(如果設定了新名稱)和相關的台積電新聞。 *
更新觸發條件(關鍵步驟!): * 點擊左側選單的「觸發條件」(時鐘圖案)。 *
找到你之前設定的時間驅動觸發條件(例如每小時執行一次)。 *
點擊編輯(鉛筆圖示)。 * 務必確認「選擇要執行的功能」已經指向你修改後的
新函數名稱(例如 findTsmcNews)。
如果這裡還是舊的函數名稱,自動化就會失效或繼續跑舊主題! * 儲存觸發條件的變更。
大功告成!
完成這些步驟後,你的 Google Sheet
就會開始自動為你收集最新的台積電新聞了!你可以隨時打開試算表查看,甚至在手機上也能輕鬆閱讀。
這個方法當然也可以應用於追蹤任何你感興趣的公開新聞主題。只要修改 SEARCH_TERMS
和可能的 RSS_URL 地區語言設定,你就能打造自己專屬的自動化新聞監控站! #TSMC
@台積電