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交换变量
Sep 06 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
python中round函数保留两位小数的方法
Dec 04 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
python快速安装OpenCV的步骤记录
Feb 22 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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使用百度ping服务代码实例
2014/06/19 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
js tab 选项卡
2009/04/26 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
vue的diff算法知识点总结
2018/03/29 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
学生会竞选自荐信
2013/10/12 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
设备技术员岗位职责
2015/04/11 职场文书
表彰大会新闻稿
2015/07/17 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL