本文为CSDN博主「SunriseCai」的原创文章

补充

有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!!

这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!!

下面是我会用到的两个场景:

每日下班之前发送整理后的文档到领导邮箱。(将文档放到指定文件夹,遍历发送即可)

服务器日志在早晨8点发送至我的邮箱,上班通勤路上可以瞄几眼前晚服务器有异常否。

以后有用到的场景再做补充。。。

以下的内容并没有更改,与初发表的博文一致。

前言:

近来天气转凉,我是每日起床都会查一下当天的天气情况。但我又觉得查天气麻烦,于是乎产生了一个每日定时自动获取天气预报并且发送到个人邮箱的想法。

如果你也觉得查天气麻烦,那看这篇文章就对了。

而这篇文章!!将详细讲解如何实现每日早上八点将最近7天的天气状况发送到你的个人邮箱。

自动将天气状况发送到你的个人邮箱共有以下四个步骤。

1.注册免费天气API

1.1打开和风天气注册账号

1.下图是和风天气:https://dev.heweather.com/的首页,打开注册即可。

2.账号注册成功后点击 新建应用 ,创建一个Key,这个Key是用来进行和风天气API调用的。

可以看到新建成功后的Key是一串长长的字符串,这个就是获取天气信息需要用到的密钥啦。

1.2打开天气API接口说明,看看和风天气的开发文档。

API开发文档,点击即可跳转。

从上图中可以看到(有商业版与免费版我这里使用的是免费版),有多种weather-type,这里我们使用forecast,这个是获取3-10天预报。

根据上图的请求URL示例可知,我们需要调用的url为

https://free-api.heweather.net/s6/weather/forecast?location=城市代码&key=自己创建的Key

2.编写获取天气代码

城市可以填写中文,也可以填写城市代码城市代码查询。

2.1获取天气预报情况

import requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=广州&key=xxxxxxxxx'

res = requests.get(url)

print(res.text)

返回的是json格式的文件,可以看到返回了从查询当天的起始的7天天气预报信息。

接下的任务就是解析这一堆json格式的数据啦。

2.2所在城市经纬度等信息查询

import json

import requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=广州&key=xxxxxxxxx'

res = requests.get(url)

res = json.loads(res.text) # 转换json数据为字典

result = res['HeWeather6'][0]['basic']

print(result)

# 这是所查询城市的经纬度,时区等等信息。

## {'cid': 'CN101280101', 'location': '广州', 'parent_city': '广州', 'admin_area': '广东', 'cnty': '中国', 'lat': '23.12517738', 'lon': '113.28063965', 'tz': '+8.00'}

2.3查询所在城市未来7天信息

import requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=广州&key=xxxxxxxxx'

res = requests.get(url).json() # 返回的数据为json格式

result = res['HeWeather6'][0]['daily_forecast']

print(result)

因为这里调用的API会返回7天的数据,所以会返回7组下图的数据。

{

"cond_code_d": "100", # 白天天气状况 100为晴 101为多云 104为阴 等

"cond_code_n": "100", # 夜间天气状况

"cond_txt_d": "晴", # 白天天气状况描述

"cond_txt_n": "晴", # 晚间天气状况描述

"date": "2019-11-10", # 预报日期

"hum": "50", # 相对湿度

"mr": "16:33", # 月升时间

"ms": "04:21", # 月落时间

"pcpn": "0.0", # 降水量

"pop": "0", # 降水概率

"pres": "1013", # 大气压强

"sr": "06:37", # 日出时间

"ss": "17:43", # 日落时间

"tmp_max": "27", # 最高温度

"tmp_min": "16", # 最低温度

"uv_index": "7", # 紫外线强度指数

"vis": "25", # 能见度,单位:公里

"wind_deg": "-1", # 风向360角度

"wind_dir": "无持续风向", # 风向

"wind_sc": "1-2", # 风力

"wind_spd": "6" # 风速,公里/小时

}

......

2.4 获取自己所需要的天气信息

import csv

import requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=广州&key=xxxxxx'

res = requests.get(url).json()

result = res['HeWeather6'][0]['daily_forecast']

city = location['parent_city']+location['location']

names = ['城市','时间','天气状况','最高温','最低温','日出','日落']

for data in result:

date = data['date']

cond = data['cond_txt_d']

max = data['tmp_max']

min = data['tmp_min']

sr = data['sr']

ss = data['ss']

print(city,date,cond,max,min,sr,ss)

## 返回的数据

广州广州 2019-11-10 晴 27 16 06:37 17:43

广州广州 2019-11-11 晴 28 18 06:38 17:43

广州广州 2019-11-12 晴 29 18 06:39 17:42

广州广州 2019-11-13 多云 28 17 06:39 17:42

广州广州 2019-11-14 晴 25 15 06:40 17:42

广州广州 2019-11-15 晴 26 15 06:40 17:42

广州广州 2019-11-16 晴 27 16 06:41 17:41

3.编写发送邮件代码

这里参考菜鸟教程的Python SMTP发送邮件

1.首先去QQ邮箱

打开 设置-账户-开启服务-开启POP3/SMTP服务,然后点击生成授权码,python发送邮件要用。

直接上代码,不解释。

# 简单邮件传输协议

import smtplib

import email

import time

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

# 设置邮箱的域名

HOST = 'smtp.qq.com'

# 设置邮件标题

SUBJECT = '今日份天气预报到了哟,主子'

# 设置发件人邮箱

FROM = 'xxx@qq.com'

# 设置收件人邮箱

TO = 'xxx@163.com,xxx@qq.com' # 可以填写多个邮箱,用逗号分隔,后面会用split做逗号分割

message = MIMEMultipart('related')

# --------------------------------------发送文本-----------------

# 发送邮件正文到对方的邮箱中

message_html = MIMEText("主子你的邮件到了\n\nThis is test", 'plain', 'utf-8') # \n为换行

message.attach(message_html)

# -------------------------------------添加文件---------------------

# 要确定当前目录有test.csv这个文件

message_xlsx = MIMEText(open('test.csv', 'rb').read(), 'base64', 'utf-8')

# 设置文件在附件当中的名字

message_xlsx['Content-Disposition'] = 'attachment;filename="test01.csv"'

message.attach(message_xlsx)

# 设置邮件发件人

message['From'] = FROM

# 设置邮件收件人

message['To'] = TO

# 设置邮件标题

message['Subject'] = SUBJECT

# 获取简单邮件传输协议的证书

email_client = smtplib.SMTP_SSL()

# 设置发件人邮箱的域名和端口,端口为465

email_client.connect(HOST, '465')

# ---------------------------邮箱授权码------------------------------

result = email_client.login(FROM, '你的授权码')

print('登录结果', result)

email_client.sendmail(from_addr=FROM, to_addrs=TO.split(','), msg=message.as_string())

# 关闭邮件发送客户端

email_client.close()

4.完整代码

# coding=gbk ## 注:linux服务器上不需要这一行,window需要

import csv

import time

import requests

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

url = r'https://free-api.heweather.net/s6/weather/forecast?location=广州&key=xxxxxx'

# 获取当日时间 2019-11-10

today_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))

def get_weather_data():

res = requests.get(url).json()

# res.encoding = 'utf-8'

result = res['HeWeather6'][0]['daily_forecast']

location = res['HeWeather6'][0]['basic']

city = location['parent_city'] + location['location']

names = ['城市', '时间', '天气状况', '最高温', '最低温', '日出', '日落']

with open('today_weather.csv', 'w', newline='')as f:

writer = csv.writer(f)

writer.writerow(names)

for data in result:

date = data['date']

cond = data['cond_txt_d']

max = data['tmp_max']

min = data['tmp_min']

sr = data['sr']

ss = data['ss']

writer.writerows([(city, date, cond, max, min, sr, ss)])

send_email()

def send_email():

# 设置邮箱的域名

HOST = 'smtp.qq.com'

# 设置邮件标题

SUBJECT = '%s日份天气预报信息,请查收'%today_time

# 设置发件人邮箱

FROM = 'xxx@qq.com'

# 设置收件人邮箱

TO = 'xxx@163.com,xxx@qq.com' # 可以同时发送到多个邮箱

message = MIMEMultipart('related')

# --------------------------------------发送文本-----------------

# 发送邮件正文到对方的邮箱中

message_html = MIMEText("%s日份天气预报到账啦,请查收" % today_time, 'plain', 'utf-8')

message.attach(message_html)

# -------------------------------------添加文件---------------------

# today_weather.csv这个文件

message_xlsx = MIMEText(open('today_weather.csv', 'rb').read(), 'base64', 'utf-8')

# 设置文件在附件当中的名字

message_xlsx['Content-Disposition'] = 'attachment;filename="today_weather.csv"'

message.attach(message_xlsx)

# 设置邮件发件人

message['From'] = FROM

# 设置邮件收件人

message['To'] = TO

# 设置邮件标题

message['Subject'] = SUBJECT

# 获取简单邮件传输协议的证书

email_client = smtplib.SMTP_SSL(host='smtp.qq.com')

# 设置发件人邮箱的域名和端口,端口为465

email_client.connect(HOST, '465')

# ---------------------------邮箱授权码------------------------------

result = email_client.login(FROM, '你的授权码')

print('登录结果', result)

email_client.sendmail(from_addr=FROM, to_addrs=TO.split(','), msg=message.as_string())

# 关闭邮件发送客户端

email_client.close()

get_weather_data()

5.部署代码到服务器,以便每日准时运行代码

说的好听就叫代码部署,换句话说就是将代码拷贝到服务器,然后让代码运行。

这里会用到一丢丢linux的知识。

5.1 首先拷贝文件到服务器

这一步很简单,直接复制黏贴即可。

5.2 无

创建一个和 python文件在同一个文件夹的 startup.sh文件(命名随意),然后在 startup.sh文件的里面填写

python3 ./python文件名称 # 记得 / 前面有个小点 .

然后再 /etc/crontab 里面填写 stratup.sh文件的路径即可。

以上,动手操作一番即可,就可以每天8点准时收到最新的天气预报信息了。

————————————————

原文链接:https://blog.csdn.net/weixin_45081575/article/details/102886718

python向自己qq邮箱发信息_【奇巧淫技】python!每天早上八点自动发送天气预报邮件到QQ邮箱...相关推荐

  1. 【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 补充 有不少杠精小婊贝留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!! ...

  2. python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

  3. 如何给对方邮箱发照片_怎样给邮箱发照片 - 卡饭网

    墨迹天气怎么发照片实景 墨迹天气上传实景图片教程 墨迹天气怎么发照片实景 墨迹天气上传实景图片教程 现在有很多的天气预报应用,现在的天气预报可比以前准多了.其中墨迹天气就是一款不错的应用,但使用中也出 ...

  4. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  5. python向自己qq邮箱发信息_python使用QQ邮箱发送邮件

    使用QQ邮箱发邮件比较繁琐,SMTP密码是动态的 向下滚动,找到smtp,点击开启 发送短信进行验证 腾讯smtp服务器: smtp:smtp.qq.com 端口:465 代码如下: # coding ...

  6. python向自己qq邮箱发信息_python QQ邮箱自动发送邮件

    于初学者来讲在写发送邮件代码时常见的错误有SMTPAuthenticationError535,有点懵逼,检查用户名,密码正确就是报错, 想当年笔者也是这么过来的,现在就给大家分享一下个人经验: 一, ...

  7. python 获取qq群成员信息_用Python编写工具获取QQ群成员的昵称和号码,使用,及,小...

    使用火狐浏览器进行数据的抓取,火狐浏览器对json比较友好 进入QQ群官网: 登录后,点击成员管理: 先随机选择一个群,抓取一下信息,找一下规律 打开浏览器控制台,重新刷新网页: 这是我们想要的一些信 ...

  8. python 获取qq群成员信息_[Python-ItChat]获取微信所有好友, 群信息(群内人员),批量添加好友,自动发送信息等...

    New 09.10 降低使用门槛, 编译生成exe 使用方法 下载exe,双击, 然后扫码-> 同级目录下生成friends.txt和chatrooms.txt[格式为json]对应的是好友列表 ...

  9. 利用python itchat给女朋友定时发信息

    利用itchat给女朋友定时发信息 涉及到的技术有itchat,redis,mysql,最主要的还是mysql咯,当然咯,这么多东西,我就只介绍我代码需要用到的,其他的,如果需要了解的话,就需要看参考 ...

最新文章

  1. CMS发生FullGc分析
  2. 解决mysql获取不到连接的问题
  3. shell测试命令test、[ ]、[[ ]]
  4. LeetCode 402. 移掉K位数字 中等难度
  5. vc6 前进后退 番茄_openMP 使用 VC6+Intel Compiler 9.1 (来自网络)
  6. 混合文件下分离xml文件和jpg文件
  7. PHP支付接口教程,详解微信支付(二)
  8. laravel里面使用event
  9. 《 Spring 实战 》(第4版) 读书笔记 (未完结,更新中...)
  10. Mac OS X 程序员利器 – Homebrew安装与使用
  11. 安卓案例:利用SQLiteDatabase操作数据库与表
  12. hadoop deployment
  13. Android——列表选择框(Spinner)
  14. 在pcb放置坐标标注_PCB拼板上的那颗美人痣
  15. C++容器与参数传递方式
  16. 数据结构(C语言)-数组
  17. winform利用html开发,Winform开发框架之HTML编辑控件介绍
  18. mrpt在win8.1 64bit + vs2013环境下的安装和编译
  19. 酷狗音乐车载Android版,酷狗音乐车机版
  20. 各种路由器接口与连接方法

热门文章

  1. python随机数产生
  2. iOS Swift字符串截取
  3. 小飞升值记——(5)
  4. 错误 找不到或无法加载主类 mysql_解决Eclipse中“诡异”的错误:找不到或无法加载主类...
  5. 最新浏览器调查:Firefox、Safari、Chrome市场占有率上升
  6. 苹果手机密码设置在哪里_苹果iPhone SIM卡设置密码的方法!
  7. 转:PHP--获取响应头(Response Header)方法
  8. Goole插件在高版本浏览器中安装报错解决技术
  9. chrome插件下载,chrome商店,chrome extension,crx下载
  10. 佳博标签打印机GP-3120TUB linux驱动