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、代码
#导入必要模块 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:UsersanDesktopsysound2.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实现智能语音天气预报就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。