本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: 飞奔的帅帅
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、代码
1 #导入必要模块
2 import urllib.parse
3 import urllib.request
4 import gzip
5 import json
6 import playsound
7 from aip import AipSpeech
8 import matplotlib.pyplot as plt
9 import re
10 #设置参数,图片显示中文字符,否则乱码
11 plt.rcParams['font.sans-serif']=['SimHei']
12 #定义获取天气数据函数
13 def Get_weather_data():
14 print('------天气查询------')
15 city_name = input('请输入要查询的城市名称:')
16 url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city_name)
17 weather_data = urllib.request.urlopen(url).read()
18 # 读取网页数据
19 weather_data = gzip.decompress(weather_data).decode('utf-8')
20 # #解压网页数据
21 weather_dict = json.loads(weather_data)
22 return weather_dict
23 #定义当天天气输出格式
24 def Show_weather(weather_data):
25 weather_dict = weather_data
26 if weather_dict.get('desc') == 'invilad-citykey':
27 print('你输入的城市有误或未收录天气,请重新输入...')
28 elif weather_dict.get('desc') == 'OK':
29 forecast = weather_dict.get('data').get('forecast')
30 print('日期:', forecast[0].get('date'))
31 print('城市:', weather_dict.get('data').get('city'))
32 print('天气:', forecast[0].get('type'))
33 print('温度:', weather_dict.get('data').get('wendu') + '℃ ')
34 print('高温:', forecast[0].get('high'))
35 print('低温:', forecast[0].get('low'))
36 print('风级:', forecast[0].get('fengli').split('<')[2].split(']')[0])
37 print('风向:', forecast[0].get('fengxiang'))
38 weather_forecast_txt = '您好,您所在的城市%s,' \
39 '天气%s,' \
40 '当前温度%s,' \
41 '今天最高温度%s,' \
42 '最低温度%s,' \
43 '风级%s,' \
44 '温馨提示:%s' % \
45 (
46 weather_dict.get('data').get('city'),
47 forecast[0].get('type'),
48 weather_dict.get('data').get('wendu'),
49 forecast[0].get('high'),
50 forecast[0].get('low'),
51 forecast[0].get('fengli').split('<')[2].split(']')[0],
52 weather_dict.get('data').get('ganmao')
53 )
54 return weather_forecast_txt,forecast
55 #定义语音播报今天天气状况
56 def Voice_broadcast(weather_forcast_txt):
57 weather_forecast_txt = weather_forcast_txt
58 APP_ID = 你的百度语音APP_ID
59 API_KEY = 你的百度语音API_KEY
60 SECRET_KEY = 你的百度语音SECRET_KEY
61 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
62 print('语音提醒:', weather_forecast_txt)
63 #百度语音合成
64 result = client.synthesis(weather_forecast_txt, 'zh', 1, {'vol': 5})
65 if not isinstance(result, dict):
66 with open('sound2.mp3', 'wb') as f:
67 f.write(result)
68 f.close()
69 #playsound模块播放语音
70 playsound.playsound(r'C:\Users\ban\Desktop\bsy\sound2.mp3')
71 #未来四天天气变化图
72 def Future_weather_states(forecast):
73 future_forecast = forecast
74 dict={}
75 #获取未来四天天气状况
76 for i in range(5):
77 data = []
78 date=future_forecast[i]['date']
79 date = int(re.findall('\d+',date)[0])
80 data.append(int(re.findall('\d+',future_forecast[i]['high'])[0]))
81 data.append(int(re.findall('\d+', future_forecast[i]['low'])[0]))
82 data.append(future_forecast[i]['type'])
83 dict[date] = data
84 data_list = sorted(dict.items())
85 date=[]
86 high_temperature = []
87 low_temperature = []
88 for each in data_list:
89 date.append(each[0])
90 high_temperature.append(each[1][0])
91 low_temperature.append(each[1][1])
92 fig = plt.plot(date,high_temperature,'r',date,low_temperature,'b')
93 plt.xlabel('日期')
94 plt.ylabel('℃')
95 plt.legend(['高温','低温'])
96 plt.xticks(date)
97 plt.title('最近几天温度变化趋势')
98 plt.show()
99 #主函数
100 if __name__=='__main__':
101 weather_data = Get_weather_data()
102 weather_forecast_txt, forecast = Show_weather(weather_data)
103 Future_weather_states(forecast)
104 Voice_broadcast(weather_forecast_txt)
6、最终效果

来源:https://www.cnblogs.com/Qqun821460695/p/12016471.html