背景介绍
在日常生活中,天气变化直接影响我们的出行、穿衣和活动安排。虽然各大天气应用提供了丰富的功能,但有时我们更希望有一个轻量级、可定制、本地运行的天气提醒工具,能够在每天特定时间自动获取天气信息,并给出生活建议。本文将带你开发一个基于Python的本地天气提醒助手,具备以下功能:
- 从命令行设置城市和提醒时间
- 定时查询天气信息
- 根据天气生成生活建议
- 弹出本地桌面通知
- 记录操作日志
该项目适合中级以下Python开发者,涉及网络请求、定时任务、本地通知和文件操作等实用技术点,具有良好的学习和实践价值。
思路分析
1. 获取用户输入
用户通过命令行输入城市名和提醒时间,程序将保存这些设置。
2. 查询天气信息
使用OpenWeatherMap API获取指定城市的天气数据(如天气状况、温度等)。
3. 生成生活建议
基于获取的天气数据,使用预定义规则(如雨天提醒带伞,晴天建议防晒)生成建议。
4. 定时任务
使用schedule库设置定时任务,在指定时间执行天气查询和提醒操作。
5. 本地通知
使用plyer库实现跨平台的桌面通知功能,提醒用户天气和建议。
6. 日志记录
将每次提醒的信息记录到本地日志文件中,便于后续查看和调试。
代码实现(Python)
安装依赖
在开始前,请确保已安装以下Python库:
pip install schedule requests plyer
1. 获取天气数据
import requests
import datetime
def get_weather(city):
"""
从OpenWeatherMap API获取天气信息
"""
api_key = "your_openweathermap_api_key" # 替换为你的API密钥
base_url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric&lang=zh_cn"
response = requests.get(base_url)
data = response.json()
if data["cod"] == 200:
weather = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"weather": weather,
"temp": temp
}
else:
print("获取天气失败")
return None
2. 生成生活建议
def generate_advice(weather, temp):
"""
根据天气和温度生成生活建议
"""
advice = ""
if "雨" in weather:
advice = "建议出门带伞,注意防雨。"
elif "晴" in weather:
advice = "建议出门带太阳镜,注意防晒。"
elif "多云" in weather:
advice = "天气多变,建议带外套。"
else:
advice = "天气一般,注意保暖。"
if temp < 10:
advice += "气温较低,建议穿厚外套。"
elif 10 <= temp < 20:
advice += "气温适中,建议穿毛衣。"
else:
advice += "气温较高,建议穿短袖。"
return advice
3. 本地通知
from plyer import notification
def show_notification(city, weather, temp, advice):
"""
使用plyer显示本地桌面通知
"""
message = f"{city}今天天气{weather},气温{temp}°C,建议:{advice}"
notification.notify(
title="天气提醒",
message=message,
app_name="天气助手",
timeout=10
)
4. 日志记录
def log_weather(city, weather, temp, advice):
"""
将天气信息写入日志文件
"""
log_file = "weather_log.txt"
timestamp = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M]")
log_entry = f"{timestamp} {city}天气:{weather},{temp}°C,提醒:{advice}\n"
with open(log_file, "a", encoding="utf-8") as f:
f.write(log_entry)
5. 定时任务设置
import schedule
import time
def job(city, reminder_time):
"""
定时任务执行函数
"""
weather_data = get_weather(city)
if weather_data:
advice = generate_advice(weather_data["weather"], weather_data["temp"])
show_notification(city, weather_data["weather"], weather_data["temp"], advice)
log_weather(city, weather_data["weather"], weather_data["temp"], advice)
def setup_reminder(city, reminder_time):
"""
设置定时任务
"""
schedule.every().day.at(reminder_time).do(job, city, reminder_time)
print(f"已设置每日 {reminder_time} 提醒 {city} 天气")
while True:
schedule.run_pending()
time.sleep(1)
6. 主程序入口
def main():
"""
主程序:从命令行读取用户输入
"""
import sys
if len(sys.argv) != 3:
print("用法: python weather_reminder.py [城市] [提醒时间]")
print("示例: python weather_reminder.py 北京 08:00")
return
city = sys.argv[1]
reminder_time = sys.argv[2]
setup_reminder(city, reminder_time)
if __name__ == "__main__":
main()
示例运行
在命令行中运行:
python weather_reminder.py 北京 08:00
输出效果:
- 每天08:00弹出桌面通知:“北京今天天气晴朗,气温20°C,建议出门带太阳镜。”
- 日志文件
weather_log.txt中记录:“[2025-12-15 08:00] 北京天气:晴,20°C,提醒:建议出门带太阳镜。”
项目亮点
- 实用性强:适合个人日常使用,提升生活效率。
- 模块化设计:各功能模块独立,便于扩展与维护。
- 跨平台支持:使用
plyer实现跨平台通知,兼容Windows、Linux、macOS。 - 学习价值高:涉及网络请求、定时任务、本地通知、日志记录等核心编程技能。
- 无需复杂环境:仅依赖Python标准库和少量第三方库,本地即可运行。
总结
通过本项目,我们实现了一个基于Python的本地天气提醒助手,它不仅能够定时获取天气信息,还能根据天气生成个性化建议,并通过本地通知提醒用户。整个项目结构清晰,技术点丰富,适合Python中级以下开发者学习和实践。
你可以进一步扩展该项目,比如:
- 支持多城市提醒
- 使用GUI界面(如Tkinter)
- 集成邮件发送功能
- 使用更复杂的AI模型生成建议(如调用本地LLM)
希望你通过本项目,感受到Python在自动化和日常工具开发中的强大能力!