开发者

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

目录
  • 项目概述
  • 核心功能
  • 技术实现
    • 1. 天气API集成
    • 2. AI建议生成
    • 3. 消息推送
  • 环境配置
    • 使用方法
      • 完整代码
        • 项目特点

          项目概述

          今天分享一个实用的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.编程客栈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"""
              当前时编程客栈间是:{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智能天气提醒的资料请关注编程客栈(www.devze.com)其它相关文章!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜