python实现智能语音天气预报
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、代码
#导入必要模块
importurllib.parse
importurllib.request
importgzip
importjson
importplaysound
fromaipimportAipSpeech
importmatplotlib.pyplotasplt
importre
#设置参数,图片显示中文字符,否则乱码
plt.rcParams['font.sans-serif']=['SimHei']
#定义获取天气数据函数
defGet_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)
returnweather_dict
#定义当天天气输出格式
defShow_weather(weather_data):
weather_dict=weather_data
ifweather_dict.get('desc')=='invilad-citykey':
print('你输入的城市有误或未收录天气,请重新输入...')
elifweather_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')
)
returnweather_forecast_txt,forecast
#定义语音播报今天天气状况
defVoice_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})
ifnotisinstance(result,dict):
withopen('sound2.mp3','wb')asf:
f.write(result)
f.close()
#playsound模块播放语音
playsound.playsound(r'C:\Users\ban\Desktop\bsy\sound2.mp3')
#未来四天天气变化图
defFuture_weather_states(forecast):
future_forecast=forecast
dict={}
#获取未来四天天气状况
foriinrange(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=[]
foreachindata_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实现智能语音天气预报就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。