python实现智能语音天气预报


Posted in Python onDecember 02, 2019

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实现智能语音天气预报

以上这篇python实现智能语音天气预报就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
python文件操作的简单方法总结
Nov 07 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
如何使用Pytorch搭建模型
Oct 26 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
python自动化八大定位元素讲解
Jul 09 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 #Python
python 实现二维列表转置
Dec 02 #Python
python列表推导式入门学习解析
Dec 02 #Python
Python 矩阵转置的几种方法小结
Dec 02 #Python
numpy.transpose()实现数组的转置例子
Dec 02 #Python
Python中低维数组填充高维数组的实现
Dec 02 #Python
python函数声明和调用定义及原理详解
Dec 02 #Python
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
详解JavaScript函数
2015/12/01 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
解决python "No module named pip" 的问题
2018/10/13 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
python实现字典嵌套列表取值
2019/12/16 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
普通大学毕业生自荐信
2013/11/04 职场文书
幼儿园招生广告
2014/03/19 职场文书
英语教师求职信
2014/06/16 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015新学期开学寄语
2015/02/26 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS