MS_ウェッター
中級
これはPersonal Productivity分野の自動化ワークフローで、12個のノードを含みます。主にSet, Code, Merge, Telegram, OpenWeatherMapなどのノードを使用。 OpenWeatherMap と Telegram を使用した自動天気予報 ☀️
前提条件
- •Telegram Bot Token
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "BiCF5Nmdl7SK4qjp",
"meta": {
"instanceId": "c92a0c76586da37fb3ac600956b62e842bfa4bd5f52acc7feb4e8a6e75ca1381",
"templateCredsSetupCompleted": true
},
"name": "MS_WEATHER",
"tags": [],
"nodes": [
{
"id": "4a9e2697-2172-4e55-bd17-96170d5640a8",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-360,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "8474a7c2-523f-4da8-a9e5-bfdfa6b432df",
"name": "場所の設定",
"type": "n8n-nodes-base.set",
"position": [
-80,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b9f4869a-2059-4b09-84e3-26c7d1e95d30",
"name": "lat",
"type": "string",
"value": "={{ $env.lat }}"
},
{
"id": "cc1b0b3a-4c99-4220-bfcb-439f817980a8",
"name": "long",
"type": "string",
"value": "={{ $env.long }}"
},
{
"id": "7d1ace36-bd24-43b1-928c-3e3b9c2dc655",
"name": "telegram_chat_id",
"type": "string",
"value": "={{ $env.telegram_chat_id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6c789184-4971-4407-8401-334b47165daf",
"name": "Weather: Current",
"type": "n8n-nodes-base.openWeatherMap",
"position": [
320,
-180
],
"parameters": {
"language": "en",
"latitude": "={{ $json.lat }}",
"longitude": "={{ $json.long }}",
"locationSelection": "coordinates"
},
"credentials": {
"openWeatherMapApi": {
"id": "gxU3zHUaRcFe8A4U",
"name": "OpenWeatherMap account"
}
},
"typeVersion": 1
},
{
"id": "1bab62d5-d884-46e8-94af-9484a5ba2fbf",
"name": "Weather: 5Days",
"type": "n8n-nodes-base.openWeatherMap",
"position": [
320,
180
],
"parameters": {
"language": "en",
"latitude": "={{ $json.lat }}",
"longitude": "={{ $json.long }}",
"operation": "5DayForecast",
"locationSelection": "coordinates"
},
"credentials": {
"openWeatherMapApi": {
"id": "gxU3zHUaRcFe8A4U",
"name": "OpenWeatherMap account"
}
},
"typeVersion": 1
},
{
"id": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"name": "マージ",
"type": "n8n-nodes-base.merge",
"position": [
660,
0
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "43d58689-f6fa-4a88-8a3c-04cfc212b498",
"name": "Report: Prepare",
"type": "n8n-nodes-base.code",
"position": [
920,
0
],
"parameters": {
"jsCode": "/* ── Weather-to-Telegram Markdown ────────────────────────────────────────────\n Input: $json ← OpenWeatherMap /forecast (5-day / 3-hour) single object\n Output: telegram-ready markdown string in msg.markdown_report\n────────────────────────────────────────────────────────────────────────────── */\n\nconst data = $json; // full API response\nconst city = data.city; // city block\nconst blocks = data.list ?? []; // 3-hour forecasts\n\n/* ── helpers ──────────────────────────────────────────────────────────────── */\nconst esc = t => t.toString().replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&');\nconst fmtT = t => `${Math.round(t)}°C`;\nconst fmtDay = ts => new Date(ts * 1000)\n\t.toLocaleDateString('en-US', { weekday:'short', month:'short', day:'numeric' });\nconst emoji = id => (\n\tid === 800 ? '☀️' :\n\tid >= 801 && id <= 804 ? '☁️' :\n\tid >= 200 && id <= 232 ? '⛈️' :\n\tid >= 300 && id <= 321 ? '🌦️' :\n\tid >= 500 && id <= 531 ? '🌧️' :\n\tid >= 600 && id <= 622 ? '❄️' :\n\tid >= 700 && id <= 781 ? '🌫️' : '🌤️'\n);\n\n/* ── aggregate daily lows / highs (and grab a noon sample for the icon) ──── */\nconst days = {}; // key = yyyy-mm-dd\n\nfor (const b of blocks) {\n\tconst d = new Date(b.dt * 1000);\n\tconst key = d.toISOString().slice(0,10); // YYYY-MM-DD\n\tconst bucket = days[key] ?? (days[key] = {\n\t\ttsNoon : b.dt, // will be overwritten until closest to 12:00\n\t\ticonId : b.weather[0].id,\n\t\tdesc : b.weather[0].main,\n\t\tlo : b.main.temp_min,\n\t\thi : b.main.temp_max\n\t});\n\n\tbucket.lo = Math.min(bucket.lo, b.main.temp_min);\n\tbucket.hi = Math.max(bucket.hi, b.main.temp_max);\n\n\t// keep icon sample closest to noon (12:00 ±1h)\n\tconst hr = d.getHours();\n\tif (Math.abs(hr - 12) < Math.abs(new Date(bucket.tsNoon*1000).getHours() - 12)) {\n\t\tbucket.tsNoon = b.dt;\n\t\tbucket.iconId = b.weather[0].id;\n\t\tbucket.desc = b.weather[0].main;\n\t}\n}\n\n/* sort days & take first 5 */\nconst dayKeys = Object.keys(days).sort().slice(0,5);\n\n/* today’s range (index 0) */\nconst today = days[dayKeys[0]];\n\n/* ── build markdown ───────────────────────────────────────────────────────── */\nconst ln = '\\n';\nconst hr = '\\n──────────\\n';\n\nlet md = `*${esc(city.name)}, ${esc(city.country)} – Weather*${hr}`;\n\nmd += '*Now*\\n';\nmd += `🌡️ Temp: \\`${fmtT(data.list[0].main.temp)}\\` (feels like \\`${fmtT(data.list[0].main.feels_like)}\\`)${ln}`;\nmd += `📉 Low / High today: \\`${fmtT(today.lo)} – ${fmtT(today.hi)}\\`${ln}`;\nmd += `🛰️ Condition: \\`${esc(data.list[0].weather[0].description)}\\`${ln}`;\nmd += `💧 Humidity: \\`${data.list[0].main.humidity}%\\` `;\nmd += `💨 Wind: \\`${Math.round(data.list[0].wind.speed*3.6)} km/h\\`${hr}`;\n\nmd += '*5-Day Forecast*' + ln;\nfor (const k of dayKeys) {\n\tconst d = days[k];\n\tmd += `➡️ *${esc(fmtDay(d.tsNoon))}* `;\n\tmd += `\\`${fmtT(d.lo)} – ${fmtT(d.hi)}\\` `;\n\tmd += `${emoji(d.iconId)} _${esc(d.desc)}_\\n`;\n}\n\n/* ── return for Telegram node ─────────────────────────────────────────────── */\nreturn { json: { markdown_report: md }};"
},
"typeVersion": 2
},
{
"id": "7cab6251-db7f-4fb0-ad08-bf0e060cfc64",
"name": "テキストメッセージ送信",
"type": "n8n-nodes-base.telegram",
"position": [
1240,
0
],
"webhookId": "5738ca6e-ad42-4f46-8938-bf37c033ec3e",
"parameters": {
"text": "={{ $json.markdown_report }}",
"chatId": "={{ $('Set Location').item.json.telegram_chat_id }}",
"additionalFields": {
"parse_mode": "Markdown",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "OymlVCuTPYhVa2B9",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "c4f57a04-c22d-4f7b-a0aa-dd08c384d4bd",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
-140
],
"parameters": {
"color": 5,
"width": 220,
"height": 340,
"content": "## Set inputs \n- lat\n- long\n- telegram_chat_id"
},
"typeVersion": 1
},
{
"id": "8b144fce-d64a-42ec-b381-c49ff7f5fc89",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
260,
-240
],
"parameters": {
"color": 4,
"width": 220,
"height": 220,
"content": "## Current Weather"
},
"typeVersion": 1
},
{
"id": "440fb2e0-148a-4d4c-85f3-1031f13e0554",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
260,
120
],
"parameters": {
"color": 4,
"width": 220,
"height": 220,
"content": "## 5-Day Weather"
},
"typeVersion": 1
},
{
"id": "a537e327-dfcc-455c-a821-1d5d2f4cae21",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
860,
-60
],
"parameters": {
"color": 3,
"width": 220,
"height": 220,
"content": "## Report"
},
"typeVersion": 1
},
{
"id": "493b915f-b04b-445f-b603-6378463b6e91",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
-60
],
"parameters": {
"color": 6,
"width": 220,
"height": 220,
"content": "## Send"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a7059c98-a414-42fb-a0b5-5991d90e4dcf",
"connections": {
"cb860b7f-2dc6-4aaf-8d7b-01d391437342": {
"main": [
[
{
"node": "43d58689-f6fa-4a88-8a3c-04cfc212b498",
"type": "main",
"index": 0
}
]
]
},
"8474a7c2-523f-4da8-a9e5-bfdfa6b432df": {
"main": [
[
{
"node": "6c789184-4971-4407-8401-334b47165daf",
"type": "main",
"index": 0
},
{
"node": "1bab62d5-d884-46e8-94af-9484a5ba2fbf",
"type": "main",
"index": 0
}
]
]
},
"1bab62d5-d884-46e8-94af-9484a5ba2fbf": {
"main": [
[
{
"node": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"type": "main",
"index": 1
}
]
]
},
"43d58689-f6fa-4a88-8a3c-04cfc212b498": {
"main": [
[
{
"node": "7cab6251-db7f-4fb0-ad08-bf0e060cfc64",
"type": "main",
"index": 0
}
]
]
},
"4a9e2697-2172-4e55-bd17-96170d5640a8": {
"main": [
[
{
"node": "8474a7c2-523f-4da8-a9e5-bfdfa6b432df",
"type": "main",
"index": 0
}
]
]
},
"6c789184-4971-4407-8401-334b47165daf": {
"main": [
[
{
"node": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - 個人の生産性
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
MS_ゴールド価格トラッカー
マルチ通貨変換対応のTelegram金价自動追跡ツール 📈
Set
Code
Merge
+
Set
Code
Merge
12 ノードM Sayed
仮想通貨取引
AIを使った求人情報の自動検索
Google Jobs、RemoteOK、GPT-3.5 を使ってAIの求人情報に基づく自動求人検索を行い、AI採用情報に基づく自動求人検索とAI対応の求人情報を提供
If
Set
Code
+
If
Set
Code
17 ノードShelly-Ann Davy
個人の生産性
Mistral AI、LinkedIn、Google Sheets を使って求人検索と履歴書のカスタマイズを自動化
Mistral AI、LinkedIn、Google Sheets を使って 自動採用情報の検索とCVカスタマイズを行う
Set
Code
Html
+
Set
Code
Html
46 ノードJordan Hoyle
個人の生産性
Gemini、音声・画像生成を使ってマルチモーダルTelegram AIアシスタントを構築
Gemini、音声・画像生成を使ってマルチモーダルTelegramAIアシスタントを構築
If
Set
Code
+
If
Set
Code
95 ノードIniyavan JC
個人の生産性
デイリー要約
Google Gemini AI と RSS フィードを使用してカスタマイズされた毎日のニュース レター作成
Set
Code
Merge
+
Set
Code
Merge
23 ノードDixit Ram
個人の生産性
LinkedInジョブ検索
LinkedIn求人検索:履歴書自動照合(GPT/Gemini)+カバーレタージェネレーター+Telegram通知
If
Set
Code
+
If
Set
Code
33 ノードHojjat Jashnniloofar
個人の生産性