当前位置:首页>python>【Python】手把手教你用Python实时监控天气预警,做自己的气象小助手!

【Python】手把手教你用Python实时监控天气预警,做自己的气象小助手!

  • 2026-10-11 05:42:46
【Python】手把手教你用Python实时监控天气预警,做自己的气象小助手!

    当台风突袭、暴雨倾盆,你是不是总在朋友圈刷到别人转发的预警截图,自己却慢半拍?

    今天,我们用 30行Python代码 实现了一个「城市实时预警查询器」——从此,预警信息第一时间掌握,出差、旅行、户外工作,全都心里有数!
(附完整代码 + 免费API申请攻略,小白也能跑起来)

1

获取“入场券”——和风天气API密钥
    我们选用国内稳定、数据详实的 和风天气 开发平台(dev.qweather.com)。    注册后,在控制台创建一个项目,就能拿到专属的 API_KEY。每日免费调用量足够个人使用,完全零成本。

2

锁定城市——Location ID
  和风天气不用城市名,而是用数字ID(比如北京是 101010100,上海是 101020100)。
    代码中我用的是某个城市的ID 101191204(你可以通过官方“城市搜索”API查到任意地区)。
小技巧:把城市ID做成配置文件,想查哪就换哪,灵活度拉满!

3

发起请求,解析预警列表
  • 构造请求URL:https://devapi.qweather.com/v7/warning/now?location={ID}&key={KEY}

  • 用 requests.get() 获取JSON数据

  • 检查返回码 code == '200' 代表成功

  • 从 warning 字段取出预警列表(若为空,则表示“暂无预警”)

4

输出预警详细内容

    遍历每条预警,提取 标题、类型、等级、发布单位、发布时间、详情描述,用分隔线清晰打印在终端。效果如下:

⚠️ 查询成功!当前共有 2 个生效的预警: ------------------------------  标题: XXX发布暴雨黄色预警  类型: 暴雨 (等级: 黄色)  发布单位: XXXXXX  发布时间: 2026-XX-XX XX:XX:00  详情: 预计未来6小时本市将出现强降水...------------------------------

    有了这个基础,你可以轻松拓展:

  • 定时轮询:用 schedule 库每10分钟查询一次,发现新预警就发送邮件/短信

  • 多城市监控:遍历多个 LOCATION_ID,生成一张全国风险地图

  • 对接微信/钉钉:将结果封装成消息,推送到群聊,做团队的“气象哨兵”

  • 数据持久化:把预警记录存入数据库,分析历史规律

5

避坑指南
  1. API_KEY 保密:不要上传到公开仓库,建议用环境变量存储。

  2. 城市ID查询:和风官方提供 geo/v2/city/lookup 接口,输入城市名即可获得ID。

  3. 错误码解读:code 非200时,常见原因——密钥无效、IP未白名单、调用超限(免费版每日限定访问调用次数,个人绰绰有余)。

  4. 网络超时:建议添加 timeout=5 参数,避免卡死。

6

完整代码
import requestsimport json# 1. 请前往和风天气官网 (dev.qweather.com) 注册,在“控制台”获取你的个人API密钥API_KEY = "***...***"   # 替换为你在和风天气官网申请的真正KEY# 2. 确定要查询的城市Location ID#    和风天气使用数字ID标识位置。这里以北京为例,ID为101010100。#    (你可以通过调用和风天气的“城市信息搜索”API来查询其他地方的ID)LOCATION_ID = "101191204"URL = f"https://devapi.qweather.com/v7/warning/now?location={LOCATION_ID}&key={API_KEY}"print("正在查询实时天气预警...")try:    # 发送GET请求    response = requests.get(URL)    response.raise_for_status()  # 检查请求是否成功    # 解析返回的JSON数据    data = response.json()    # 根据和风天气API标准,'code'为'200'代表请求成功    if data.get('code') == '200':        # 获取预警列表,如果没有预警,'warning'字段是一个空列表        warnings = data.get('warning', [])        if warnings:            print(f"\n⚠️ 查询成功!当前共有 {len(warnings)} 个生效的预警: \n")            for warn in warnings:                print("-" * 30)                print(f"  标题: {warn.get('title', '无标题')}")                print(f"  类型: {warn.get('typeName', '未知')} (等级: {warn.get('level', '未知')})")                print(f"  发布单位: {warn.get('sender', '未知')}")                print(f"  发布时间: {warn.get('pubTime', '未知')}")                print(f"  详情: {warn.get('text', '无详情信息')}")                print("-" * 30)        else:            print("\n✅ 查询成功!当前暂无生效的天气预警。")    else:        print(f"\n❌ 请求失败,错误码: {data.get('code')}。请检查你的API_KEY是否正确,或者是否超过了每日的调用限制。")except requests.exceptions.RequestException as e:    print(f"\n❌ 网络请求出错: {e}")

    我们无法改变天气,但可以提前知晓并做好防范。用一段简单的Python脚本,把预警信息握在自己手中。

—— END ——

最新文章

随机文章