📜  使用Python获取实时天气桌面通知(1)

📅  最后修改于: 2023-12-03 15:06:54.026000             🧑  作者: Mango

使用Python获取实时天气桌面通知

简介

天气是每个人都需要关注的生活信息之一,而随着科技的发展,获取天气信息变得越来越方便。本文将介绍如何使用Python获取实时天气信息,并将其转化为桌面通知,方便人们关注天气状况。

准备工作

在开始之前,需要完成以下准备工作:

  1. 安装Python3:建议使用Python3.6及以上版本。
  2. 高德开放平台上申请Key:用于获取天气数据。
  3. 安装requests库:用于发送HTTP请求。
获取实时天气数据

在获取实时天气数据之前,我们需要了解一下请求参数。高德开放平台提供了天气查询接口,通过该接口可以获取天气信息。具体的请求参数如下:

| 参数名 | 类型 | 是否必填 | 描述 | 默认值 | | --- | --- | --- | --- | --- | | key | string | 是 | 用户唯一标识,用于计费 | 无 | | city | string | 否 | 城市编码 | 北京市 | | extensions | string | 否 | 气象类型 | base | | output | string | 否 | 返回格式 | JSON |

其中,key是必填项,extensions和output可以不填,具体含义可以在接口文档中了解。city在本文中可以通过手动输入来设置,也可以使用定位API获取。

我们需要编写一个函数来获取天气信息,代码如下:

import requests

def get_weather(city, key):
    """获取实时天气信息"""
    url = "https://restapi.amap.com/v3/weather/weatherInfo"
    params = {
        "key": key,
        "city": city,
    }
    response = requests.get(url, params=params)
    return response.json()

这个函数接收两个参数:城市名称和申请的Key。根据以上参数构造请求URL,并发送HTTP请求获取天气信息。函数返回的是一个JSON格式的数据。

解析天气数据

得到的天气数据是一个JSON格式的字符串,我们需要将其解析并提取出有用的信息。以下是一个样例数据:

{
    "status": "1",
    "count": "1",
    "info": "OK",
    "infocode": "10000",
    "lives": [
        {
            "province": "北京",
            "city": "北京市",
            "adcode": "110000",
            "weather": "多云",
            "temperature": "1",
            "winddirection": "西北",
            "windpower": "≤3",
            "humidity": "44",
            "reporttime": "2022-01-01 14:19:29"
        }
    ]
}

我们需要获取的信息有天气、温度、湿度、风向和风力。以下是获取天气信息的代码:

def parse_weather(data):
    """解析天气信息"""
    lives = data.get("lives", [])
    if not lives:
        return {}

    weather_data = lives[0]
    weather = weather_data.get("weather", "")
    return {
        "weather": weather,
    }

这个函数接受一个字典作为参数,返回一个字典类型的数据,其中包含天气信息。

其他的解析函数可以按照以上方式编写。

发送桌面通知

获取和解析天气信息完成后,我们需要将其转化为桌面通知,方便人们在使用电脑的时候快速了解当前天气情况。在Windows操作系统中,我们可以使用win10toast库来实现桌面通知功能。安装方法如下:

pip install win10toast

以下是发送通知的代码:

from win10toast import ToastNotifier

def send_notification(title, message):
    """发送桌面通知"""
    toaster = ToastNotifier()
    toaster.show_toast(title, message, duration=10)

该函数接收两个参数:通知标题和消息内容。通过调用show_toast方法发送桌面通知。

完整代码

将以上的函数组合到一起,完整的代码如下:

import requests
from win10toast import ToastNotifier

def get_weather(city, key):
    """获取实时天气信息"""
    url = "https://restapi.amap.com/v3/weather/weatherInfo"
    params = {
        "key": key,
        "city": city,
    }
    response = requests.get(url, params=params)
    return response.json()

def parse_weather(data):
    """解析天气信息"""
    lives = data.get("lives", [])
    if not lives:
        return {}

    weather_data = lives[0]
    weather = weather_data.get("weather", "")
    temperature = weather_data.get("temperature", "")
    humidity = weather_data.get("humidity", "")
    wind_direction = weather_data.get("winddirection", "")
    wind_power = weather_data.get("windpower", "")
    return {
        "weather": weather,
        "temperature": temperature,
        "humidity": humidity,
        "wind_direction": wind_direction,
        "wind_power": wind_power,
    }

def send_notification(title, message):
    """发送桌面通知"""
    toaster = ToastNotifier()
    toaster.show_toast(title, message, duration=10)

def main():
    city = input("请输入城市名称:")
    key = input("请输入高德Key:")
    weather_data = get_weather(city, key)
    parsed_data = parse_weather(weather_data)
    weather_str = f"天气:{parsed_data.get('weather', '未知')},温度:{parsed_data.get('temperature', '未知')}℃,湿度:{parsed_data.get('humidity', '未知')}%,风向:{parsed_data.get('wind_direction', '未知')},风力:{parsed_data.get('wind_power', '未知')}"
    send_notification(city, weather_str)

if __name__ == "__main__":
    main()
运行效果

以下是运行该程序后的运行效果:

notification示例

参考文献
  1. 高德开放平台:天气查询接口
  2. win10toast库:https://pypi.org/project/win10toast/