用Python定时发送天气邮件

  

当然可以,下面我将为你讲解如何用Python定时发送天气邮件的完整攻略,包括几个重要步骤:

  1. 获取天气信息

由于需要发送天气信息邮件,首先我们需要获取天气信息。目前常见的获取天气信息的方式是使用公开API,比如百度、天气网、心知天气等。其中,心知天气相对稳定且提供的天气数据丰富,而且提供了10天内每天24小时的天气信息,非常适合用来制作天气信息邮件。

下面是使用心知天气的API获取天气信息的示例代码:

import requests

# 发送网络请求,获取实时天气信息
def get_weather(location):
    url = 'https://api.seniverse.com/v3/weather/daily.json'
    params = {
        'key': 'XXXXXXXXXXXXXXXXXXXXX',  # 这里是你申请的心知天气API的key
        'location': location,
        'language': 'zh-Hans',
        'unit':'c',
        'start': 0,
        'days': 1
    }
    result = requests.get(url, params=params).json()
    # 解析数据
    weather_data = result['results'][0]['daily'][0]
    weather_info = {
        'text_day': weather_data['text_day'],  # 天气状况
        'high': weather_data['high'],  # 最高温度
        'low': weather_data['low'],  # 最低温度
        'wind_direction': weather_data['wind_direction'],  # 风向
        'wind_scale': weather_data['wind_scale']  # 风力
    }
    return weather_info
  1. 编写邮件正文

获取到天气数据后,我们需要对邮件正文进行美化处理,这样发送出去的邮件才会更加美观。可以使用HTML/CSS来实现邮件正文的美化。下面是一个示例:

def get_email_content(weather_info, to_addr):
    # 邮件正文HTML模板
    html = """
    <html>
        <head>
            <style>
                /* 邮件正文样式 */
                #main {
                    width: 600px;
                    margin: 0 auto;
                    font-size: 16px;
                    font-family: 'Microsoft YaHei', sans-serif;
                }
                #title {
                    margin: 30px auto;
                    text-align: center;
                    font-size: 30px;
                    color: #333;
                }
                #content {
                    margin-top: 50px;
                }
                #weather {
                    display: inline-block;
                    width: 200px;
                    height: 200px;
                    margin: 0 auto;
                    text-align: center;
                    font-size: 20px;
                    color: #333;
                    background-color: #f9e9f0;
                    border-radius: 50%;
                    line-height: 200px;
                }
                #weather p {
                    font-size: 30px;
                    margin-bottom: 20px;
                }
                #info {
                    margin-top: 50px;
                    text-align: center;
                    font-size: 26px;
                    color: #333;
                }
            </style>
        </head>
        <body>
            <div id="main">
                <div id="title">天气预报</div>
                <div id="content">
                    <div id="weather">
                        <p>{text_day}</p>
                        <p>{high}/{low}℃</p>
                    </div>
                    <div id="info">
                        {wind_direction}&nbsp;{wind_scale}级
                    </div>
                </div>
            </div>
        </body>
    </html>
    """
    # 替换HTML模板中的变量
    content = html.format(
        text_day=weather_info['text_day'],
        high=weather_info['high'],
        low=weather_info['low'],
        wind_direction=weather_info['wind_direction'],
        wind_scale=weather_info['wind_scale'])
    # 构建邮件正文
    msg = MIMEText(content, 'html', 'utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = Header('今日天气预报', 'utf-8').encode()
    return msg
  1. 发送邮件

使用Python内置的smtplib库,可以方便地实现邮件的发送。这里要注意,使用SMTP发送邮件需要提供邮箱的账号和密码,所以为了安全起见,建议先通过Python的getpass模块获取密码。

下面是一个示例:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from getpass import getpass

# 发送天气信息邮件
def send_email(msg, to_addr):
    # 设置SMTP服务器地址和端口号
    smtp_server = 'smtp.163.com'
    smtp_port = 465
    # 获取邮箱账号密码
    from_addr = 'xxxxx@163.com' # 这里是你自己的邮箱地址
    password = getpass('请输入邮箱密码:')
    # 发送邮件
    server = smtplib.SMTP_SSL(smtp_server, smtp_port)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()

# 获取天气信息及接收邮件的地址,然后发送邮件
def main():
    location = 'beijing' # 这里是你想查询天气的城市名,比如北京、上海等
    to_addr = 'xxxxx@qq.com' # 这里是邮件接收者地址
    weather_info = get_weather(location)
    msg = get_email_content(weather_info, to_addr)
    send_email(msg, to_addr)

if __name__ == '__main__':
    main()

上述代码中,smtp_serversmtp_port表示SMTP服务器地址和端口号,这里以QQ邮箱为例使用其SMTP服务,因此SMTP服务器地址是'smtp.qq.com',端口号是465。由于QQ邮箱开启了SSL加密,因此使用SMTP_SSL()方法,第一个参数是SMTP服务器地址,第二个参数是端口号。from_addr表示发送者邮箱地址,to_addr表示接收者邮箱地址,这里以QQ邮箱为例。

示例1:北京市当天天气

如果想查询北京市当天天气,只需要修改location变量即可,如下所示:

location = 'beijing' # 这里是你想查询天气的城市名,比如北京、上海等

示例2:深圳市未来7天天气

如果想查询深圳市未来7天天气,只需要修改days变量即可,如下所示:

params = {
    'key': 'XXXXXXXXXXXXXXXXXXXXX',  # 这里是你申请的心知天气API的key
    'location': location,
    'language': 'zh-Hans',
    'unit':'c',
    'start': 0,
    'days': 7 # 一般情况下 days 的取值范围为 1-15
}

以上就是用Python定时发送天气邮件的完整攻略,希望对你有所帮助!

相关文章