來講如何透過 n8n 串接氣象資料並定時發送到 Discord 的方法。
Step 1 申請氣象署 Open Data API Key
由於我們要串接氣象署資料,所以要先到氣象資料開放平台取得 API key,才能夠使用 API。
如果是第一次來,記得註冊帳號,如果有帳號登入後照著指示就能看到這個頁面,再點選取得授權碼就會看到 API key 了。
Step 2 選擇 API
這步可以選擇的很多,我這邊用台灣縣市 36 小時預報來說明,知道怎麼用之後,就可以在換成自己想接的 API。
Step 3 建立 Discord Webhook
從你要丟資料進去的伺服器,點選伺服器設定 > 整合 > Webhooks
接著像這樣設定好後,再點選複製 Webhook 網址就好。
準備完成,再來就是進入 n8n 的設定了。
Step 4 建立 Schedule Trigger 節點
-
設定每天 07:00 執行一次(也可以設定你想要的時間)。
-
設定方式:
-
Minute:
0
-
Hour:
7
-
Day of Month / Month / Weekday 可依需求設定
-
Step 5 HTTP Request 節點抓取氣象資訊
把你要抓的 API 網址貼上去,並照這樣設定:
-
Method:
GET
-
URL:
https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001
-
Query Parameters:
- Authorization = 你的 API Key
locationName = 臺北市
format = JSON
- Authorization = 你的 API Key
設定好後可以先測試是否有正確抓到資料。
Step 6 整理 API 資料
由於抓回來的資料還無法直接使用,所以我們需要增加一個 Code 節點來整理資料。
建立好參考以下方式,其實就是把 API 資料再整理成一個 json 後丟出去。
const location = items[0].json.records.location[0]; const weather = location.weatherElement; const wx = weather.find(el => el.elementName === "Wx").time[0].parameter.parameterName; const pop = weather.find(el => el.elementName === "PoP").time[0].parameter.parameterName; const minT = weather.find(el => el.elementName === "MinT").time[0].parameter.parameterName; const maxT = weather.find(el => el.elementName === "MaxT").time[0].parameter.parameterName; return [{ json: { message: `今日台北市天氣: 天氣:${wx} 降雨機率:${pop}% 氣溫:${minT}°C - ${maxT}°C` } }];
Step 7 發送至 Discord
最後建立一個 HTTP Request 節點,然後照以下設定:
-
Method:
POST
-
URL: Discord Webhook URL(從 Discord 複製來的)
-
Body Content Type:
JSON
-
Body Parameters:
- Name: content
- Value: {{ $json.message }}
可以去檢查 Discord 是否有確實發佈資訊
完成後的流程會長這樣
以上就是透過 n8n 每日發送氣象資訊至 Discord 的使用方法,給大家參考。