天气通知小助手的设计与实现
文章目录
一、 需求
目标功能:获取每天天气预报情况,如果当天预测预测下雨,则发送通知
设计语言: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:

最低0.47元/天 解锁文章
3109

被折叠的 条评论
为什么被折叠?



