#导入使用的模块(如果缺失,就是用pip安装)

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('

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('

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 = '11793737'

API_KEY = 'Mx8wLzbFk2VNVcjybf8lDzFH'

SECRET_KEY = 'DEc7I5q18z7aazW22LKDgwGocZ8h9VdR'

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'D:\sound2.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)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐