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单元测试框架unittest使用方法讲解
Apr 13 Python
python类继承与子类实例初始化用法分析
Apr 17 Python
python实现指定字符串补全空格的方法
Apr 30 Python
python开发中module模块用法实例分析
Nov 12 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
python多线程http压力测试脚本
Jun 25 Python
python3的print()函数的用法图文讲解
Jul 16 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python 高阶函数简单介绍
Feb 19 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 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
使用adodb lite解决问题
2006/12/31 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
javascript 实现map集合
2015/04/03 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
大学生如何写自荐信
2014/01/08 职场文书
网络技术专业求职信
2014/02/18 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
运动会演讲稿300字
2014/08/25 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
大学辅导员述职报告
2015/01/10 职场文书
病危通知书样本
2015/04/17 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
企业党建工作总结2015
2015/05/26 职场文书
赤壁观后感(2)
2015/06/15 职场文书
初中语文教师研修日志
2015/11/13 职场文书
2019个人半年工作总结
2019/06/21 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL