分享

如何在Python中创建天气警报系统

 江海博览 2023-11-11 发布于浙江
机器学习与数据分析
机器学习与数据分析
2020-11-22 08:49

前言

通过阅读这篇文章,你将学会用Python创建一个天气警报系统,当它预测未来几小时内天空将下雨/下雪时,它会向多个收件人发送一封电子邮件通知。电子邮件通知包含其他信息,如预测的温度和湿度。

本教程有3个部分:

1.设置

2.实现

3.结果

设置

天气API

我们将使用ClimaCell的天气API来获取预报天气数据。根据您的需要,它提供了相当多的有用和准确的数据。

它涵盖了4周以前的历史站点数据以及15天以前的每日预报数据。此外,你可以很容易地实现它的官方文件提供参考4种不同的计算机语言:

  • JavaScript
  • Ruby
  • Node
  • Python

前往注册和注册一个新帐户。一旦完成,您应该会看到下面的指示板,它概述了计划细节和您的调用活动。

如何在Python中创建天气警报系统

请注意API键,因为我们将在后面的代码中使用它。

邮件配置

我将使用个人Gmail账号通过SMTP给自己发邮件。为了使用它,你需要改变帐户设置的配置,并打开不太安全的应用程序访问。

转到帐户设置,然后点击安全菜单。

如何在Python中创建天气警报系统

打开不太安全的应用访问,如下所示

如何在Python中创建天气警报系统

完成之后,在项目的根目录中创建一个名为config.ini的新文件。它将被用作我们项目的配置文件。将以下代码添加到其中。

[email] email=your_email@gmail.com host=smtp.gmail.com port=587 password=your_password
  • 电子邮件-您的电子邮件帐户的名称
  • 主机- smtp服务器的主机名。修改这个基于smtp服务器为您的电子邮件
  • 端口-用于smtp服务器的端口。修改这个基于smtp服务器为您的电子邮件
  • 密码-密码到您的电子邮件帐户。请务必不要将此文件或信息泄露给其他人。

Python模块

强烈建议为这个项目创建一个虚拟环境。在终端中运行以下命令来安装configparser模块。它在从文件加载配置设置时非常有用。

pip install configparser

实现

在与config.ini相同的目录中创建一个名为weather_email.py的新文件。这个文件作为我们的应用程序的电子邮件模块。

import

在文件的顶部添加以下导入声明

try: import configparser except: from six.moves import configparserimport smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import requests

接下来,创建一个字典,表示在下雨或下雪时我们将要发送的消息。您可以根据您的用例创建自己的映射或自定义消息。

weather_dict = {'freezing_rain_heavy': 'Heavy rain and snow', 'freezing_rain': 'Rain and snow', 'freezing_rain_light': 'Light rain and snow', 'freezing_drizzle': 'Light drizzle and snow', 'ice_pellets_heavy': 'Heavy ice pellets', 'ice_pellets': 'Normal ice pellets', 'ice_pellets_light': 'Light ice pellets', 'snow_heavy': 'Heavy snow', 'snow': 'Normal snow', 'snow_light': 'Light snow', 'tstorm': 'Thunder storm', 'rain_heavy': 'Heavy rain', 'rain': 'Normal rain', 'rain_light': 'Light rain'}

天气API设置

初始化调用weather API时需要的以下变量。

url = 'https://api./v3/weather/nowcast' querystring = {'lat':'1.29027','lon':'103.851959','unit_system': 'si','timestep':'60','start_time':'now','fields':'temp,humidity,weather_code', 'apikey':'xxxx'}

我们将调用nowcast API,它有以下参数,可以修改:

如何在Python中创建天气警报系统
  • 纬度,-87至89
  • 经度,-180到180度
  • unit_system—单位制,“si”或“us”
  • 时间步长-时间步长,分1到60。将start_time设置为现在并将timestep设置为60将返回7个数据点。(现在,60分钟后,120分钟后,……)
  • start_time—您可以设置自己的时间,或者现在就初始化它
  • end_time—限制结束时间的可选参数。默认情况下,它将返回距离当前时间戳最多6小时的数据。
  • 字段-从所提供的数据层中选择的字段(如“降水”或“阵风”)。我在本教程中使用了temp,湿度和weather_code。
  • apikey -来自Climacell天气API仪表板的API键

邮件发送

我们将创建一个名为EmailSender的新类,并像下面这样初始化它。我们使用configparser模块从config.ini中读取数据,并将其分配给相应的变量。

def __init__(self):
    self.cf = configparser.ConfigParser()
    self.cf.read('./config.ini')
    self.sec = 'email'
    self.email = self.cf.get(self.sec, 'email')
    self.host = self.cf.get(self.sec, 'host')
    self.port = self.cf.get(self.sec, 'port')
    self.password = self.cf.get(self.sec, 'password')

在类内部创建另一个函数SendEmail,它接受一个接收者参数。它接受列表而不是字符串。这允许我们向多个电子邮件地址发送相同的电子邮件通知。

def SendEmail(self, recipient):

在函数内部,使用以下代码初始化一个新的MIMEMultipart对象

title = 'Home Sweet Home'msg = MIMEMultipart()
msg['Subject'] = '[Weather Notification]'
msg['From'] = self.email
msg['To'] = ', '.join(recipient)

调用天气API

下一步是通过请求模块调用API,它将以json的形式返回结果。

response = requests.request('GET', url, params=querystring) result = ''json_data = response.json()

您可以充分利用结果并将其映射到我们在上面指定的字典,以便创建所需的通知消息。然后,用它初始化一个MIMEText对象,并将其附加到MIMEMultipart对象。通过调用smtplib结束它。SMTP上下文管理器发送电子邮件。

msgText = MIMEText('<b>%s</b><p>%s</p>' % (title, result), 'html')
msg.attach(msgText)with smtplib.SMTP(self.host, self.port) as smtpObj:
    smtpObj.ehlo()
    smtpObj.starttls()
    smtpObj.login(self.email, self.password)
    smtpObj.sendmail(self.email, recipient, msg.as_string())

查看以下网址以获得完整的代码:

https://gist.github.com/wfng92/f5af6144053aeab514e5ff330949b112

您的根目录中应该有以下文件。

  • config.ini
  • weather_email.py

只要这两个文件与您调用的Python文件位于同一目录中,您就可以在任何Python应用程序中轻松触发电子邮件警报功能。只需根据您的用例修改import语句。下面的示例概述了在未来6小时内下雨或下雪时向两个收件人发送电子邮件通知的代码。

import weather_emailemail_obj = weather_email.EmailSender() email_obj.SendEmail(['email@gmail.com', 'email2@gmail.com'])

结果

让我们看一下运行测试时的结果。我接到通知,说我家下着小雨。

如何在Python中创建天气警报系统

当雨停的时候,我运行了相同的代码,预报说6小时后还会下雨。也许我应该在下雨之前回去把我所有的衣服从晾衣架上取下来。

如何在Python中创建天气警报系统

英文原文链接:

https:///how-to-create-a-weather-alert-system-in-python-5fab4b42e49a

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约