天气通知小助手的设计与实现保姆级教程

天气通知小助手的设计与实现

一、 需求

目标功能:获取每天天气预报情况,如果当天预测预测下雨,则发送通知
设计语言:python

二、可行性方案调研

1. 天气信息获取途径

建议方式:和风天气API
选择理由:

  • 文档完整、清晰
  • 无需包月、按量付费,适合个人开发者,使用成本低

2. 通知方式

信息的通知方式有多种,例如短信、邮件、公众号等等,但是从实现角度来讲,不同的方式有不同的门槛,对于个人开发者可能不太友好。

  • 短信:目前国内的短信平台都需要备案,个人备案需要有已上架的APP、网站等信息,并且短信内容不能随意改变,需要按照一定的格式填写。如没有相关资质不建议使用此方式。
  • 公众号:个人公众号目前不支持主动推送,只能根据用户消息进行响应。适合用户主动查询的场景。
  • 邮件:实现简单,没有门槛,内容可以高度自定义,微信绑定QQ邮箱后,可是实现消息级别的通知,缺点就是会产生较多邮件,对强迫症不友好。

3. 实现方案

目标:建立一个定时与通知功能分离的系统,支持自定义参数。
定时系统:开源青龙定时项目,支持依赖管理,支持自定义脚本。
通知功能:基于Python实现参数可配置的脚本,包含天气查询与邮件发送功能。
在这里插入图片描述

三、系统搭建

1. 打开邮箱smtp设置

  • 进入SMTP设置,开启IMAP/SMTP服务
    在这里插入图片描述
    在这里插入图片描述

  • 获取授权密码,保存下来用于后面的代码编写
    在这里插入图片描述
    在这里插入图片描述

  • SMTP服务器地址
    在这里插入图片描述

2. 编写邮件发送脚本 emailSend.py

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import datetime
import processJson
# from apscheduler.schedulers.blocking import BlockingScheduler

# 邮件配置
SMTP_SERVER = "smtp.163.com"   # 发送方的邮箱服务器地址,我用的是163邮箱进行发送
SMTP_PORT = 465
SENDER_EMAIL = "88888888@163.com"  # 发送邮箱
SENDER_PASSWORD = "AAAAAAAABBBBBBBCC"  # 163邮箱获取的SMTP授权码,在邮箱网站的设置中获取
# RECEIVER_EMAIL =  "xxxxxxx@qq.com"  #  接收邮箱  如果想固定邮箱可以替换email参数,这里我把接收邮箱参数化

def send_email(subject,title,content,email):
    """构造并发送邮件"""
    # 1. 创建邮件对象
    msg = MIMEMultipart()
    msg["Subject"] = f"{
     
     subject} - {
     
     datetime.datetime.now().strftime('%Y-%m-%d')}"
    msg["From"] = SENDER_EMAIL
    msg["To"] = email
    
    # 2. 添加邮件正文(支持HTML)
    body = f"""
    <h2 style="text-align:center">{
     
     title}</h2>
    {
     
     content}
    """
    msg.attach(MIMEText(body, "html"))
    
    # 3. 发送邮件
    try:
        with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
            server.login(SENDER_EMAIL, SENDER_PASSWORD)
            server.sendmail(SENDER_EMAIL, email, msg.as_string())
        print("邮件发送成功!")
    except Exception as e:
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值