| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- const path = require('path');
- const axios = require('axios');
- const { extractDOM } = require("./jsDom.js");
- let basicGfsList = [];
- let gfsFile = "";
- let rootPage = {};
- let cycleList = [];
- const { leftlon, rightlon, toplat, bottomlat } = require("./region.js");
- /**
- *
- * @param {String} degree 气象模型精度,需自己找可选值,非要列举几个的话: ["gfs_0p25","gfs_0p50","gfs_1p00"]
- * @param {Number} step 步进数值,此参数不需要传入,自行递归
- * @returns
- */
- async function getGrib2FileUrl(degree = "gfs_1p00", step = 0) {
- if (basicGfsList.length) {
- gfsFile = basicGfsList[0 + step];
- const cyclePage = await axios.get(`https://nomads.ncep.noaa.gov/find_subdirs_files.php?ds=${degree}&path=&subdir_num=0&subdir_name=${gfsFile}`);
- cycleList = extractDOM(`<html><body>${cyclePage.data}</body></html>`, "#div_subdir_1 .subdir_1");
- } else {
- rootPage = await axios.get(`https://nomads.ncep.noaa.gov/gribfilter.php?ds=${degree}`);
- const gfsList = extractDOM(rootPage.data, "#div_subdir_0 .subdir_0");
- for (let i = 0; i < gfsList.length; i++) {
- basicGfsList.push(gfsList[i].innerHTML);
- }
- gfsFile = basicGfsList[0 + step];
- cycleList = extractDOM(rootPage.data, "#div_subdir_1 .subdir_1");
- }
- const optionPage = await axios.get(`https://nomads.ncep.noaa.gov/find_subdirs_files.php?ds=${degree}&path=/${basicGfsList[0 + step]}&subdir_num=1&subdir_name=${cycleList[0].innerHTML}`);
- const optionList = extractDOM(`<html><body>${optionPage.data}</body></html>`, "#file_selector option");
- if (optionList) {
- let grb2FileList = [];
- for (let i = 1; i < optionList.length; i++) {
- grb2FileList.push({
- url: `https://nomads.ncep.noaa.gov/cgi-bin/filter_${degree}.pl?dir=/${basicGfsList[0 + step]}/${cycleList[0].innerHTML}/atmos&file=${optionList[i].getAttribute("value")}&all_var=on&all_lev=on&toplat=${toplat}&leftlon=${leftlon}&rightlon=${rightlon}&bottomlat=${bottomlat}`,
- filePath: path.join(__dirname, `../model/grib2/${degree}/${basicGfsList[0 + step]}/${cycleList[0].innerHTML}`),
- fileName: optionList[i].getAttribute("value"),
- });
- }
- const urls = JSON.parse(JSON.stringify(grb2FileList));
- basicGfsList = [];
- gfsFile = "";
- rootPage = {};
- return urls;
- } else {
- console.log(`${degree}第${step}个模型内未找到数据,切换下一个模型`);
- return getGrib2FileUrl(degree, ++step);
- }
- }
- // https://nomads.ncep.noaa.gov/find_subdirs_files.php?ds=gfs_1p00&path=/gfs.20250908&subdir_num=1&subdir_name=00
- // https://nomads.ncep.noaa.gov/find_subdirs_files.php?ds=gfs_1p00&path=/gfs.20250908&subdir_num=1&subdir_name=00
- // 提取DOM元素函数
- module.exports = {
- getGrib2FileUrl
- }
|