天气越来越冷,利用Python做一个监控天气的程序,发邮件 您所在的位置:网站首页 smtp登录次数越来越多 天气越来越冷,利用Python做一个监控天气的程序,发邮件

天气越来越冷,利用Python做一个监控天气的程序,发邮件

#天气越来越冷,利用Python做一个监控天气的程序,发邮件| 来源: 网络整理| 查看: 265

完成这个任务需要三个步骤: 1、查询天气2、发送邮件3、代码实现

查询天气,主要是通过api来发送请求得到json数据串,并通过postman来测试请求。

查询天气接口

要获取天气情况,需要一个查询天气的接口,网上找了一下,一般都是注册后送一定调用次数的,我选择了一个,免费送 500 次查询次数的。

我们看看接口的 API 文档。

其中城市名 cityname 和 key 是必填项。

http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申请的KEY

key 值在 juhe.cn 我的接口那一栏中可以看到。

 

 

我们也可以事先在 Postman 工具中调试看看接口能否调通。

Postman 接口工具没用过的没关系,他们网页上也提供了调试工具。

 

 

查询天气方法

我们直接用 requests 库请求接口就能获得 json 格式的天气信息,json 数据中包含了当天和未来几天的天气信息,这里我只需要当天的,当天数据都在 result 下的 today 里,提取出来用 return 返回。

 

2、发送邮件

def send_mail(self): # 设置邮件信息 city_name, day_temp, day_weather, weather_date, city_id = self.get_weather() print(city_name) weather = "城市:{}\n温度:{}\n天气状况:{}\n天气日期:{}\n城市代码:{}"\ .format(city_name, day_temp, day_weather, weather_date, city_id) print(weather) msg = MIMEText(weather, 'plain', 'utf-8') msg['Subject'] = Header('天气状态', 'utf-8').encode() msg['From'] = self._format_addr('中国气象网 ' % self.from_addr) for to_addr in to_address: msg['To'] = self._format_addr('天气状态 ' % to_addr) # 发送邮件 server = smtplib.SMTP(self.SmtpServer, 25) server.login(self.from_addr, self.password) server.sendmail(self.from_addr, [to_addr], msg.as_string()) server.quit()

发送邮件实例:

这样,小工具就完成了,你也可以在上面扩展,加上其他功能,这样就更完善了。

3、代码实现

完整代码如下:

# coding:utf-8 from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr, formataddr import requests import smtplib class PostWeatherEmail(object): def __init__(self, to_address): # 发件人地址 self.from_addr = '***********@163.com' # 邮箱密码 self.password = '******' self.SmtpServer = 'smtp.163.com' # 收件人地址 self.to_address = ['[email protected]'] self.mail_text = '' self. url = 'http://v.juhe.cn/historyWeather/weather?city_id=1&weather_' \ 'date=2019-11-01&key=59d5c0a48f07f6a6e333dcb86aef55fb' def _format_addr(self, s): """ 转化地址 :param s: :return: 指定格式 """ name, addr = parseaddr(s) self.url return formataddr((Header(name, 'utf-8').encode(), addr)) def get_weather(self): """ 根据api获取天气信息 :return: 天气信息文本 """ weather_json = requests.get(self.url).json() city_id = weather_json['result']['city_id'] day_temp = weather_json['result']['day_temp'] day_weather = weather_json['result']['day_weather'] city_name = weather_json['result']['city_name'] weather_date = weather_json['result']['weather_date'] return city_name, day_temp, day_weather, weather_date, city_id def send_mail(self): # 设置邮件信息 city_name, day_temp, day_weather, weather_date, city_id = self.get_weather() print(city_name) weather = "城市:{}\n温度:{}\n天气状况:{}\n天气日期:{}\n城市代码:{}"\ .format(city_name, day_temp, day_weather, weather_date, city_id) print(weather) msg = MIMEText(weather, 'plain', 'utf-8') msg['Subject'] = Header('天气状态', 'utf-8').encode() msg['From'] = self._format_addr('中国气象网 ' % self.from_addr) for to_addr in to_address: msg['To'] = self._format_addr('天气状态 ' % to_addr) # 发送邮件 server = smtplib.SMTP(self.SmtpServer, 25) server.login(self.from_addr, self.password) server.sendmail(self.from_addr, [to_addr], msg.as_string()) server.quit() if __name__ == '__main__': try: to_address = ['********[email protected]'] send_mail = PostWeatherEmail(to_address) send_mail.send_mail() except Exception as e: print(e)

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有