# 实现网络请求天气数据展示工具


背景介绍

为了帮助开发者更好地处理网络请求并可视化天气数据,本文介绍了一个功能模块。该工具支持接收城市名称和API密钥(可选),并利用Python的requests库和matplotlib库实现数据获取与图表展示。本地环境运行测试时,可确保代码的可执行性。

思路分析

  1. 输入验证:需接收城市名称和API密钥(可选),验证参数格式是否正确。
  2. 网络请求:使用requests库发送GET请求,通过headers传递JSON格式的数据。
  3. 数据处理:解析响应JSON数据,提取关键天气参数(温度、湿度等)。
  4. 可视化展示:使用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库完成了网络请求工具与天气数据可视化功能。核心知识点包括:

  1. 网络请求处理:使用requests库发送GET请求并处理响应数据
  2. 数据处理与解析:将JSON格式的数据转换为字典形式
  3. 可视化展示:使用matplotlib绘制时间序列图表

该工具可在本地环境中运行,支持城市名称和API密钥的输入,能够展示实时天气数据。通过上述实现,用户能够方便地获取并可视化天气信息。