📅  最后修改于: 2023-12-03 15:06:54.026000             🧑  作者: Mango
天气是每个人都需要关注的生活信息之一,而随着科技的发展,获取天气信息变得越来越方便。本文将介绍如何使用Python获取实时天气信息,并将其转化为桌面通知,方便人们关注天气状况。
在开始之前,需要完成以下准备工作:
在获取实时天气数据之前,我们需要了解一下请求参数。高德开放平台提供了天气查询接口,通过该接口可以获取天气信息。具体的请求参数如下:
| 参数名 | 类型 | 是否必填 | 描述 | 默认值 | | --- | --- | --- | --- | --- | | 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()
以下是运行该程序后的运行效果: