前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何在Python中创建天气警报系统

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

作者头像
HuangWeiAI
发布于 2020-12-18 03:25:39
发布于 2020-12-18 03:25:39
2.6K00
代码可运行
举报
文章被收录于专栏:浊酒清味浊酒清味
运行总次数:0
代码可运行

前言

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

本教程有3个部分:

1.设置

2.实现

3.结果

设置

天气API

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

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

  • JavaScript
  • Ruby
  • Node
  • Python

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

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

邮件配置

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

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

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

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

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

Python模块

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install configparser

实现

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

import

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try:
    import configparser
except:
    from six.moves import 
    configparserimport smtplib
from email.mime.multipart import 
MIMEMultipart
from email.mime.text import MIMEText
import requests

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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时需要的以下变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url = "https://api.climacell.co/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,它有以下参数,可以修改:

  • 纬度,-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中读取数据,并将其分配给相应的变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,它接受一个接收者参数。它接受列表而不是字符串。这允许我们向多个电子邮件地址发送相同的电子邮件通知。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def SendEmail(self, recipient):

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
title = "Home Sweet Home"msg = MIMEMultipart()
msg['Subject'] = '[Weather Notification]'
msg['From'] = self.email
msg['To'] = ', '.join(recipient)

调用天气API

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
response = requests.request
("GET", url, params=querystring)
result = ""json_data = response.json()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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小时内下雨或下雪时向两个收件人发送电子邮件通知的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import weather_emailemail_obj = 
weather_email.EmailSender()
email_obj.SendEmail(["email@gmail.com",
 "email2@gmail.com"])

结果

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python学会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
简单三步,用 Python 发邮件
0. 前言 发送电子邮件是个很常见的开发需求。比如你写了个监控天气的脚本,发现第二天要下雨,或者网站上关注的某个商品降价了,就可以发个邮件到邮箱来提醒自己。 使用 Python 脚本发送邮件并不复杂。不过在网页上搜了些教程,都亲测无效,发现或多或少有点问题,导致发送失败。所以今天我们就来讲讲如何使用 Python 发送邮件。 本文主要内容包括,了解发邮件的思路,发送邮件需要的一些设置,发送一封简单的邮件,发送一封包含附件的邮件,在写代码过程中我们需要注意哪些问题等等。(完整参考代码地址见文末) 1. 思
Crossin先生
2018/04/17
1.1K0
简单三步,用 Python 发邮件
【Python实用工具】巧妙利用Python实现发送带附件的邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
天道Vax的时间宝藏
2021/08/11
2.4K0
【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱「建议收藏」
有不少杠精小婊贝留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!!
全栈程序员站长
2022/09/14
1.3K0
【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱「建议收藏」
10分钟教你用python如何正确把妹-不知道妹子为何生气?那是因为你没学python
当然啦,这只是测试版的效果,真正的版本可比这个厉害多啦。不过作为一个直男,另一个男的给小编发这个测试感觉还是有点怪怪的哈。
短短的路走走停停
2019/05/14
4900
python发邮件详解,smtplib和email模块详解
在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理。SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,python实现发邮件也是基于此基础上进行封装的。
全栈程序员站长
2022/11/01
1.3K0
python发邮件详解,smtplib和email模块详解
Python模块smtplib让群发邮件变得简单1.smtplib模块介绍2.email.utils模块使用3.发送email的其它几个模块4.实例
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Python创建 SMTP 对象语法如下:
Python攻城狮
2018/08/23
8140
Python模块smtplib让群发邮件变得简单1.smtplib模块介绍2.email.utils模块使用3.发送email的其它几个模块4.实例
自动化系列(三)Python实现定时邮件
在日常数据交付中,定时邮件是必不可少的。一般企业的数仓会开发出相关平台供分析师使用,但仅限于SQL语言,虽然大多数场景下足够了,但难免碰到一些复杂的需求需要SQL查询+Python处理,这个时候就需要自定义的定时邮件了。
HsuHeinrich
2023/02/24
5490
自动化系列(三)Python实现定时邮件
python 邮件发送
  smtplib 模块 1、smtplib.SMTPAuthenticationError: (550, b'User has no permission') 2、smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 这两个错误是你的密码用的不是授权码导致 3、554 DT:SPM 163 smtp5 这属于网易邮箱的一个退回检测机制导致,貌似跟发送比较频繁有关,被系统判定为病毒或垃圾邮件
py3study
2020/01/19
1.2K0
forest获取天气
Springboot集成forest获取天气信息 导入依赖 <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>spring-boot-starter-forest</artifactId> <version>1.5.28</version> </dependency> 注册彩云科技 彩云科技平台注册地址 等审核通过后得到令
橘子君丶
2023/03/06
6980
forest获取天气
python 使用stmp发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
py3study
2020/01/06
1.1K0
python邮件自动发送测试报告,看这篇文章就够了
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100698.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
4830
python邮件自动发送测试报告,看这篇文章就够了
Python邮箱API发送邮件的方法和步骤
Python是一种功能强大的编程语言,可以用来发送电子邮件。使用Python发送邮件可以通过邮箱API来实现。aoksend将介绍使用Python邮箱API发送邮件的方法和步骤。
AokSend-API接口
2024/04/10
2660
python+requests接口自动化
文章来源:https://my.oschina.net/u/3041656/blog/820023
py3study
2020/01/15
8090
python+requests接口自动化
基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
  在上一篇《基于Python接口自动化测试框架(初级篇)附源码》讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构:
全栈测试开发日记
2023/02/02
1K0
基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
太强了,用Python+Excel制作天气预报表!
主要使用xlwings和requests这两个Python库,以及Office的Excel。
小F
2021/06/25
1.1K0
太强了,用Python+Excel制作天气预报表!
九、Python发送QQ邮件(SMTP)
看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 有了上述基本概念,要编写程序来发送和接收邮件,本质上就是: 编写MUA把邮件发到MTA; 编写MUA从MDA上收邮件。 发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。 收邮件时,MUA和MDA使用的协议有两种:POP:Post Of
酱紫安
2018/04/16
2.4K0
实战教程:如何在API监控中实现高效报警和通知
因一业务需要,想要对API服务接口添加一些监控,以帮助跟踪应用程序的性能、问题和用户活动等。实现监控的方式有多种多样的方式,以下是一些常用的方法:
用户3578099
2023/09/27
8060
实战教程:如何在API监控中实现高效报警和通知
Python 脚本来自动发送每日电子邮件报告
有些 Python 安装可能没有 smtplib 和 email 模块。它们是 Python 标准库的一部分,不需要额外安装,但如果你想发送 HTML 报告或者添加其他依赖库,可以使用 pip 安装所需库。
未名编程
2024/10/12
1490
使用golang每天给自己发送一封天气预报的邮件
github地址:https://github.com/betterfor/weather.git
chenchenchen
2019/09/03
1.4K0
使用golang每天给自己发送一封天气预报的邮件
python自动化之电子邮件
将电子邮件发送给适当的个人,首先要转换为PDF,然后再将此PD附加到电子邮件中,然后将所有电子邮件由python自动化发送。
用户2966292
2021/05/08
1.3K0
推荐阅读
相关推荐
简单三步,用 Python 发邮件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验