本文首发地址:
https://yishuihancheng.blog.csdn.net/article/details/89068484
欢迎关注我的博客【Together_CZ】,我是沂水寒城。
今天想花一点时间做一个能够自动给我推送天气预报的小东西,最开始的时候想的是基于微信去做,后来发现还是有些麻烦,需要登录认证等等,后来就就想到了基于邮件推送的方式来实现天气预报信息的发送,本质就是:数据爬虫+QQ自动邮件发送。
首先,要发送天气预报信息就必须要从网络上获取到天气预报的信息,这里的天气预报信息我选择的源站是:中央气象台。我们以杭州市为例,页面数据截图如下:
精细预报数据截图如下:
从数据粒度来看,预报是每3小时更新一次的,这就给我们提供了一下邮件发送的间隔时间依据,3小时自动发送一次就好了。
首先,我们获取了一下所需要的数据,存储为json的数据格式,截图如下:
爬虫的爬取间隔也是3小时爬取一次,每次爬取结束后会以当次爬取的时间戳为主键进行json数据的解析和存储。
接下来我们要对爬取到本地的json数据进行解析,生成邮件的文本内容信息,具体如下:
def jsonDataParse(city,data='results/hangzhou.json'): ''' 气象 json 数据解析 ''' name=data.split('/')[-1].strip().split('.')[0].strip() with open(data) as f: data_dict=json.load(f) date_list=data_dict.keys() key=max(date_list) #温度 temperate_dict=data_dict[key]['temperate']['three_hour'] temperate=temperate_dict[min(temperate_dict.keys())] #风向 ws_dict=data_dict[key]['wind_speed']['three_hour'] WS=ws_dict[min(ws_dict.keys())] #风速 wd_dict=data_dict[key]['wind_direction']['three_hour'] WD=wd_dict[min(wd_dict.keys())] #湿度 hum_dict=data_dict[key]['humidity']['three_hour'] humidity=hum_dict[min(hum_dict.keys())] #降水量 water_dict=data_dict[key]['water']['three_hour'] water=str(water_dict[min(water_dict.keys())]) print data print 'temperate: ',temperate print 'wind_speed: ',WS print 'wind_direction: ',WD print 'humidity: ',humidity print 'water: ',water now_time=str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) info=u\"当前城市:\"+city+'<br/>'+u\"当前温度:\"+temperate+'<br/>'+u\"当前风速:\"+\ WS+'<br/>'+u\"当前风向:\"+WD+'<br/>'+u\"当前湿度:\"+humidity+'<br/>'+\ u\"当前降水量:\"+water+'<br/>'+u\"当前时间:\"+now_time return info
中间有一个地方需要解释一下就是,之前我分行一直使用的是'\n',但是发现邮件的内容一直换行失败,这里查了一下在网页中显示的内容要换行的话,这里就必须使用'<br/>',亲测可行。上面的代码功能就是定时解析本地的文件数据,生成最新的天气预报信息,构建QQ邮件内容。
接下来我们开始实现QQ邮件自动发送功能,在实现这部门功能之前首先要开启POP3协议之后获取到自己QQ邮箱的客户端授权码,具体操作可以参考这篇文章。具体代码实现如下:
def autoSendEmail(receiver,message): ''' 自动发送邮件通知 receiver:邮件的接受者,如:1111111111@qq.com ''' host='smtp.qq.com' port=25 sender='你的发件邮箱号码' pwd='你的客户端授权密码' body='<h2>叮咚:</h2><p>'+message+'</p>' msg=MIMEText(body,'html',_charset=\"utf-8\") msg['subject']='最新的杭州市天气状况来啦,小祖宗请注意接收!' msg['from']=sender msg['to']=receiver server=smtplib.SMTP(host,port) server.login(sender,pwd) #开始登陆邮箱,并发送邮件 server.sendmail(sender, receiver, msg.as_string()) server.quit() print 'Send Weather Email Sussess!!!'
至此,我们的数据获取与解析工作、QQ邮件自动发送功能都已经完成了,接下来就可以正式实践一下了。结果截图如下所示:
如果想紧跟官网天气预报的更新脚步的话,可以做一个简单的定时程序,每3小时执行一下内容解析与邮件发送,这样你的“小祖宗”就可以每天实时地收到最新的天气预报信息了。
温馨提示:
如果邮件未收到记得查看下是否在垃圾邮件里面哈,我最开始就是被邮箱自动放到垃圾邮件里面了。
用这种技术宅的方式为你的小祖宗送上关怀是不是很独特有风格呢?
悄悄告诉你:同事就是这么追到他心仪的女神的哦!