# 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()