基于Python实现智能天气提醒助手

2025-05-28 15:50

本文主要是介绍基于Python实现智能天气提醒助手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下...

项目概述

今天分享一个实用的python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用。助手能获取实时天气和24小时预报,并通过AI生成贴心的生活建议,最后推送通知给用户。

核心功能

实时天气查询 - 通过阿里云API获取当前天气数据

天气预报获取 - 查询24小时天气变化情况

AI智能建议 - 基于天气数据生成人文关怀建议

消息推送 - 通过Bark服务发送通知到IOS设备

技术实现

1. 天气API集成

def now_weather():
    try:
        host = 'https://ali-weather.showapi.com'
        path = '/hour24'
        appcode = os.getenv("AppCode")
        querys = 'area=xxx'
        url = host + path + '?' + querys
        headers = {'Authorization': 'APPCODE ' + appcode}
        resp = requests.get(url, headers=headers)
        resp.raise_for_status()
        return resp.json()

2. AI建议生成

def get_ai_advice(prompt):
    try:
        client = OpenAI(
            base_url=os.getenv("BaseURL"),
            api_key=os.getenv("APIKEY")
        )
        response = client.chat.completions.create(
            model=os.getenv("MODEL"),
            messages=[
                {"role": "assistant", "content": "你是一个天气助手..."},
                {"role": "user", "content": prompt},
            ],
        )
        return response.choices[0].message.content

3. 消息推送

def bark(title: str, content: str) -> None:
    BARK_PUSH = os.getenv("BARK_PUSH")
    url = f'https://api.day.app/{BARK_PUSH}' if not BARK_PUSH.startswith("http") else BARK_PUSH
    data = {"title": title, "body": content}
    response = requests.post(url, data=json.dumps(data), headers=headers, timeout=15).json()

环境配置

使用时需要配置以下环境变量:

AppCode        # 阿里云API的AppCode
BaseURL        # OpenAI API地址
APIKEY         # OpenAI API密钥
MODEL          # 使用的AI模型
BARK_PUSH     php # Bark推送地址或设备码

使用方法

if __name__ == "__main__":
    advice = main()  # 获取天气建议
    bark("天气情况", advice)  # 推送通知

完整代码

import logging
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 配置日志
logger = logging.getLogger('weather')
import requests, json, os, re
from datetime import datetime
from openai import OpenAI

def now_weather():
    try:
        host = 'https://ali-weather.showapi.com'
        path = '/hour24'
        appcode = os.getenv("AppCode")
        querys = 'area=xxx'
        url = host + path + '?' + querys
        headers = {
            'Authorization': 'APPCODE ' + appcode
        }
        resp = requests.get(url, headers=headers)
        resp.raise_for_status()
        return resp.json()
    except Exception as e:
        log.error(f"获取当前天气失败: {str(e)}")
        return None

def get_hour24():
    try:
        host = 'https://ali-weather.showapi.com'
        path = '/hour24'
        appcode = os.getenv("AppCode")
        querys = 'area=xxx'
        url = host + path + '?' + querys
        headers = {
            'Authorization': 'pythonAPPCODE ' + appcode
        }
        resp = requests.get(url, headers=headers)
        resp.raise_for_status()
        return resp.json()
    except Exception as e:
        log.error(f"获取24小时天气失败: {str(e)}")
        return None
   
def current_time():
    datiem = datetime.now()
    return datiem.strftime("%Y-%m-%d %H:%M:%S")

def get_ai_advice(prompt):
    try:
        client = OpenAI(
            base_url=os.China编程getenv("BaseURL"),  # 使用配置的base_url
            api_key=os.getenv("APIKEY")  # 使用配置的api_key
        )
        response = client.chat.completions.create(
            model=os.getenv("MODEL"),
            messages=[
                {"role": "assistant", "content": "你是一个天气助手,根据实际数据,给用户精准的天气数据总结和人文化的生活建议。例如:明天天气小雨,和今天温差较大,注意保暖,同时伴有大风,注意安全,睡觉前记得关紧门窗。"},
                {
                    "role": "user",
                    "content": prompt,
                },
            ],
        )
        return response.choices[0].message.content
    except Exception as e:
        log.error(f"获取AI建议失败: {str(e)}")
        return "无法获取AI建议"


def main():
    current_weather = now_weather()
    forecast_weather = get_hour24()
    
    promot = f"""
    当前时编程China编程间是:{current_time()}
    当前天气情况:{current_weather}
    24小时天气预报:{forecast_weather}
    注意:
    1. 请根据实际数据,给用户精准的天气数据总结和人文化的生活建议。
    2. 请不要使用markdown格式输出。尽量口语化
    """
    print(promot)
    return get_ai_advice(promot)


push_config = {
    'BARK_PUSH': '',                    # bark IP 或设备码,例:https://api.day.app/DxHcxxxxxRxxxxxxcm/
    'BARK_ARCHIVE': '',                 # bark 推送是否存档
    'BARK_GROUP': '',                   # bark 推送分组
    'BARK_SOUND': '',                   # bark 推送声音
    'BARK_ICON': '',                    # bark 推送图标
    'BARK_LEVEL': '',                   # bark 推送时效性
    'BARK_URL': '',                     # bark 推送跳转URL
}


def bark(title: str, content: str) -> None:
    """
    使用 bark 推送消息。
    """
    BARK_PUSH = os.getenv("BARK_PUSH")
    if not BARK_PUSH:
        print("bark 服务的 BARK_PUSH 未设置!!\n取消推送")
        return
    print("bark 服务启动")

    if BARK_PUSH.startswith("http"):
        url = f'{BARK_PUSH}'
    else:
        url = f'https://api.day.app/{BARK_PUSH}'

    bark_params = {
        "BARK_ARCHIVE": "isArchive",
        "BARK_GROUP": "group",
        "BARK_SOUND": "sound",
        "BARK_ICON": "icon",
        "BARK_LEVEL": "level",
        "BARK_URL": "url",
    }
    data = {
        "title": title,
        "body": content,
    }
    for pair in filter(
        lambda pairs: pairs[0].startswith("BARK_")
        and pairs[0] != "BARK_PUSH"
        and pairs[1]
        and bark_params.get(pairs[0]),
        push_config.items(),
    ):
        data[bark_params.get(pair[0])] = pair[1]
    headers = {"Content-Type": "application/json;charset=utf-8"}
    response = requests.post(
        url=url, data=json.dumps(data), headers=headers, timeout=15
    ).json()

    if response["code"] == 200:
        print("bark 推送成功!")
    else:
        print("bark 推送失败!")


advice = main()
print(advice)
bark("天气情况",advice)

项目特点

模块化设计 - 各功能解耦,便于维护和扩展

异常处理 - 关键操作都有try-catch保护

环境变量配置 - 敏感信息不写死在代码中

轻量级 - QWbXxXSczf不依赖复杂框架,Python原生实现

这个天气助手可以方便地集成到各种定时任务系统中,为你的日常生活提供贴心的天气提醒服务。根据实际需要,你还可以扩展更多的天气API或消息推送方式。

以上就是基于Python实现智能天气提醒助手的详细内容,更多关于Python智能天气提醒的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于基于Python实现智能天气提醒助手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154827

相关文章

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构