基于Python的本地天气提醒助手开发实战



背景介绍

在日常生活中,天气变化直接影响我们的出行、穿衣和活动安排。虽然各大天气应用提供了丰富的功能,但有时我们更希望有一个轻量级、可定制、本地运行的天气提醒工具,能够在每天特定时间自动获取天气信息,并给出生活建议。本文将带你开发一个基于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在自动化和日常工具开发中的强大能力!



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注