美文网首页
python实现自动发送天气预报到邮箱

python实现自动发送天气预报到邮箱

作者: 佳瑞Jarrett | 来源:发表于2020-10-18 19:57 被阅读0次

    author:Jarrett
    初稿时间:2020年10月8日

    前言

    假如有个私人助理每天向我报告我所关心信息,比如我想知道今天的热点新闻,知乎、微博的热点内容,某个技术有了什么新的突破等等信息。
    但是,没有真人的“私人助理”但是可以有一个程序来帮我做到以上的事情。一个运行在服务端的程序,每天抓取我想要的信息,再定时地发送我的邮箱,这不就让梦想更进一步了。那就先来完成一个自动发送天气预报的程序,再将这个程序部署在树莓派上,设置为每天早上和下午定时发送到邮箱。

    天气数据的获取

    api提供商和风天气
    和风天气的开发者文档地址为:
    https://dev.heweather.com/docs/api/weather

    和风天气支持提供某个地区的天气预报和实况天气信息。其城市级天气预报API,包括全球15万个城市或地区的1-15天天气预报、实况天气、逐小时天气预报以及日出日落、月升月落等数据。
    和风天气提供的API包括商业版和开发版。

    如需要查看更早期的版本的开发文档请访问 S6版本,S6版本的技术支持截止于2020年6月1日。

    3天预报 HTTP GET
    
    商业版 https://api.heweather.net/v7/weather/3d?{请求参数}
    开发版 https://devapi.heweather.net/v7/weather/3d?{请求参数}
    

    python链接和风天气

    url = APIURL + '?location= ' + CITY + '&key=' + KEY
    res = requests.get(url)
    res = json.loads(res.text)  # Change the response to json.
    

    和风天气的返回数据如下所示。

    {"HeWeather6":
    [{"basic":
    {"cid":"CN101271503","location":"彭山","parent_city":"眉山","admin_area":"四川省","cnty":"中国","lat":"30.19229889","lon":"103.87010193","tz":"+8.00"},
    "update": {"loc":"2020-10-08 20:40","utc":"2020-10-08 12:40"},
    "status":"ok",
    "daily_forecast":
    [{"cond_code_d":"305","cond_code_n":"305","cond_txt_d":"小雨","cond_txt_n":"小雨","date":"2020-10-08","hum":"85","mr":"22:51","ms":"12:27","pcpn":"1.4","pop":"58","pres":"967","sr":"07:03","ss":"18:39","tmp_max":"19","tmp_min":"16","uv_index":"2","vis":"25","wind_deg":"59","wind_dir":"东北风","wind_sc":"1-2","wind_spd":"3"},
    {"cond_code_d":"305","cond_code_n":"305","cond_txt_d":"小雨","cond_txt_n":"小雨","date":"2020-10-09","hum":"87","mr":"23:43","ms":"13:23","pcpn":"1.0","pop":"55","pres":"963","sr":"07:03","ss":"18:38","tmp_max":"20","tmp_min":"16","uv_index":"2","vis":"25","wind_deg":"0","wind_dir":"北风","wind_sc":"1-2","wind_spd":"3"},
    {"cond_code_d":"305","cond_code_n":"305","cond_txt_d":"小雨","cond_txt_n":"小雨","date":"2020-10-10","hum":"88","mr":"00:00","ms":"14:15","pcpn":"1.0","pop":"55","pres":"961","sr":"07:04","ss":"18:37","tmp_max":"20","tmp_min":"17","uv_index":"2","vis":"25","wind_deg":"0","wind_dir":"北风","wind_sc":"1-2","wind_spd":"3"}
    ]}]}
    
    格式整理

    使用开发版的API只能提供三天的天气预报数据。从获取的信息中提取到天气描述、最高温度、最低温度、湿度、风向、风级、风速等信息。

    forecast = res['HeWeather6'][0]['daily_forecast']
    for data in forecast:
        cond_txt_d = data['cond_txt_d']  # weather 天气描述
        tmp_max = data['tmp_max']  # max temperature.
        tmp_min = data['tmp_min']  # min tempereture.
        hum = data['hum']  # humanity
        wind_dir = data['wind_dir']  # wind direction.
        wind_sc = data['wind_sc']  # wind degree.
        wind_spd = data['wind_spd']  # wind speed.
    
    发送邮件

    邮件发送模块采用菜鸟教程的demo即可完成。
    发送的邮箱可以选择国内的163邮箱,QQ邮箱。需要注意的是发送邮箱的token是需要到邮箱的设置页设置的,而不是常用的登录邮箱。
    这里建议将发件人姓名(username)发件人的邮箱地址,收件人的姓名、收件人的邮箱地址,全部放到配置文件中。这样做的目的是方便以后扩展和修改,避免修改程序;另一方面将其加入到gitingore文件中,就不会被同步。

    数据 -> 格式 -> 邮件发送

    通过将获取的天气预报数据整理格式,就可以发送天气预报到邮箱了。

    邮箱里接收到的信息

    单纯的文字看上去就很“朴素”,为了增强用户的友好度,我们采用HTML美化。
    美化的方法是首先用html设计一个网页,然后再将需要显示的数据给替换为查询的天气信息。


    天气预报

    界面的美化是因人而异,直接copy了和风天气的UI。

    结论
    • 用最简单的方式爬取和风天气的API。仅用几行代码就可以获取到天气信息,这也是很多爬虫程序的第一步。
    • 邮件发送的模块是可以完全复用的。邮件发送的内容可以是普通的文本,html,图片,以及附件等。
    • 这里是实现了发送邮件的内容,下一步需要将其部署在树莓派中,且设置为定时任务。
    参考

    菜鸟教程:Python SMTP发送邮件
    https://github.com/Jarrettluo/Weather_Forecast

    相关文章

      网友评论

          本文标题:python实现自动发送天气预报到邮箱

          本文链接:https://www.haomeiwen.com/subject/alpfxktx.html