iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
DevOps

30 天自動化高手養成:玩轉 n8n 工作流系列 第 7

Day 7:每日天氣通知自動發送到 Discord

  • 分享至 

  • xImage
  •  

昨天我們做了自動化寫入 Google Sheet,今天要來完成一個更實用的案例:
👉 每天自動抓取台灣氣象局的天氣資訊,並推送到 Discord


前置準備

1. 申請氣象局 API 金鑰

台灣氣象局提供免費的開放資料 API,你需要先申請一個授權碼:

  1. 前往 氣象資料開放平台
  2. 註冊並登入帳號
  3. 進入「會員專區 → 取得授權碼」
  4. 拿到一組 Authorization 金鑰

2. 取得天氣 API URL

例如要查詢 台中市 36 小時天氣預報

https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=你的API_KEY&locationName=臺中市

整體 Workflow 完成圖

https://ithelp.ithome.com.tw/upload/images/20250921/201682031RmA194wAp.png


建立 Workflow

Step 1:建立 Trigger(Cron Node)

  • Node:Cron
  • 設定 → 每天 → 07:30
  • 功能:每天早上 7:30 自動執行

https://ithelp.ithome.com.tw/upload/images/20250921/20168203qF0AKIAVZO.png


Step 2:呼叫氣象局 API

  • Node:HTTP Request
  • Method:GET
  • URL:
https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=你的API_KEY&locationName=臺中市

https://ithelp.ithome.com.tw/upload/images/20250921/20168203M5QZW0XKKh.png


Step 3:整理資料(Function Node → Embed 格式)

因為氣象局 API 資料層級比較深,我們先解析:

const location = $json["records"]["location"][0];
const city = location["locationName"];
const weather = location["weatherElement"].find(e => e.elementName === "Wx").time[0].parameter.parameterName;
const minT = location["weatherElement"].find(e => e.elementName === "MinT").time[0].parameter.parameterName;
const maxT = location["weatherElement"].find(e => e.elementName === "MaxT").time[0].parameter.parameterName;

return [
  {
    json: {
      embeds: [
        {
          title: `🌤️ 今日天氣 - ${city}`,
          description: weather,
          color: 16776960, // 黃色
          fields: [
            { name: "🌡️ 最低溫", value: `${minT} °C`, inline: true },
            { name: "🔥 最高溫", value: `${maxT} °C`, inline: true }
          ],
          footer: { text: "資料來源:中央氣象局 CWA" },
          timestamp: new Date().toISOString()
        }
      ]
    }
  }
];

https://ithelp.ithome.com.tw/upload/images/20250921/20168203n3R0JMYg1z.png


Step 4:發送到 Discord

  • Node:HTTP Request
  • Method:POST
  • URL:貼上你的 Discord Webhook URL
  • Body Content Type:JSON
  • Body JSON:直接用 Function Node 輸出的結果

https://ithelp.ithome.com.tw/upload/images/20250921/20168203Umv4BXWCCx.png


最終流程圖

https://ithelp.ithome.com.tw/upload/images/20250921/20168203m53zNQ1nFU.png


成果

每天早上,你的 Discord 頻道就會收到這樣的卡片通知:

  • 城市名稱(例如:臺中市)
  • 天氣描述(短暫陣雨、多雲時晴…)
  • 最高 / 最低溫度
  • 資料來源(中央氣象局)

https://ithelp.ithome.com.tw/upload/images/20250921/20168203DUeecnOTMR.png


小結

今天我們完成了 每日天氣自動通知 Discord

  • 使用 Cron Node 定時觸發
  • 呼叫 CWB Open API
  • 解析 JSON → 轉換成 Discord Embed
  • 自動推送到頻道

這樣,你的 Discord 就多了一個定時發送天氣通知的機器人 !


上一篇
Day 6:Google Sheet 自動更新(API 寫入)
下一篇
Day 8:RSS Feed 自動轉發到 Discord(使用台灣主流新聞來源)
系列文
30 天自動化高手養成:玩轉 n8n 工作流9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言