zoukankan      html  css  js  c++  java
  • python实现智能语音天气预报

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者: 飞奔的帅帅

    PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

    http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

    本系统主要包括四个函数:

    1、获取天气数据

    • 输入要查询天气的城市

    • 利用urllib模块向中华万年历天气api接口请求天气数据

    • 利用gzip解压获取到的数据,并编码utf-8

    • 利用json转化成python识别的数据,返回为天气预报数据复杂形式的字典(字典中的字典)

    2、输出当天天气数据

    • 格式化输出当天天气,包括:天气状况,此时温度,最高温度、最低温度,风级,风向等。

    3,语音播报当天天气

    • 创建要输出的语音文本(weather_forecast_txt)

    • 利用百度的语音合成模块AipSpeech,合成语音文件

    • 利用playsound模块播放语音

    4、未来几天温度变化趋势

    • 创建未来几天高低温数据的字典

    • 利用matplotlib模块,图形化温度变化趋势

    5、代码

      1 #导入必要模块
      2 import urllib.parse
      3 import urllib.request
      4 import gzip
      5 import json
      6 import playsound
      7 from aip import AipSpeech
      8 import matplotlib.pyplot as plt
      9 import re
     10 #设置参数,图片显示中文字符,否则乱码
     11 plt.rcParams['font.sans-serif']=['SimHei']
     12 #定义获取天气数据函数
     13 def Get_weather_data():
     14   print('------天气查询------')
     15   city_name = input('请输入要查询的城市名称:')
     16   url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city_name)
     17   weather_data = urllib.request.urlopen(url).read()
     18   # 读取网页数据
     19   weather_data = gzip.decompress(weather_data).decode('utf-8')
     20   # #解压网页数据
     21   weather_dict = json.loads(weather_data)
     22   return weather_dict
     23 #定义当天天气输出格式
     24 def Show_weather(weather_data):
     25   weather_dict = weather_data
     26   if weather_dict.get('desc') == 'invilad-citykey':
     27     print('你输入的城市有误或未收录天气,请重新输入...')
     28   elif weather_dict.get('desc') == 'OK':
     29     forecast = weather_dict.get('data').get('forecast')
     30     print('日期:', forecast[0].get('date'))
     31     print('城市:', weather_dict.get('data').get('city'))
     32     print('天气:', forecast[0].get('type'))
     33     print('温度:', weather_dict.get('data').get('wendu') + '')
     34     print('高温:', forecast[0].get('high'))
     35     print('低温:', forecast[0].get('low'))
     36     print('风级:', forecast[0].get('fengli').split('<')[2].split(']')[0])
     37     print('风向:', forecast[0].get('fengxiang'))
     38     weather_forecast_txt = '您好,您所在的城市%s,' 
     39                 '天气%s,' 
     40                 '当前温度%s,' 
     41                 '今天最高温度%s,' 
     42                 '最低温度%s,' 
     43                 '风级%s,' 
     44                 '温馨提示:%s' % 
     45                 (
     46                   weather_dict.get('data').get('city'),
     47                   forecast[0].get('type'),
     48                   weather_dict.get('data').get('wendu'),
     49                   forecast[0].get('high'),
     50                   forecast[0].get('low'),
     51                   forecast[0].get('fengli').split('<')[2].split(']')[0],
     52                   weather_dict.get('data').get('ganmao')
     53                 )
     54     return weather_forecast_txt,forecast
     55 #定义语音播报今天天气状况
     56 def Voice_broadcast(weather_forcast_txt):
     57   weather_forecast_txt = weather_forcast_txt
     58   APP_ID = 你的百度语音APP_ID
     59   API_KEY = 你的百度语音API_KEY
     60   SECRET_KEY = 你的百度语音SECRET_KEY
     61   client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
     62   print('语音提醒:', weather_forecast_txt)
     63   #百度语音合成
     64   result = client.synthesis(weather_forecast_txt, 'zh', 1, {'vol': 5})
     65   if not isinstance(result, dict):
     66     with open('sound2.mp3', 'wb') as f:
     67       f.write(result)
     68       f.close()
     69   #playsound模块播放语音
     70   playsound.playsound(r'C:UsersanDesktopsysound2.mp3')
     71 #未来四天天气变化图
     72 def Future_weather_states(forecast):
     73   future_forecast = forecast
     74   dict={}
     75   #获取未来四天天气状况
     76   for i in range(5):
     77     data = []
     78     date=future_forecast[i]['date']
     79     date = int(re.findall('d+',date)[0])
     80     data.append(int(re.findall('d+',future_forecast[i]['high'])[0]))
     81     data.append(int(re.findall('d+', future_forecast[i]['low'])[0]))
     82     data.append(future_forecast[i]['type'])
     83     dict[date] = data
     84   data_list = sorted(dict.items())
     85   date=[]
     86   high_temperature = []
     87   low_temperature = []
     88   for each in data_list:
     89     date.append(each[0])
     90     high_temperature.append(each[1][0])
     91     low_temperature.append(each[1][1])
     92   fig = plt.plot(date,high_temperature,'r',date,low_temperature,'b')
     93   plt.xlabel('日期')
     94   plt.ylabel('')
     95   plt.legend(['高温','低温'])
     96   plt.xticks(date)
     97   plt.title('最近几天温度变化趋势')
     98   plt.show()
     99 #主函数
    100 if __name__=='__main__':
    101   weather_data = Get_weather_data()
    102   weather_forecast_txt, forecast = Show_weather(weather_data)
    103   Future_weather_states(forecast)
    104   Voice_broadcast(weather_forecast_txt)

    6、最终效果

    在这里插入图片描述

    以上这篇python实现智能语音天气预报就是小编分享给大家的全部内容了,希望能给大家一个参考

  • 相关阅读:
    线程池、进程池(concurrent.futures模块)和协程
    python中socket、进程、线程、协程、池的创建方式和应用场景
    IO多路复用和local概念
    pymysql模块
    HTML初识
    CSS之选择器
    CSS之样式属性(背景固定、圆形头像、模态框)
    字符串格式的方法%s、format和python3.6新特性f-string和类型注解
    common-pool2 使用
    apache-common pool的使用
  • 原文地址:https://www.cnblogs.com/Qqun821460695/p/12016471.html
Copyright © 2011-2022 走看看