import cdsapi
import argparse
import calendar

# 解析命令行参数：年份 月份
parser = argparse.ArgumentParser(description="ERA5 按月下载，自动适配当月天数")
parser.add_argument("year", type=int, help="年份，如 1998")
parser.add_argument("month", type=int, help="月份，数字 1~12")
args = parser.parse_args()

year = args.year
month = args.month

_, total_days = calendar.monthrange(int(year), int(month))
day_list = [f"{d:02d}" for d in range(1, total_days + 1)]


dataset = "reanalysis-era5-single-levels"
request = {
    "product_type": ["reanalysis"],
    "variable": [
        '10m_u_component_of_wind',
        '10m_v_component_of_wind',
        '2m_temperature',
        '2m_dewpoint_temperature',
        'mean_sea_level_pressure',
        'surface_solar_radiation_downwards',
        'surface_thermal_radiation_downwards',
        'total_precipitation'
    ],
    "year": [year],
    "month": [month],
    "day": day_list,
    "time": [
        "00:00", "01:00", "02:00",
        "03:00", "04:00", "05:00",
        "06:00", "07:00", "08:00",
        "09:00", "10:00", "11:00",
        "12:00", "13:00", "14:00",
        "15:00", "16:00", "17:00",
        "18:00", "19:00", "20:00",
        "21:00", "22:00", "23:00"
    ],
    "data_format": "netcdf",
    "download_format": "unarchived",
    "area": [32, 100, 10, 126]
}

client = cdsapi.Client()
save_name = f"era5_{year}_{month}.nc"
print(f"开始下载 {year}年{month}月，共{total_days}天")
client.retrieve(dataset, request).download(save_name)
print(f"下载完成，文件：{save_name}")

