今天是清明长假的最后一天了,趁着这点空余的时间想来做点有意思的东西,之前做12306自动购票程序的时候就想加入一个功能,就是抢票成功后实现自动向指定的邮箱里面发送提醒信息的邮件,功能还是很简单的,今天花了一点时间来实现了一下,做完以后我突然在想,能不能用这个小功能来每天定时地向女朋友发送天气预报的邮件呢?这样不是很有意思的吗?说做就做,于是乎开始了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+'
'+u"当前温度:"+temperate+'
'+u"当前风速:"+\
WS+'
'+u"当前风向:"+WD+'
'+u"当前湿度:"+humidity+'
'+\
u"当前降水量:"+water+'
'+u"当前时间:"+now_time
return info
中间有一个地方需要解释一下就是,之前我分行一直使用的是'\n',但是发现邮件的内容一直换行失败,这里查了一下在网页中显示的内容要换行的话,这里就必须使用'
',亲测可行。上面的代码功能就是定时解析本地的文件数据,生成最新的天气预报信息,构建QQ邮件内容。
接下来我们开始实现QQ邮件自动发送功能,在实现这部门功能之前首先要开启POP3协议之后获取到自己QQ邮箱的客户端授权码,具体操作可以参考这篇文章。具体代码实现如下:
def autoSendEmail(receiver,message):
'''
自动发送邮件通知
receiver:邮件的接受者,如:1111111111@qq.com
'''
host='smtp.qq.com'
port=25
sender='你的发件邮箱号码'
pwd='你的客户端授权密码'
body='
叮咚:
'+message+'
'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小时执行一下内容解析与邮件发送,这样你的“小祖宗”就可以每天实时地收到最新的天气预报信息了。
温馨提示:
如果邮件未收到记得查看下是否在垃圾邮件里面哈,我最开始就是被邮箱自动放到垃圾邮件里面了。
愉快的小实践,记录一下,今天天气明媚,万里无云哈。