python定时利用QQ邮件发送天气预报的实例


Posted in Python onNovember 17, 2017

大致介绍

好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下

1、首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.com/douments/api/s6/weather-forecast)

2、利用python的jinja2模块写一个html模板,用于展示数据

3、python的email构建邮件,smtplib发送邮件

4、最后使用crontab定时执行python脚本

涉及的具体知识可以去看文档,本文主要就是解释代码的结构

和风天气API

API没什么好说的,利用requests库去请求数据,然后提取出数据,使用方法和风天气API说的很详尽了

python定时利用QQ邮件发送天气预报的实例

HTML模板

利用jinja2在和脚本同级的目录写一个HTML模板

python定时利用QQ邮件发送天气预报的实例

写好模板,我们就需要在脚本中引入他,并给他传递数据

python定时利用QQ邮件发送天气预报的实例

email构建邮件,smtplib发送邮件

注意:

1、首先需要开启QQ邮箱的SMTP服务,一般端口是465

2、在构建邮件和发送邮件时都需要接受者的邮箱,但是他们需要的数据格式是不同的,在构建邮件时,接受者邮箱需要转换成一个string,而在发送邮件时,接受者邮箱必须是一个list

python定时利用QQ邮件发送天气预报的实例

crontab定时发送邮件

我想对crontab说:

python定时利用QQ邮件发送天气预报的实例

这个crontab真的是大坑,坑了我好久,坑的我不行不行的

既然你们诚心诚意的发问了,那我就大发慈悲的告诉你们是那些坑吧

1、在crontab中要写绝对路径,包括python3,查看python的安装位置:

python定时利用QQ邮件发送天气预报的实例

2、如果脚本中涉及了中文,记得一定要写export LANG="****",如果不知道属性是什么:

python定时利用QQ邮件发送天气预报的实例

然后 crontab -e写入类似下面的代码:

python定时利用QQ邮件发送天气预报的实例

表示在每晚的22:00执行脚本,具体的crontab语法可以自行搜索

邮件:

python定时利用QQ邮件发送天气预报的实例

ok!

源代码:

#!/usr/local/bin/python3
# coding=utf-8

import requests
import json
import smtplib
import jinja2
import os.path as pth
import time
from email.mime.text import MIMEText
from email.header import Header

HEFEN_D = pth.abspath(pth.dirname(__file__))
LOCATION = '北京'
ORIGINAL_URL = 'https://free-api.heweather.com/s6/weather/forecast?parameters'
TO = ['8*******@qq.com', '2********@qq.com']


def sendEmail(content, title, from_name, from_address, to_address, serverport, serverip, username, password):
 msg = MIMEText(content, _subtype='html',_charset='utf-8')
 msg['Subject'] = Header(title, 'utf-8')
 # 这里的to_address只用于显示,必须是一个string
 msg['To'] = ','.join(to_address)
 msg['From'] = from_name
 try:
  s = smtplib.SMTP_SSL(serverip, serverport)
  s.login(username, password)
  # 这里的to_address是真正需要发送的到的mail邮箱地址需要的是一个list
  s.sendmail(from_address, to_address, msg.as_string())
  print('%s----发送邮件成功' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
 except Exception as err:
  print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  print(err)

def get_data():
 new_data = []
 parametres = {
  'location': LOCATION,
  'key': '************ ', #注册和风天气会给你一个KEY
  'lang': 'zh',
  'unit': 'm'
 }

 try:
  response = requests.get(ORIGINAL_URL,params=parametres)
  r = json.loads(json.dumps(response.text,ensure_ascii=False,indent=1))
  r = json.loads(response.text)
 except Exception as err:
  print(err)

 weather_forecast = r['HeWeather6'][0]['daily_forecast']
 for data in weather_forecast:
  new_obj = {}
  # 日期
  new_obj['date'] = data['date']
  # 日出时间
  new_obj['sr'] = data['sr']
  # 日落时间
  new_obj['ss'] = data['ss']
  # 最高温度
  new_obj['tmp_max'] = data['tmp_max']
  # 最低温度
  new_obj['tmp_min'] = data['tmp_min']
  # 白天天气状况描述
  new_obj['cond_txt_d'] = data['cond_txt_d']
  # 风向
  new_obj['wind_dir'] = data['wind_dir']
  # 风力
  new_obj['wind_sc'] = data['wind_sc']
  # 降水概率
  new_obj['pop'] = data['pop']
  # 能见度
  new_obj['vis'] = data['vis']

  new_data.append(new_obj)
 return new_data



def render_mail(data):
 env = jinja2.Environment(
   loader = jinja2.FileSystemLoader(HEFEN_D)
  )
 return env.get_template('hefentianqi.html').render({'data': data})

def main():
 config = {
 "from": "2********@qq.com",
 "from_name": '预报君',
 "to": TO,
 "serverip": "smtp.qq.com",
 "serverport": "465",
 "username": "2*******@qq.com",
 "password": "**********" #QQ邮箱的SMTP授权码
 }

 title = "别走,我给你看个宝贝"

 data = get_data()
 body = render_mail(data)
 sendEmail(body, title, config['from_name'], config['from'], config['to'], config['serverport'], config['serverip'], config['username'], config['password'])


main()

以上这篇python定时利用QQ邮件发送天气预报的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
Python for循环与range函数的使用详解
Mar 23 Python
使用python实现ftp的文件读写方法
Jul 02 Python
Python模块future用法原理详解
Jan 20 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
python简单验证码识别的实现过程
Jun 20 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
详解python eval函数的妙用
Nov 16 #Python
Python算法之图的遍历
Nov 16 #Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 #Python
python字典操作实例详解
Nov 16 #Python
python实现报表自动化详解
Nov 16 #Python
TF-IDF算法解析与Python实现方法详解
Nov 16 #Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 #Python
You might like
php5数字型字符串加解密代码
2008/04/24 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python文件名和文件路径操作实例
2017/09/29 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python读写压缩文件的方法
2020/07/30 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
写好自荐信的技巧
2013/11/08 职场文书
人事科岗位职责范本
2014/03/02 职场文书
经典促销广告词大全
2014/03/19 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
超市员工管理制度
2015/08/06 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
css3 选择器
2022/05/11 HTML / CSS