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中的迭代器漫谈
Feb 03 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
Python 12306抢火车票脚本
Feb 07 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python3实现绘制二维点图
Dec 04 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
python 如何调用远程接口
Sep 11 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
Python中return语句用法实例分析
2015/08/04 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
Python Selenium截图功能实现代码
2020/04/26 Python
Python如何将字符串转换为日期
2020/07/31 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
司法助理专业自荐书
2014/06/13 职场文书
图书馆标语
2014/06/19 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS