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实现系统状态监测和故障转移实例方法
Nov 18 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
python学生管理系统代码实现
Apr 05 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
浅析Python函数式编程
Oct 06 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
Django serializer优化类视图的实现示例
Jul 16 Python
Matplotlib配色之Colormap详解
Jan 05 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python运用于数据分析的简单教程
2015/03/27 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
统计员岗位职责
2013/11/14 职场文书
班级德育工作实施方案
2014/02/21 职场文书
市场营销方案范文
2014/03/11 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
课外小组活动总结
2014/08/27 职场文书
丧事主持词
2015/07/02 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis