天天看點

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[].get('date'))
        print('城市:', weather_dict.get('data').get('city'))
        print('天氣:', forecast[].get('type'))
        print('溫度:', weather_dict.get('data').get('wendu') + '℃ ')
        print('高溫:', forecast[].get('high'))
        print('低溫:', forecast[].get('low'))
        print('風級:', forecast[].get('fengli').split('<')[].split(']')[])
        print('風向:', forecast[].get('fengxiang'))
        weather_forecast_txt = '您好,您所在的城市%s,' \
                               '天氣%s,' \
                               '目前溫度%s,' \
                               '今天最高溫度%s,' \
                               '最低溫度%s,' \
                               '風級%s,' \
                               '溫馨提示:%s' % \
                               (
                                   weather_dict.get('data').get('city'),
                                   forecast[].get('type'),
                                   weather_dict.get('data').get('wendu'),
                                   forecast[].get('high'),
                                   forecast[].get('low'),
                                   forecast[].get('fengli').split('<')[].split(']')[],
                                   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', , {'vol': })
    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():
        data = []
        date=future_forecast[i]['date']
        date = int(re.findall('\d+',date)[])
        data.append(int(re.findall('\d+',future_forecast[i]['high'])[]))
        data.append(int(re.findall('\d+', future_forecast[i]['low'])[]))
        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[])
        high_temperature.append(each[][])
        low_temperature.append(each[][])
    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智能語音天氣預報