python实现智能语音天气预报

作者:飞奔的帅帅 时间:2023-05-13 14:10:27 

python编写的语音天气预报

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

1、获取天气数据

1、输入要查询天气的城市

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

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

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

2、输出当天天气数据

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

3,语音播报当天天气

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

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

3,利用playsound模块播放语音

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

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

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

5、代码


#导入必要模块
import urllib.parse
import urllib.request
import gzip
import json
import playsound
from aip import AipSpeech
import matplotlib.pyplot as plt
import re
#设置参数,图片显示中文字符,否则乱码
plt.rcParams['font.sans-serif']=['SimHei']
#定义获取天气数据函数
def Get_weather_data():
 print('------天气查询------')
 city_name = input('请输入要查询的城市名称:')
 url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city_name)
 weather_data = urllib.request.urlopen(url).read()
 # 读取网页数据
 weather_data = gzip.decompress(weather_data).decode('utf-8')
 # #解压网页数据
 weather_dict = json.loads(weather_data)
 return weather_dict
#定义当天天气输出格式
def Show_weather(weather_data):
 weather_dict = weather_data
 if weather_dict.get('desc') == 'invilad-citykey':
   print('你输入的城市有误或未收录天气,请重新输入...')
 elif weather_dict.get('desc') == 'OK':
   forecast = weather_dict.get('data').get('forecast')
   print('日期:', forecast[0].get('date'))
   print('城市:', weather_dict.get('data').get('city'))
   print('天气:', forecast[0].get('type'))
   print('温度:', weather_dict.get('data').get('wendu') + '℃ ')
   print('高温:', forecast[0].get('high'))
   print('低温:', forecast[0].get('low'))
   print('风级:', forecast[0].get('fengli').split('<')[2].split(']')[0])
   print('风向:', forecast[0].get('fengxiang'))
   weather_forecast_txt = '您好,您所在的城市%s,' \
               '天气%s,' \
               '当前温度%s,' \
               '今天最高温度%s,' \
               '最低温度%s,' \
               '风级%s,' \
               '温馨提示:%s' % \
               (
                 weather_dict.get('data').get('city'),
                 forecast[0].get('type'),
                 weather_dict.get('data').get('wendu'),
                 forecast[0].get('high'),
                 forecast[0].get('low'),
                 forecast[0].get('fengli').split('<')[2].split(']')[0],
                 weather_dict.get('data').get('ganmao')
               )
   return weather_forecast_txt,forecast
#定义语音播报今天天气状况
def Voice_broadcast(weather_forcast_txt):
 weather_forecast_txt = weather_forcast_txt
 APP_ID = 你的百度语音APP_ID
 API_KEY = 你的百度语音API_KEY
 SECRET_KEY = 你的百度语音SECRET_KEY
 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
 print('语音提醒:', weather_forecast_txt)
 #百度语音合成
 result = client.synthesis(weather_forecast_txt, 'zh', 1, {'vol': 5})
 if not isinstance(result, dict):
   with open('sound2.mp3', 'wb') as f:
     f.write(result)
     f.close()
 #playsound模块播放语音
 playsound.playsound(r'C:\Users\ban\Desktop\bsy\sound2.mp3')
#未来四天天气变化图
def Future_weather_states(forecast):
 future_forecast = forecast
 dict={}
 #获取未来四天天气状况
 for i in range(5):
   data = []
   date=future_forecast[i]['date']
   date = int(re.findall('\d+',date)[0])
   data.append(int(re.findall('\d+',future_forecast[i]['high'])[0]))
   data.append(int(re.findall('\d+', future_forecast[i]['low'])[0]))
   data.append(future_forecast[i]['type'])
   dict[date] = data
 data_list = sorted(dict.items())
 date=[]
 high_temperature = []
 low_temperature = []
 for each in data_list:
   date.append(each[0])
   high_temperature.append(each[1][0])
   low_temperature.append(each[1][1])
 fig = plt.plot(date,high_temperature,'r',date,low_temperature,'b')
 plt.xlabel('日期')
 plt.ylabel('℃')
 plt.legend(['高温','低温'])
 plt.xticks(date)
 plt.title('最近几天温度变化趋势')
 plt.show()
#主函数
if __name__=='__main__':
 weather_data = Get_weather_data()
 weather_forecast_txt, forecast = Show_weather(weather_data)
 Future_weather_states(forecast)
 Voice_broadcast(weather_forecast_txt)

6、最终效果

python实现智能语音天气预报

来源:https://blog.csdn.net/ustbbsy/article/details/79486961

标签:python,语音,天气预报
0
投稿

猜你喜欢

  • Flask框架中request、请求钩子、上下文用法分析

    2022-04-17 23:05:08
  • Mysql 查询数据库容量大小的方法步骤

    2024-01-20 13:56:35
  • 如何优化Mysql千万级快速分页

    2024-01-17 03:37:47
  • 深入了解Python中的变量类型标注

    2023-02-01 09:06:37
  • Python关于print的操作(倒计时、转圈显示、进度条)

    2022-08-19 07:26:58
  • 使用mybatis框架连接mysql数据库的超详细步骤

    2024-01-13 06:12:08
  • Linux 安装二进制MySQL 及 破解MySQL密码的方法

    2024-01-24 16:12:38
  • MySQL中or语句用法示例

    2024-01-17 17:21:46
  • Django admin管理工具TabularInline类用法详解

    2021-05-10 16:16:26
  • 解决MySQL安装重装时出现could not start the service mysql error:0问题的方法

    2024-01-23 01:17:00
  • python tqdm库的使用

    2023-10-30 22:32:44
  • 是时候不用考虑基于字体大小(em)的设计了

    2009-10-24 13:25:00
  • PyQt中实现自定义工具提示ToolTip的方法详解

    2023-11-09 13:34:56
  • Python操作列表的常用方法分享

    2021-06-02 12:41:29
  • centos yum php 7.x 无需删除升级的方法

    2023-11-20 14:48:08
  • sql2005 远程连接问题解决方法

    2024-01-19 13:37:42
  • Python Django框架单元测试之文件上传测试示例

    2022-02-26 23:50:51
  • vue2.0 可折叠列表 v-for循环展示的实例

    2024-04-28 09:32:22
  • 细说Go语言中空结构体的奇妙用途

    2024-04-23 09:46:09
  • apache和nginx下vue页面刷新404的解决方案

    2024-04-26 17:37:16
  • asp之家 网络编程 m.aspxhome.com