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编写分析Python程序性能的工具的教程
Apr 01 Python
Python守护进程用法实例分析
Jun 04 Python
如何在Python中编写并发程序
Feb 27 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
python实现微信远程控制电脑
Feb 22 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
Django 实现购物车功能的示例代码
Oct 08 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
Python filter过滤器原理及实例应用
Aug 18 Python
Python3如何在服务器打印资产信息
Aug 27 Python
python 通过exifread读取照片信息
Dec 24 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中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
js计数器代码
2006/11/04 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python匿名函数的使用方法解析
2019/10/10 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
会计专业自荐信范文
2013/12/02 职场文书
暑期实习鉴定
2013/12/16 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
详解SQL报错盲注
2022/07/23 SQL Server