使用n8n构建智能天气预报自动化工作流!
2025-10-31 17:53:19
文章摘要
开源AI Agent工具n8n凭借丰富的内置节点与强大功能,正受到越来越多用户青睐。本文通过搭建一个完整可用的天气预报系统,直观展现n8n在数据处理方面的卓越能力, demonstrating 其在自动化工作流构建中的实用价值。

n8n 作为一款开源的AI Agent 工具,它的内置节点不仅多,功能还很强大,已经受到越来越多的AI 使用者的青睐,本文将通过构建一个完整的天气预报系统,来为大家展示一下 n8n 平台在数据处理方面的一个强大能力。


整体流程概述:


工作流完整示例:


技术栈:n8n + WeatherAPI + SMTP邮件服务


第一阶段:数据获取

步骤一:配置HTTP Request节点

作为起始节点,该节点的作用是负责从外部API获取原始天气数据

详细配置示例图如下:


配置核心要点说明:

● Method:选择默认(GET)

● URL网址:http://api.weatherapi.com/v1/current.json(不同API地址填写不一样,这里我用的是 weatherapi 第三方天气平台)

● Authentication:None

● Specify Query Parameters:选择“Using Fields Below”,需要填写参数,该工作流核心目的是获取某固定城市天气情况,因此参数我们增加三个:


步骤二:第三方天气AIP服务选择

天气第三方获取平台我用的是 weatherapi,该平台的优点是密钥生成后,瞬间就能生效和使用,非常方便。

其他推荐:OpenWeatherMap(需等待激活)、和风天气(国内服务)等。

 

注册流程:

● 访问WeatherAPI(https://www.weatherapi.com/)官网完成注册

● 在控制台获取API密钥

● 密钥立即生效,无等待时间

 

第二阶段:数据处理

步骤三:配置Code代码节点进行数据清洗

节点作用:配置Code代码节点将原始 API 的天气数据提取出来,并转换为能呈现的业务数据

// 从WeatherAPI响应中提取和格式化天气数据

const weatherData = $input.first().json;

 

// 构建清晰的结构化数据

const result = {

  // 位置信息

location: {

city: weatherData.location.name,

country: weatherData.location.country,

localTime: weatherData.location.localtime

  },

  

  // 主要天气信息

weather: {

temperature: weatherData.current.temp_c + "°C",

condition: weatherData.current.condition.text,

feelsLike: weatherData.current.feelslike_c + "°C",

icon: weatherData.current.condition.icon

  },

  

  // 详细指标

details: {

humidity: weatherData.current.humidity + "%",

windSpeed: weatherData.current.wind_kph + " km/h",

windDirection: weatherData.current.wind_dir,

pressure: weatherData.current.pressure_mb + " mb",

visibility: weatherData.current.vis_km + " km",

uvIndex: weatherData.current.uv

  },

  

  // 用于通知的格式化消息

formattedMessage: `🌤️ ${weatherData.location.name}天气情况:

温度: ${weatherData.current.temp_c}°C

天气: ${weatherData.current.condition.text}

体感: ${weatherData.current.feelslike_c}°C

湿度: ${weatherData.current.humidity}%

风速: ${weatherData.current.wind_kph} km/h`

};

 

return [{

json: result

}];


代码填写完毕后,可点击右上方“Execute step”进行代码测试,看是否能正常获取到信息!

步骤四:增加调试节点,对传过来的数据进行测试

// 自定义调试节点 - 显示和记录数据

const inputData = $input.first().json;

 

console.log('=== 天气数据调试信息 ===');

console.log('城市:', inputData.location.city);

console.log('国家:', inputData.location.country);

console.log('温度:', inputData.weather.temperature);

console.log('天气状况:', inputData.weather.condition);

console.log('体感温度:', inputData.weather.feelsLike);

console.log('湿度:', inputData.details.humidity);

console.log('风速:', inputData.details.windSpeed);

 

console.log('=== 完整数据结构 ===');

console.log(JSON.stringify(inputData, null, 2));

 

// 同时创建一个简化的调试输出

const debugOutput = {

summary: `${inputData.location.city}天气: ${inputData.weather.temperature}, ${inputData.weather.condition}`,

keyMetrics: {

temperature: inputData.weather.temperature,

condition: inputData.weather.condition,

feelsLike: inputData.weather.feelsLike,

humidity: inputData.details.humidity

  },

fullData: inputData, // 保留完整数据供后续节点使用

debugInfo: {

timestamp: new Date().toISOString(),

node: '自定义调试器'

  }

};

 

// 返回数据,继续流程

return [{

json: debugOutput

}];


和步骤三一样,代码填写完毕后,也可进行代码测试,看是否出现问题。


步骤五:添加临时数据查看器

作用:可从 N8N 的运行日志中找到输出数据,可观察数据

// 数据查看器 - 创建易于阅读的输出

const debugData = $input.first().json;

 

// 创建格式化的输出

const formattedOutput = {

  // 简洁摘要

weatherSummary: debugData.weatherSummary || debugData.summary,

  

  // 关键指标表格

keyMetrics: debugData.keyMetrics,

  

  // 调试信息

debugTimestamp: debugData.debugInfo ? debugData.debugInfo.timestamp : new Date().toISOString(),

  

  // 原始数据引用

originalData: "完整数据已记录到日志",

  

  // 添加城市信息(这里假设城市是北京,你可以根据需要修改)

location: {

city: "北京"

  },

  

  // 保留原有的notification和weather字段

notification: debugData.notification,

weather: debugData.weather

};

 

console.log('=== 格式化输出 ===');

console.log('天气摘要:', formattedOutput.weatherSummary);

console.log('关键指标:', formattedOutput.keyMetrics);

console.log('城市:', formattedOutput.location.city);

 

return [{

json: formattedOutput

}];


第三阶段:天气判断

步骤六:配置 IF 节点

节点作用:通过对天气的好坏进行判断,根据不同天气情况生成不同的预警提醒,比如极端天气,就发邮件通知用户注意保暖、注意防暑等,如果是正常天气,就正常通知用户即可。

 

天气逻辑思路:

当天气<5°C(寒冷)或 >30°C(炎热)时,就是称为极端天气,否则就是正常天气,因此这里需要填写两个参数。

当天气<5°C(寒冷)时参数配置:

左边:{{ $json.keyMetrics.temperature.replace("°C", "") }} ,右边:5

当天气>30°C(炎热)时参数配置:

左边:{{ $json.keyMetrics.temperature.replace("°C", "") }},右边:30

 

示例如下:

步骤七:好坏天气配置

这里配置两个Code代码节点,一个是承接好天气,一个是承接坏天气。


特殊天气代码:

// 特殊天气提醒生成器

const data = $input.first().json;

const temp = parseFloat(data.keyMetrics.temperature.replace("°C", ""));

const condition = data.keyMetrics.condition;

 

// 根据具体条件生成不同的提醒

let alertType = "";

let alertMessage = "";

let emoji = "⚠️";

 

if (temp < 5) {

alertType = "寒冷警告";

alertMessage = "温度较低,请穿戴保暖衣物,注意防寒保暖。";

emoji = "❄️";

} else if (temp > 30) {

alertType = "高温警告"; 

alertMessage = "天气炎热,请避免长时间户外活动,多补充水分。";

emoji = "🔥";

} else if (condition.includes('雨')) {

alertType = "雨天提醒";

alertMessage = "今天有雨,出门请记得带伞,注意路面湿滑。";

emoji = "🌧️";

} else if (condition.includes('雪')) {

alertType = "雪天提醒";

alertMessage = "今天下雪,道路可能结冰,出行请注意安全。";

emoji = "🌨️";

} else {

alertType = "天气异常";

alertMessage = "当前天气条件异常,请关注最新天气预报。";

emoji = "⚠️";

}

 

return [{

json: {

    // 提醒信息

alert: {

type: alertType,

message: alertMessage,

emoji: emoji,

severity: "high"

    },

    // 天气数据

weather: {

temperature: data.keyMetrics.temperature,

condition: data.keyMetrics.condition,

feelsLike: data.keyMetrics.feelsLike,

humidity: data.keyMetrics.humidity

    },

    // 原始数据保留

originalData: data

  }

}];


正常天气代码:

// 正常天气通知生成器

const data = $input.first().json;

 

return [{

json: {

    // 通知信息

notification: {

type: "日常天气",

message: "今天天气适宜,是出门活动的好日子!",

emoji: "😊",

severity: "low"

    },

    // 天气数据

weather: {

temperature: data.keyMetrics.temperature,

condition: data.keyMetrics.condition, 

feelsLike: data.keyMetrics.feelsLike,

humidity: data.keyMetrics.humidity,

recommendation: "适合户外散步、运动"

    },

    // 原始数据保留

originalData: data

  }

}];


第四阶段:邮件通知

步骤八:获取QQ邮箱授权码

● 登录你的QQ邮箱

● 进入设置界面,点击账号与安全



● 开通你的POP3/SMTP服务,就会生成一段你的授权码(其他邮箱操作类似)!


步骤九:配置Email邮件节点发送通知

这里选择 Send email 节点,点击进入进行界面配置:


在Send Email节点中点击"Create New Credential",进行配置:


● User:你的邮箱(例如:123456@qq.com)

● Password:QQ邮箱授权码

● Host:填入“smtp.qq.com”

其他选项保持不变,不要去动它们。


步骤十:配置邮件内容


● From Email:你的QQ邮箱

● To Email:收件人邮箱

● Subject:{{ $json.notification.emoji }} {{ $json.notification.type }} - {{ $json.weather.temperature }}


HTML代码:

<h2>{{ $json.notification.emoji }} {{ $json.notification.type }}</h2>

<p><strong>{{ $json.notification.message }}</strong></p>

 

<hr>

 

<h3>📊 详细天气信息</h3>

<ul>

  <li><strong>城市:</strong>{{ $json.originalData.location.city }}</li>

  <li><strong>温度:</strong>{{ $json.weather.temperature }}</li>

  <li><strong>天气状况:</strong>{{ $json.weather.condition }}</li>

  <li><strong>体感温度:</strong>{{ $json.weather.feelsLike }}</li>

  <li><strong>湿度:</strong>{{ $json.weather.humidity }}</li>

  <li><strong>建议:</strong>{{ $json.weather.recommendation }}</li>

</ul>

 

<p><em>发送时间:{{ $now.format('YYYY-MM-DD HH:mm:ss') }}</em></p>


以上,整个获取天气的工作流就完成了,我们来测试一下:


点击工作流下方的“Execute workflow”,看是否能收到邮件!


已经受到邮件了,整个天气工作流就这样搭建完成了,当然,你还可以设置每天在固定时间,比如早上7点给你发送当天城市天气,赶快去实操吧。

声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。