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 相关文章推荐
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
详解django中使用定时任务的方法
Sep 27 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
python实现数据分析与建模
Jul 11 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Python爬取12306车次信息代码详解
Aug 12 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
python3.9之你应该知道的新特性详解
Apr 29 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函数 serialize()和unserialize()
2012/02/04 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
python解析html开发库pyquery使用方法
2014/02/07 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
django 类视图的使用方法详解
2019/07/24 Python
python中加背景音乐如何操作
2020/07/19 Python
python操作toml文件的示例代码
2020/11/27 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
自我鉴定怎么写
2014/01/12 职场文书
大学旷课检讨书
2014/01/28 职场文书
青春无悔演讲稿
2014/05/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
八一建军节慰问信
2015/02/14 职场文书
检察院起诉书
2015/05/20 职场文书
夏洛特的网观后感
2015/06/15 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android