前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 飞奔的帅帅

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

本系统主要包括四个函数:

1、获取天气数据

  • 输入要查询天气的城市

  • 利用urllib模块向中华万年历天气api接口请求天气数据

  • 利用gzip解压获取到的数据,并编码utf-8

  • 利用json转化成python识别的数据,返回为天气预报数据复杂形式的字典(字典中的字典)

2、输出当天天气数据

  • 格式化输出当天天气,包括:天气状况,此时温度,最高温度、最低温度,风级,风向等。

3,语音播报当天天气

  • 创建要输出的语音文本(weather_forecast_txt)

  • 利用百度的语音合成模块AipSpeech,合成语音文件

  • 利用playsound模块播放语音

4、未来几天温度变化趋势

  • 创建未来几天高低温数据的字典

  • 利用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实现智能语音天气预报的更多相关文章

  1. 转:IT巨头纷纷“卡位” 智能语音成人机交互入口必争之地

    http://www.cs.com.cn/xwzx/hwxx/201707/t20170712_5368595.html 随着物联网的迅速发展,作为重要接口的智能语音技术已成为国内外IT巨头的必争之地 ...

  2. 小学生都能写智能语音助手了,我这颗转战AI的心要何去何从?

    前言——我是不是老了 前天看了一个关于AI类的综艺节目我感觉整个人都不好了.这个综艺的名字叫<智造将来>上面那个小屁孩自己写了一个智能语音助手,这个小屁孩叫袁翊闳是2018年百度AI开发者 ...

  3. 用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...

  4. PHP实现智能语音播报

    原文地址 https://www.jianshu.com/p/91a046ec6ebc 大家估计都知道现在很多AI音响能够给你播报天气,叫你起床...甚至能够接受语音指令!所谓的人工智能音响,听起来很 ...

  5. 用python+sklearn(机器学习)实现天气预报数据 模型和使用

    用python+sklearn机器学习实现天气预报 模型和使用 项目地址 系列教程 0.前言 1.建立模型 a.准备 引入所需要的头文件 选择模型 选择评估方法 获取数据集 b.建立模型 c.获取模型 ...

  6. 用python+sklearn(机器学习)实现天气预报数据 数据

    用python+sklearn机器学习实现天气预报 数据 项目地址 系列教程 勘误表 0.前言 1.爬虫 a.确认要被爬取的网页网址 b.爬虫部分 c.网页内容匹配取出部分 d.写入csv文件格式化 ...

  7. 用python+sklearn(机器学习)实现天气预报 准备

    用python+sklearn机器学习实现天气预报 准备 项目地址 系列教程 0.流程介绍 1. 环境搭建 a.python b.涉及到的机器学习相关库 sklearn panda seaborn j ...

  8. Python实现机器人语音聊天

    一.前言说明 1.功能简述 登录后进入聊天界面,如果服务器都在同一个地址,则都进入同一个房间 进入/离开/发消息同一房间用户都可以看到,输入“tuling”或“chatbot”可以切换为和Tuling ...

  9. web服务版智能语音对话

    在前几篇的基础上,我们有了语音识别,语音合成,智能机器人,那么我们是不是可以创建一个可以实时对象的机器人了? 当然可以! 一,web版智能对话 前提:你得会flask和websocket 1 ,创建f ...

随机推荐

  1. VUE的中v-if和v-shou的区别

    v-if的特点:每次都会重新删除或创建元素 v-shou的特点:每次执行都只是切换了元素的display:none的属性 v-if的缺点: 每次使用都会有较高性能消耗(频繁的切换元素建议不适用,建议使 ...

  2. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

    利用vSphere调整各台虚拟机后,重新启动mesos,让其启动docker,并为每个container分配cpu和mem,但每次都有一个TASK_LOST. 查看mesos slave的log,发现 ...

  3. 09-Python-Socket编程

    一.Python-Socket编程 1.1.弄懂HTTP.Socket.TCP这几个概念 什么是HTTP协议?浏览器的本质就是一个socket客户端遵循HTTP协议,HTTP协议的本质:通过\r\n分 ...

  4. Linux下搭建及配置禅道服务器详细过程-包含软件资源

    **1:百度云盘下载: ** 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操作系统--链接: http ...

  5. idea建立项目关联到git仓库操作步骤

    eg:创建一个名为demo的git项目 创建git远程项目,命名为[/demo] 在[D:\workspace\gf]创建本地项目[demo] 在idea里选择[VCS]->[Checkout ...

  6. Python--glob模块

    0.glob模块和通配符 glob模块最主要的方法有2个: 1.glob() 2.iglob() 以上2分方法一般和通配符一起使用,常用的通配符有3个: * :匹配零个或多个字符 ? :匹配任何单个的 ...

  7. 纯净版SSM

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

  8. C语言每日一练——第4题

    一.题目要求 已知数据文件in.dat中有300个四位数,并调用readDat()函数把这些数存储数组a中,编写函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条 ...

  9. 你不知道的JavaScript(中)读书笔记(一)

    第一章 1.内置类型 JavaScript有七种内置类型[除了对象以外,其他统称为“基本类型”]: 空值(null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符 ...

  10. 用js写直角三角形,等腰三角形,菱形

    //一. 画一个直角三角形     // 第几行   *号数     // *        1        1       // **       2        2     // ***    ...