【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱「建议收藏」

【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱「建议收藏」将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。也可以说是一个小人工智障。思路可以运用在不同地方,主要介绍的是思路。

大家好,又见面了,我是你们的朋友全栈君。

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

补充

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

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点准时收到最新的天气预报信息了。
如果你懒得动手,可以尝试在留言里动手留下你的邮箱+城市反正我也不会给你弄
这次的分享就到这里。如果有什么疑问可以在下方留言哦。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154083.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月28日 上午9:36
下一篇 2022年6月28日 上午9:46


相关推荐

  • 反射型XSS案例[通俗易懂]

    反射型XSS案例[通俗易懂]原理:可能存在反射型xss的功能(点):url参数,搜索框…挖掘方法:需要url中有可以修改的参数过滤方法:在后端使用函数过滤标签

    2022年5月3日
    78
  • linux如何挂载硬盘linux服务器上挂载磁盘(图文详解)

    linux如何挂载硬盘linux服务器上挂载磁盘(图文详解)liunx 磁盘挂载

    2026年3月16日
    2
  • 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp这些都是什么意思啊?

    汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp这些都是什么意思啊?eax ebx ecx edx esi edi ebp esp 等都是 X86 汇编语言中 CPU 上的通用寄存器的名称 是 32 位的寄存器 如果用 C 语言来解释 可以把这些寄存器当作变量看待 比方说 addeax 2 nbsp nbsp nbsp 可以认为是给变量 eax 加上 2 这样的一个值 这些 32 位寄存器有多种用途 但每一个都有 专长 有各自的特别之处 EAX

    2026年3月18日
    1
  • Ztree简介

    Ztree简介介绍 zTree 是利用 JQuery 的核心代码 实现一套能完成大部分常用功能的 Tree 插件 兼容 IE FireFox Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 支持 JSON 数据 支持一次性静态生成和 Ajax 异步加载两种方式 支持多种事件响应及反馈 支持 Tree 的节点移动 编辑 删除 支持任意更换皮肤 个性化图

    2025年11月1日
    4
  • 网站名称及网址_常用的热门网站

    网站名称及网址_常用的热门网站varlist={"status":1,"info":"100%","data":[{"id":"2205","name":"人人网","logo":"http://reg007.u.qiniudn.com/app/renren.jp

    2022年10月5日
    7
  • 姿态传感器mpu6050_六轴陀螺仪原理

    姿态传感器mpu6050_六轴陀螺仪原理目录标题1.前言(闲话)2.陀螺仪及MPU6050模块介绍3.硬件连接4.MPU60505.软件代码————官方自带库6.软件代码————其他代码7.学习补充(代码看不懂的时候可以来看一下)8.效果展示9.参考链接10.完整版代码链接1.前言(闲话)正在准备今年的国赛,打算做一个PID控制题目,于是就选了一个相对比较简单的风力摆,2.陀螺仪及MPU6050模块介绍3.硬件连接4.MPU60505.软件代码————官方自带库6.软件代码————其他代码7.学习补充(代码看不懂的时候可以来看一下

    2025年8月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号