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自动扫雷实现方法
Jul 25 Python
Python实现多并发访问网站功能示例
Jun 19 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
python读取ini配置的类封装代码实例
Jan 08 Python
python如何删除文件、目录
Jun 23 Python
python爬虫调度器用法及实例代码
Nov 30 Python
Flask搭建一个API服务器的步骤
May 28 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
python算法题 链表反转详解
2019/07/02 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
软件工程师岗位职责
2013/11/16 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
班级旅游计划书
2014/05/03 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
学校2014年度工作总结
2014/12/06 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
党内外群众意见范文
2015/06/02 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
各国货币符号大全
2022/02/17 杂记
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android