【奇巧淫技】系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱

SunriseCai 2020-11-13 11:31:54
Python 系列 每天 奇巧 早上


此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。

补充

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

ps:其实部分杠精杠的也不无道理,觉得查看天气预报都麻烦了,那查看邮件就不麻烦吗?哈哈哈

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

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

  1. 工作日下班之前发送整理后的文档到领导邮箱。(将文档放到指定文件夹,遍历发送即可)
  2. 服务器日志在早晨8点发送至我的邮箱,上班通勤路上可以瞄几眼前晚服务器有异常否。
  3. 以后有用到的场景再做补充。。。

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


前言:

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

如果你也觉得查天气麻烦,那看这篇文章就对了。
而这篇文章!!将详细讲解如何实现每日早上八点将最近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).json() # 因为返回的是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']
location = res['HeWeather6'][0]['basic']
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-1027 16 06:37 17:43
广州广州 2019-11-1128 18 06:38 17:43
广州广州 2019-11-1229 18 06:39 17:42
广州广州 2019-11-13 多云 28 17 06:39 17:42
广州广州 2019-11-1425 15 06:40 17:42
广州广州 2019-11-1526 15 06:40 17:42
广州广州 2019-11-1627 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文件的路径即可。
在这里插入图片描述
既然你学会了发送天气预报,那再加上每天发送一句语音或短视频如何? ,用定制的萝莉音,御姐音给对方发送天气预报信息的语音或者附加一段短视频,岂不美哉??点击下方文章链接跳转,学习diy语音以及获取短视频的方式吧。

  • diy定制自己的文字转语音
  • 获取抖音短视频

点击直达:【奇巧淫技】系列-Python实现 语音转文字??非也!!是文字转语音,DIY你想要的萝莉音!!!
点击直达:超简单!!!利用python下载无水印某音视频

以上,动手操作一番即可,就可以每天8点准时收到最新的天气预报信息了。
如果你懒得动手,可以尝试在留言里动手留下你的邮箱+城市反正我也不会给你弄
这次的分享就到这里。如果有什么疑问可以在下方留言哦。

版权声明
本文为[SunriseCai]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45081575/article/details/102886718

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database