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中字符串对齐方法介绍
May 21 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
python+opencv实现动态物体识别
Jan 09 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python3 Click模块的使用方法详解
Feb 12 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
python如何修改文件时间属性
Feb 05 Python
python3 删除所有自定义变量的操作
Apr 08 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
处理单名多值表单的详解
2013/06/08 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php短址转换实现方法
2015/02/25 PHP
php生成二维码
2015/08/10 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
python格式化字符串实例总结
2014/09/28 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python pandas时序处理相关功能详解
2019/07/03 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
python IP地址转整数
2020/11/20 Python
numba提升python运行速度的实例方法
2021/01/25 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
协议书模板
2014/04/23 职场文书
集中整治工作方案
2014/05/01 职场文书
毕业生求职信范文
2014/06/29 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
总经理聘用协议书
2015/09/21 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Java 在线考试云平台的实现
2021/11/23 Java/Android