Initial import of NavSea pbf project

This commit is contained in:
OpenAI Codex
2026-03-17 19:48:15 +08:00
commit 5f3f7409b3
84 changed files with 43889 additions and 0 deletions

83
tasks/test2.md Normal file
View File

@@ -0,0 +1,83 @@
# 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()