@sdetweil Both calls working.
try {
const response = await axios.get(metarUrl, {
responseType: 'arraybuffer', // ensure response is treated as binary
headers: {
'Accept-Encoding': 'gzip', // request gzip compression
},
});
// Unzip the gzip response
const unzippedData = zlib.gunzipSync(response.data).toString();
let json_string = convert.toJson(unzippedData);
var json = JSON.parse(json_string);
var metarData = json.response.data.METAR;
var airportData = new Object();
var airports = payload.airportList.split(",").map(function (airport) {
airport = airport.trim();
return (airport.length < 4) ? "K" + airport : airport;
});
airports.forEach(function (airport) {
metarData.forEach(function (metar) {
if (airport === metar.station_id) {
if (this.debug)
console.log("METAR data found for " + airport);
airportData[airport] = metar;
return; // check next airport in list
}
});
// console.log(metarData)
});
} catch (error) {
console.error('Error fetching data:', error);
}
const checktype = { "Airspace_Flow_List":"Airspace_Flow", "Ground_Delay_List": "Ground_Delay", "Arrival_Departure_Delay_List": "Delay","Airport_Closure_List":"Airport" }
try {
const response = await axios.get(FAAUrl);
// Your further processing
let json_string =
//convert.toJson(test_data) swap comments to use test FAA data
convert.toJson(response.data.toString());
if (this.debug)
console.log("json faa=" + json_string);
const faa_data = JSON.parse(json_string);
if (!Array.isArray(faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type)) {
// save the current entry
const x = faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type
// init as an array
faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type = []
// add the element into the array
faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type.push(x)
}
// loop thru the delay types
faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type.forEach(t => {
//
if (t.name !== "Airspace Flow Programs") {
// for each the there are two major keys, name and the list for that type
// get the key of the list
const keyname = Object.keys(t)[1]
// remove the "_list" part for passing to front end
const key = keyname.split('_').slice(0, -1).join('_')
if (this.debug)
console.log("key data=" + JSON.stringify(t[keyname][checktype[keyname]]) + "keyname=" + keyname + " key=" + checktype[keyname] + "\n")
if (!Array.isArray(t[keyname][checktype[keyname]])) {
const x = t[keyname][checktype[keyname]]
t[keyname][checktype[keyname]] = []
t[keyname][checktype[keyname]].push(x)
} else {
console.log("checkytype=" + checktype[keyname])
}
if (this.debug)
console.log("data=" + Object.keys(faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type)[0] + " data=" + JSON.stringify(t) + " keyname=" + keyname + " key=" + key + " last part=" + JSON.stringify(t[keyname][key]) + "\n")
// look thru all the aaffected airports for this record type
t[keyname][checktype[keyname]].forEach(airport_record => {
// if the airport is one the user requested
if (airports.includes('K' + airport_record.ARPT)) {
if (airportData['K' + airport_record.ARPT]['FAA'] == undefined)
airportData['K' + airport_record.ARPT]['FAA'] = {}
// save this data record
airportData['K' + airport_record.ARPT]['FAA'][key] = airport_record
}
})
}
});
// Emitting data to Socket
//self.sendSocketNotification("WX_RESULT", airportData);
} catch (error) {
console.error('Error fetching FAA data:', error);
}