📡 天气数据采集与管道架构


文档生成: 2026-04-30 08:36 CST
覆盖: 全部数据源、采集脚本、存储与同步



一、总览



┌──────────────────────────────────────────────────────────────────┐
│                        数据源 (5路)                               │
├──────────────┬────────────┬────────────┬────────────┬────────────┤
│  HKO API     │ Open-Meteo │  METAR     │ WU PWS     │Polyweather │
│  (官方)       │  (NWP)     │ (机场)     │ (个人站)    │ (市场)     │
└──────┬───────┴──────┬─────┴──────┬─────┴──────┬─────┴──────┬─────┘
       │              │            │            │            │
       ▼              ▼            ▼            ▼            ▼
┌──────────────────────────────────────────────────────────────────┐
│                     JSONL 平面文件                                │
│  data/hko/  data/history/metar/  data/history/wu_pws/  data/mm/  │
└────────────────────────────┬─────────────────────────────────────┘
                             │
                             ▼
┌──────────────────────────────────────────────────────────────────┐
│                 DuckDB (weather_market.duckdb)                    │
│  hko_obs | hko_daily | hko_forecast | metar_obs | wu_pws_obs    │
│              wu_pws_daily | market_snapshots                      │
└────────────────────────────┬─────────────────────────────────────┘
                             │
                             ▼
┌──────────────────────────────────────────────────────────────────┐
│                      预测模型                                     │
│  hko_predict.py → hko_prediction.json                             │
└──────────────────────────────────────────────────────────────────┘



二、数据源详细


2.1 HKO 官方 API(hko_data_fetcher.py)


脚本: polymarket/scripts/hko_data_fetcher.py

运行: cron 每分钟(--loop 模式,实际 fetch 间隔 10 分钟)

输出: data/hko/hko_latest.json + data/hko/hko_history_YYYYMMDD.jsonl


数据端点


端点格式频率内容
rhrread (Current Weather)JSON每小时27 站实时温湿度
1-min temperature CSVCSV每10分钟40+ 站高精度温度
Max/Min since midnight CSVCSV每10分钟日最高/最低温(结算关键
1-min humidity CSVCSV每10分钟30+ 站湿度
10-min wind CSVCSV每10分钟风向/风速/阵风
1-min solar radiation CSVCSV每10分钟太阳辐射 (W/m²)
1-min pressure CSVCSV每10分钟海平面气压
fnd (9-day forecast)JSON每天2次预报最高/最低/天气
flw (Local forecast)JSON每小时天气预报文本
RYES (Daily Report)JSON每日 01:30昨日官方最高/最低
Daily Extract XMLXML每月官方结算值
AWS past 24h CSVsCSV按需全站 24h 历史

关键函数



fetch_hko_data()              # 主入口:拉取全部端点
fetch_aws_past24h()           # AWS GIS 24h 历史
save_latest(data)             # 保存 hko_latest.json
append_history(data)          # 追加 JSONL 日志

hko_latest.json 结构



{
  "current": {"temp": 20.7, "humidity": 66, "icon": [51]},
  "max_min": {"hko_max_since_midnight": 22.4, "hko_min_since_midnight": 20.2},
  "all_stations": [...],
  "forecast": {"today_forecast": {"max_temp": 26, "min_temp": 20, "weather": "...", "psr": "Low"}},
  "local_forecast": {"description": "...", "general": "...", "outlook": "..."},
  "warnings": {"codes": "", "messages": []},
  "aws_24h": {...},
  "fetch_time": "2026-04-30T08:00:00+08:00"
}

特殊处理


  • API 故障保护: hko_temp=None 时跳过预测写入
  • Station 名匹配: "HK Observatory" (CSV) / "Hong Kong Observatory" (rhrread)
  • HTML 错误检测: CSV 返回 开头时判为失败



  • 2.2 Open-Meteo NWP(weather_data_enricher.py)


    脚本: polymarket/scripts/weather_data_enricher.py

    API: api.open-meteo.com/v1/forecast

    用途: 数值天气预报 (Numerical Weather Prediction),增强预报信号


    拉取数据


    参数说明
    temperature_2m_max日最高温(多模型集合)
    cloud_cover / cloud_cover_low / cloud_cover_mid云量层
    shortwave_radiation短波辐射 (W/m²)
    precipitation小时降雨量
    cape对流有效位能 (J/kg)
    relative_humidity_2m近地面湿度

    多城市拉取


    香港 + 全球 28 个城市(通过经纬度查询),每个城市获取 HKO 预报 + NWP 区域平均。


    特殊功能


  • WU PWS 缓降: 主 API 返回空时,fallback 到 Open-Meteo 地面站
  • 历史季节性偏差: 计算历史同期偏差用于基线校正
  • UHI 修正: 城市热岛效应补偿
  • 城市日照映射: 基于经纬度的日间日照时长校正



  • 2.3 METAR 机场观测(metar_collector.py)


    脚本: polymarket/scripts/metar_collector.py

    API: aviationweather.gov/api/data/metar

    用途: 机场气象观测(部分 Polymarket 天气合约的结算数据源


    采集范围


    全球 29 个合约城市的 ICAO 机场站,例如:


    城市ICAO
    香港VHHH
    深圳ZGSZ
    新加坡WSSS
    东京RJTT
    纽约KJFK
    ......

    数据字段


    
    {
      "icao": "VHHH",
      "raw": "METAR VHHH 300730Z 04012KT ...",
      "temp_c": 21.0,
      "dewpoint_c": 17.0,
      "wind_dir_deg": 40,
      "wind_speed_kt": 12,
      "visibility_m": 10000,
      "cloud_base_ft": 2500,
      "max_temp_24h": 26.0,
      "min_temp_24h": 20.0
    }
    

    监听模式


    
    python3 metar_collector.py --loop 300     # 每5分钟
    python3 metar_collector.py --station VHHH # 单站
    python3 metar_collector.py --hours 24     # 24h历史
    

    输出


  • data/metar/latest_metar.json — 最新快照
  • data/metar/metar_YYYYMMDD.jsonl — 按日 JSONL 日志
  • DuckDB: metar_obs



  • 2.4 WU PWS 个人气象站(wu_pws_scraper.py)


    脚本: polymarket/scripts/wu_pws_scraper.py

    数据源: Weather Underground PWS Dashboard(SSR HTML 解析

    用途: 全球 PWS 5 分钟级地面观测(29 城市各 1 个精选站)


    工作原理


    WU Angular app 在服务端渲染时将 PWS 数据嵌入 HTML