背景介绍
为了帮助开发者更好地处理网络请求并可视化天气数据,本文介绍了一个功能模块。该工具支持接收城市名称和API密钥(可选),并利用Python的requests库和matplotlib库实现数据获取与图表展示。本地环境运行测试时,可确保代码的可执行性。
思路分析
- 输入验证:需接收城市名称和API密钥(可选),验证参数格式是否正确。
- 网络请求:使用requests库发送GET请求,通过headers传递JSON格式的数据。
- 数据处理:解析响应JSON数据,提取关键天气参数(温度、湿度等)。
- 可视化展示:使用matplotlib绘制时间序列图表,展示实时数据。
代码实现
import requests
import matplotlib.pyplot as plt
def weather_request(city, key=None):
"""
从公开天气API获取天气数据并展示在图表中
参数:
city (str): 输入的城市名称
key (str, optional): API密钥(可选)
"""
# 1. 验证输入是否合法
if not isinstance(city, str):
raise ValueError("输入参数必须为字符串,城市名称")
if key is None:
headers = {
"Content-Type": "application/json"
}
else:
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {key}"
}
# 构造请求URL
url = f"https://api.weatherapi.com/v1/xmlapi/datetime/{city}.json"
# 发送GET请求
response = requests.get(url, headers=headers)
# 解析响应数据
data = response.json()
# 处理数据,提取关键信息
weather_data = {
'city': city,
'temp': data['data']['main']['temp'],
'humidity': data['data']['main']['humidity'],
'wind_speed': data['data']['main']['windSpeed']
}
# 绘制时间序列图表
plt.figure(figsize=(10, 6))
plt.plot(weather_data['temp'], label='温度')
plt.xlabel('时间')
plt.ylabel('温度(度C)')
plt.title(f"{city}地区的实时天气数据")
plt.legend()
plt.grid(True)
# 显示图表
plt.show()
总结
本实现通过Python的requests和matplotlib库完成了网络请求工具与天气数据可视化功能。核心知识点包括:
- 网络请求处理:使用requests库发送GET请求并处理响应数据
- 数据处理与解析:将JSON格式的数据转换为字典形式
- 可视化展示:使用matplotlib绘制时间序列图表
该工具可在本地环境中运行,支持城市名称和API密钥的输入,能够展示实时天气数据。通过上述实现,用户能够方便地获取并可视化天气信息。