本文主要是介绍基于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实现智能天气提醒助手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!