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 相关文章推荐
跟老齐学Python之眼花缭乱的运算符
Sep 14 Python
python中字典(Dictionary)用法实例详解
May 30 Python
详解Python字符串对象的实现
Dec 24 Python
利用Python实现网络测试的脚本分享
May 26 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
python装饰器实例大详解
Oct 25 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python使用wxPython实现计算器
Jan 30 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
python实现会员信息管理系统(List)
Mar 18 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
分享PHP入门的学习方法
2007/01/02 PHP
PHP 文件系统详解
2012/09/13 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
摘自启点的main.js
2008/04/20 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
几行js代码实现自适应
2017/02/24 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
下载给定网页上图片的方法
2014/02/18 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
pandas值替换方法
2018/07/10 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python占用的内存优化教程
2019/07/28 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
大学优秀班主任事迹材料
2014/05/02 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
文明单位创建材料
2014/12/24 职场文书
企业员工辞职信范文
2015/05/12 职场文书
开学随笔
2015/08/15 职场文书
Python词云的正确实现方法实例
2021/05/08 Python