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实现智能语音天气预报就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。