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的关键字监控及告警
Jul 06 Python
关于Python 3中print函数的换行详解
Aug 08 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
django框架cookie和session用法实例详解
Dec 10 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
python3实现无权最短路径的方法
May 12 Python
聊一聊python常用的编程模块
May 14 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
Python jiaba库的使用详解
Nov 23 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
PHP中的命名空间相关概念浅析
2015/01/22 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
node.js实现快速截图
2016/08/27 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
python os模块在系统管理中的应用
2020/06/22 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
学校查摆问题整改措施
2014/09/28 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python