Files
pbf/tasks/test2.md
2026-03-17 19:48:15 +08:00

1.4 KiB
Raw Blame History

NavSea Weather Server

Step-2 测试GFS Downloader

创建文件:

gfs_downloader.py


import os import requests from datetime import datetime

BASE_URL = "https://nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod"

FORECAST_HOURS = [ 0,3,6,9,12,15,18,21,24, 27,30,33,36,39,42,45, 48,51,54,57,60,63,66, 69,72 ]

OUTPUT_DIR = "data/grib"

os.makedirs(OUTPUT_DIR, exist_ok=True)

def get_cycle():

now = datetime.utcnow()

hour = (now.hour // 6) * 6

cycle = f"{hour:02d}"

date = now.strftime("%Y%m%d")

return date, cycle

def download_file(url, path):

if os.path.exists(path):
    print("skip", path)
    return

print("downloading", url)

r = requests.get(url, stream=True)

if r.status_code != 200:
    print("failed", url)
    return

with open(path, "wb") as f:
    for chunk in r.iter_content(1024*1024):
        f.write(chunk)

def main():

date, cycle = get_cycle()

print("cycle:", date, cycle)

for fh in FORECAST_HOURS:

    fh_str = f"{fh:03d}"

    filename = f"gfs.t{cycle}z.pgrb2.0p25.f{fh_str}"

    url = f"{BASE_URL}/gfs.{date}/{cycle}/atmos/{filename}"

    output = os.path.join(
        OUTPUT_DIR,
        f"{date}_{cycle}_f{fh_str}.grib2"
    )

    download_file(url, output)

if name == "main": main()