【python邮件服务】每天早上定时定时发送天气给邮箱

壹:获取天气api

打开和风天气https://console.heweather.com/,在注册和登陆之后,点击应用管理新建应用,创建key就会有下列实例

一:api:

打开https://dev.heweather.com/docs/api/weather开发文档查看调用api

注意:分为免费版与商业版,一般我们个人使用只要用免费版就行了。
api:
1、现在:now(实况天气)
https://free-api.heweather.net/s6/weather/now?location=beijing&key=*******
2、预测:forecast(3-10天预报)
https://free-api.heweather.net/s6/weather/forecast?location=beijing&key=c49c31ad03b54c90b821af7c125ee0af
3、更多请看文档。。。

二:结果显示:

1、现在:now(实况天气)
{"HeWeather6":[{"basic":{"cid":"CN101010100","location":"北京","parent_city":"北京","admin_area":"北京","cnty":"中国","lat":"39.90498734","lon":"116.4052887","tz":"+8.00"},"update":{"loc":"2020-02-28 23:00","utc":"2020-02-28 15:00"},"status":"ok","now":{"cloud":"0","cond_code":"100","cond_txt":"晴","fl":"-1","hum":"80","pcpn":"0.0","pres":"1015","tmp":"2","vis":"15","wind_deg":"204","wind_dir":"西南风","wind_sc":"2","wind_spd":"9"}}]}
2、预测:forecast(3-10天预报)
{
    "HeWeather6": [
        {
            "basic": {
                "cid": "CN101010100",
                "location": "北京",
                "parent_city": "北京",
                "admin_area": "北京",
                "cnty": "中国",
                "lat": "39.90498734",
                "lon": "116.4052887",
                "tz": "+8.00"
            },
            "update": {
                "loc": "2020-02-28 22:57",
                "utc": "2020-02-28 14:57"
            },
            "status": "ok",
            "daily_forecast": [
                {
                    "cond_code_d": "100",
                    "cond_code_n": "101",
                    "cond_txt_d": "晴",
                    "cond_txt_n": "多云",
                    "date": "2020-02-28",
                    "hum": "67",
                    "mr": "09:12",
                    "ms": "22:21",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1011",
                    "sr": "06:48",
                    "ss": "18:05",
                    "tmp_max": "8",
                    "tmp_min": "0",
                    "uv_index": "8",
                    "vis": "25",
                    "wind_deg": "239",
                    "wind_dir": "西南风",
                    "wind_sc": "1-2",
                    "wind_spd": "2"
                },
                {
                    "cond_code_d": "104",
                    "cond_code_n": "104",
                    "cond_txt_d": "阴",
                    "cond_txt_n": "阴",
                    "date": "2020-02-29",
                    "hum": "44",
                    "mr": "09:38",
                    "ms": "23:20",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1016",
                    "sr": "06:46",
                    "ss": "18:06",
                    "tmp_max": "6",
                    "tmp_min": "1",
                    "uv_index": "1",
                    "vis": "25",
                    "wind_deg": "76",
                    "wind_dir": "东北风",
                    "wind_sc": "1-2",
                    "wind_spd": "7"
                },
                {
                    "cond_code_d": "101",
                    "cond_code_n": "100",
                    "cond_txt_d": "多云",
                    "cond_txt_n": "晴",
                    "date": "2020-03-01",
                    "hum": "33",
                    "mr": "10:06",
                    "ms": "00:00",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1020",
                    "sr": "06:45",
                    "ss": "18:07",
                    "tmp_max": "11",
                    "tmp_min": "-3",
                    "uv_index": "4",
                    "vis": "25",
                    "wind_deg": "3",
                    "wind_dir": "北风",
                    "wind_sc": "1-2",
                    "wind_spd": "3"
                }
            ]
        }
    ]
}

三:参数说明

我使用的是3-10天天气预报数据,天气预报包含的数据:日出日落、月升月落、最高最低温度、天气白天和夜间状况、风力、风速、风向、相对湿度、大气压强、降水量、降水概率、露点温度、紫外线强度、能见度等数据
参数 | 描述 | 示例值
------|--------|------
date| 预报日期| 2013-12-30
sr| 日出时间| 07:36
ss| 日落时间| 16:58
mr |月升时间 |04:47
ms |月落时间| 14:59
tmp_max| 最高温度| 4
tmp_min| 最低温度| -5
cond_code_d |白天天气状况代码| 100
cond_code_n| 夜间天气状况代码 |100
cond_txt_d| 白天天气状况描述 |晴
cond_txt_n |晚间天气状况描述 |晴
wind_deg| 风向360角度| 310
wind_dir |风向 |西北风
wind_sc |风力| 1-2
wind_spd |风速,公里/小时| 14
hum |相对湿度| 37
pcpn |降水量| 0
pop| 降水概率| 0
pres |大气压强| 1018
uv_index |紫外线强度指数| 3
vis |能见度,单位:公里 |10

贰:使用python编写代码

全局变量:

url = 'https://free-api.heweather.net/s6/weather/{}?location={}&key={}'
city1 = 'changsha'
key = '*****'

这里使用同一个url来拼接来获取当前与预测的天气

一:获取当前天气

通过url获取当前的天气信息,并且转换为json数据。

def getNowWeather():
    '''
    获取现在天气的信息
    :return: 格式化后的数据
    '''
    res = json.loads(requests.get(url.format("now",city1,key)).text)
    location = res['HeWeather6'][0]['basic']
    result = res['HeWeather6'][0]['now']
    city = location['parent_city'] + location['location']
    cond_code = result['cond_code']
    cond_txt = result['cond_txt']
    tmp = result['tmp']
    weather = {"city":city,"cond_txt":cond_txt,"cond_code":cond_code,"tmp":tmp}
    return weather

二:获取预测天气

获取的预测天气,得到的是天气数据转换为列表


def getForecastWeather():
    '''
    获取预测天气的信息
    :return: 格式化后的数据
    '''
    res = json.loads(requests.get(url.format("forecast",city1,key)).text)
    result = res['HeWeather6'][0]['daily_forecast']
    weatherData = []
    for data in result:
        date = data['date']
        cond_txt_d = data['cond_txt_d']
        cond_code_d = data['cond_code_d']
        tmp_max = data['tmp_max']
        tmp_min = data['tmp_min']
        sr = data['sr']
        ss = data['ss']
        weather = {"date":date,"cond_txt_d":cond_txt_d,"cond_code_d":cond_code_d,"tmp_max":tmp_max,"tmp_min":tmp_min,"sr":sr,"ss":ss}
        weatherData.append(weather)
    print(weatherData)
    return weatherData

三:发送邮件

首先,设置好域名、邮件标题,收发件人等信息。

    # 设置邮箱的域名
    HOST = 'smtp.qq.com'
    # 设置邮件标题
    TITLE= 'lomtom发给你的今日份天气预报信息,请查收'
    # 设置发件人邮箱
    FROM = '发件人邮箱'
    # 设置收件人邮箱
    TO = '收件人邮箱'        # 可以同时发送到多个邮箱,用逗号分开

然后,设置需要发送的信息,可以发一般的消息,我这里需要设置天气的样式,所以使用了html代码。

1、代码:
    mail_body = """这里是html代码"""
    message = MIMEText(mail_body, 'html', 'utf-8')

    # 设置邮件发件人
    message['From'] = FROM
    # 设置邮件收件人
    message['To'] = TO
    # 设置邮件标题
    message['Subject'] = TITLE

2、message打印
    Content - Type: text / html;
    charset = "utf-8"
    MIME - Version: 1.0
    Content - Transfer - Encoding: base64
    From: 发件人邮箱
    To: 收件人邮箱
    com
    Subject: =?utf - 8?b?5L
    uK5pel5Lu95aSp5rCU6aKE5oql5L + h5oGv77yM6K + 35
    p + l5pS2?=
    CiAgICA8cD7kvaDlpb3vvIzov5nmmK / kuIDku73mtYvor5VweXRob27oh6rliqjlj5HpgIHpgq7k

样式:

最后,设置邮件的相关信息并发送信息,一般来说,qq邮箱的端口为465,如果使用的是其他的邮箱,需要更换相应的端口。

    # 设置发件人邮箱的域名和端口,qq邮箱端口为465
    email_client = smtplib.SMTP_SSL(host=HOST,port=465)
    email_client.login(user=FROM,password='你自己的授权码')
    email_client.sendmail(FROM, TO.split(','),message.as_string())
    # 关闭邮件发送客户端
    email_client.close()

四:启动定时任务

python中有很多种方式来启动定时任务,我这里使用了schedule模块,我需要每天早上发送这个邮件,那么我需要设置一个定时任务,定时在每天早上七点半启动该任务,并且需要将schedule运行。

    # 每天在7:30的时候运行send_email
    schedule.every().days.at("13:05").do(send_email)
    while True:
        # 保持schedule一直运行,然后去查询上面的任务
        schedule.run_pending()

五:运行

ohup,使用nohup即可实现断开ssh连接命令也不会被终止。
一般我们可以在结尾加上"&"来将命令同时放入后台运行,也可用">new filename 2>&1"来更改缺省的重定向文件名。
用法:

1、后台运行
nohup python send_mail.py > send_mail.log 2>&1 &
2、查看进程
ps -ef | grep python
3、杀死进程
kill -s 9 27530

叁:效果图:

肆:作者有话

定时任务+邮箱服务这是不是很方便呢,在我们生活中,常需要这样的需求,作为单身的我们,每天定时给喜欢的人发送一条早安或者一条晚安信息,是不是很得女孩子的芳心呢,哈哈哈哈。


作者

1、作者个人网站
2、作者CSDN
3、作者博客园
4、作者简书

原文地址:https://www.cnblogs.com/lomtom/p/12383426.html

时间: 2024-10-05 08:55:13

【python邮件服务】每天早上定时定时发送天气给邮箱的相关文章

python邮件服务

文件形式的邮件 [python] view plaincopy #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header sender = '***' receiver = '***' subject = 'python email test' smtpserver = 'smtp.163.com' userna

屏幕监视专家 v1.0 定时录制屏幕动画发送到指定邮箱

ScreenWatcher v1.0功能:定时录制屏幕动画发送到指定邮箱,录制的动画为gif,可指定录制多长时间.指定几点直接开始录制,完全后台运行.作者:Bluefish 下载链接: http://pan.baidu.com/s/1kVpm4ib 密码: f3qu 使用说明: ①运行目录内的“设置.bat”,或者命令行下执行 ScreenWatcher.exe -set 可进入设置,如果直接运行则开始后台工作.   建议设置好参数,测试录像成功收到邮件以后再复制到目标电脑上运行. ②发信邮箱只

python邮件发送脚本

转自:http://phinecos.cnblogs.com/ 1 #!/usr/bin/python 2 #coding=utf-8 3 4 #@author:dengyike 5 #@date:2010-09-28 6 #@version:1.0 7 #@description: auto sending email with attachment file 8 9 import email 10 import mimetypes 11 from email.MIMEMultipart im

微信定时发送天气python3

爬取天气信息,定时发送天气给多人python3 1 import requests 2 from requests import exceptions 3 from urllib.request import urlopen 4 from bs4 import BeautifulSoup 5 import re 6 from wxpy import * 7 import schedule 8 import time 9 10 11 #bot=Bot(cache_path=True) #登陆网页微

电商邮件服务平台性能优化谈

从今年一月份开始,团队陆续完成了邮件服务的架构升级.新平台上线运行的过程中也发生了一系列的性能问题,即使很多看起来微不足道的点也会让整个系统运行得不是那么平稳,今天就将这段时间的问题以及解决方案统一整理下,希望能起到抛砖的作用,让读者在遇到类似问题的时候能多一个解决方案. 新平台上线后第一版架构如下: 这版架构上线后,我们遇到的第一个问题:数据库读写压力过大后影响整体服务稳定. 表现为: 1.数据库主库压力高,同时伴有大量的读,写操作. 2.远程服务接口性能不稳定,业务繁忙时数据库的插入操作延迟

spring-boot(六) 邮件服务

学习文章来自:springboot(十):邮件服务 简单使用 1.pom包配置 pom包里面添加spring-boot-starter-mail包引用 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> &

邮件服务

邮件语言:M4 SASL: v2 cyrus-sasl 认证框架 courier-authlib MTA: 邮件传输代理,SMTP服务器 sendmail,  UUCP qmail 数学家当程序员,他写的算法绝对是一流的 postfix 安全.兼容.效率高 exim Exchange (异步消息协作平台) 重量级 MDA: 邮件投递代理 procmail maildrop MRA: 邮件检索代理(pop3, imap4) cyrus-imap dovecot MUA: 邮件用户代理 Outloo

【初学菜鸟作--邮件服务的简单配置案例】

邮件服务器的配置以及使用 实验一:                    实验目的:简单搭建出邮件服务器并测试其可用性                    实验环境:DNS服务器一台,安装有Portfix的邮件服务器一台 实验步骤: 一.邮件的发送(SMTP) 1.在邮件服务器配置主机名,ip,并安装portfix并启动 [[email protected]~]# tail -2 /etc/sysconfig/network HOSTNAME=mail.tarena.com   [[email

邮件服务系列之三实现postfix+dovecot+sasl

MRA :cyrus-imap,dovecot dovecot 依赖MySQL客户端 pop3协议监听tcp110 imap4协议监听tcp143端口 以明文方式工作需结合sasl来实现邮件传输加密 dovecot支持四种协议: pop3 imap4 pop3s imaps 配置文件位于:/etc/dovecot.conf 带有sasl认证能力 支持两种邮箱格式: mbox一个文件存储所有邮件 maildir:一个文件存储一封邮件,所有邮件存储在一个目录中 安装: yum install dov