Error handling
This commit is contained in:
@@ -3,25 +3,23 @@ import { setAirport } from "@/js/state";
|
||||
import { Airport } from "@/js/airport";
|
||||
import Metar from '@/components/Metar';
|
||||
|
||||
setAirport('KJYO', new Airport('Leesburg Executive Airport', 'KJYO'))
|
||||
setAirport('KHEF', new Airport('Manassas Regional Airpoirt', 'KHEF'))
|
||||
setAirport('KIAD', new Airport('Dulles International Airport', 'KIAD'))
|
||||
setAirport('KFDK', new Airport('Frederick Municipal Airport', 'KFDK'))
|
||||
setAirport('KMRB', new Airport('Eastern West Virginia Regional Airport', 'KMRB'))
|
||||
setAirport('KOKV', new Airport('Winchester Regional Airport', 'KOKV'))
|
||||
setAirport('KFRR', new Airport('Front Royal-Warren County Airport', 'KFRR'))
|
||||
setAirport('KLUA', new Airport('Luray Caverns Airport', 'KLUA'))
|
||||
setAirport('KSHD', new Airport('Shenandoah Valley Airport', 'KSHD'))
|
||||
setAirport('KCHO', new Airport('Charlottesville-Albemarle Airport', 'KCHO'))
|
||||
setAirport('KCJR', new Airport('Culpeper Regional Airport', 'KCJR'))
|
||||
setAirport('KHWY', new Airport('Warrenton-Fauquier Airport', 'KHWY'))
|
||||
setAirport('KRMN', new Airport('Stafford Regional Airport', 'KRMN'))
|
||||
setAirport('KEZF', new Airport('Shannon Airport', 'KEZF'))
|
||||
setAirport('KDCA', new Airport('Ronald Reagan Washington National Airport', 'KDCA'))
|
||||
// setAirport('KJYO', new Airport('Leesburg Executive Airport', 'KJYO'))
|
||||
setAirport('KHEF', new Airport('Manassas Regional Airpoirt', 'KHEF', 38.724, -77517))
|
||||
// setAirport('KIAD', new Airport('Dulles International Airport', 'KIAD'))
|
||||
// setAirport('KFDK', new Airport('Frederick Municipal Airport', 'KFDK'))
|
||||
// setAirport('KMRB', new Airport('Eastern West Virginia Regional Airport', 'KMRB'))
|
||||
// setAirport('KOKV', new Airport('Winchester Regional Airport', 'KOKV'))
|
||||
// setAirport('KFRR', new Airport('Front Royal-Warren County Airport', 'KFRR'))
|
||||
// setAirport('KLUA', new Airport('Luray Caverns Airport', 'KLUA'))
|
||||
// setAirport('KSHD', new Airport('Shenandoah Valley Airport', 'KSHD'))
|
||||
// setAirport('KCHO', new Airport('Charlottesville-Albemarle Airport', 'KCHO'))
|
||||
// setAirport('KCJR', new Airport('Culpeper Regional Airport', 'KCJR'))
|
||||
// setAirport('KHWY', new Airport('Warrenton-Fauquier Airport', 'KHWY'))
|
||||
// setAirport('KRMN', new Airport('Stafford Regional Airport', 'KRMN'))
|
||||
// setAirport('KEZF', new Airport('Shannon Airport', 'KEZF'))
|
||||
// setAirport('KDCA', new Airport('Ronald Reagan Washington National Airport', 'KDCA'))
|
||||
|
||||
export default function Page() {
|
||||
|
||||
|
||||
return <>
|
||||
<div>
|
||||
<Metar/>
|
||||
|
||||
@@ -17,7 +17,7 @@ export default async function Metar() {
|
||||
async function update() {
|
||||
const airports: Airport[] = getAirports();
|
||||
const metars = await getMetars(airports);
|
||||
for (let i = 0; i < airports.length; i++) {
|
||||
for (let i = 0; i < metars.length; i++) {
|
||||
airports[i].metar = metars[i];
|
||||
airports[i].latitude = metars[i].latitude;
|
||||
airports[i].longitude = metars[i].longitude;
|
||||
|
||||
@@ -7,11 +7,11 @@ export class Airport {
|
||||
longitude: number;
|
||||
metar: Metar | undefined;
|
||||
|
||||
constructor(name: string, icao: string) {
|
||||
constructor(name: string, icao: string, latitude: number, longitude: number) {
|
||||
this.name = name;
|
||||
this.icao = icao;
|
||||
this.latitude = 0;
|
||||
this.longitude = 0;
|
||||
this.latitude = latitude;
|
||||
this.longitude = longitude;
|
||||
this.metar = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,78 +2,88 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||
import axios from 'axios';
|
||||
import { xml2json } from 'xml-js';
|
||||
// import { xml2json } from 'xml-js';
|
||||
import { Airport } from './airport';
|
||||
|
||||
const base_url = 'https://beta.aviationweather.gov/cgi-bin/data';
|
||||
// const base_url = 'https://beta.aviationweather.gov/cgi-bin/data';
|
||||
|
||||
export async function getMetars(airports: Airport[]): Promise<Metar[]> {
|
||||
const stationICAOs: string = airports
|
||||
.map((airport) => airport.icao)
|
||||
.join(',');
|
||||
const url = `${base_url}/metar.php?ids=${stationICAOs}&format=xml`;
|
||||
const response = await axios
|
||||
.get(`${url}`)
|
||||
.catch((error) => console.error(`${error}`));
|
||||
const metars: Metar[] = [];
|
||||
if (response != null && response != undefined) {
|
||||
const json = xml2json(response.data, { compact: true });
|
||||
const jsonObject = JSON.parse(json);
|
||||
let metarData = jsonObject?.response?.data?.METAR;
|
||||
if (!Array.isArray(metarData)) {
|
||||
metarData = [metarData];
|
||||
}
|
||||
for (const data of metarData) {
|
||||
const sky_condition: {
|
||||
sky_cover: string;
|
||||
cloud_base_ft_agl: number;
|
||||
}[] = [];
|
||||
if (Array.isArray(data.sky_condition)) {
|
||||
for (const sc of data.sky_condition) {
|
||||
sky_condition.push({
|
||||
sky_cover: sc.sky_cover,
|
||||
cloud_base_ft_agl: Number(sc.cloud_base_ft_agl)
|
||||
})
|
||||
}
|
||||
} else {
|
||||
sky_condition.push({
|
||||
sky_cover: data.sky_condition?.sky_cover,
|
||||
cloud_base_ft_agl: Number(data.sky_condition?.cloud_base_ft_agl)
|
||||
})
|
||||
}
|
||||
const metar: Metar = {
|
||||
raw_text: data.raw_text._text,
|
||||
station_id: data.station_id._text,
|
||||
observation_time: data.observation_time._text,
|
||||
latitude: Number(data.latitude._text),
|
||||
longitude: Number(data.longitude._text),
|
||||
temp_c: Number(data.temp_c._text),
|
||||
dewpoint_c: Number(data.dewpoint_c._text),
|
||||
wind_dir_degrees: data.wind_dir_degrees._text,
|
||||
wind_speed_kt: Number(data.wind_speed_kt._text),
|
||||
visibility_statute_mi: data.visibility_statute_mi?._text,
|
||||
altim_in_hg: Number(data.altim_in_hg?._text),
|
||||
sea_level_pressure_mb: data.sea_level_pressure_mb?._text,
|
||||
quality_control_flags: {
|
||||
auto: data.quality_control_flags?.auto?._text == 'TRUE',
|
||||
auto_station: data.quality_control_flags?.auto_station?._text == 'TRUE',
|
||||
},
|
||||
wx_string: data.wx_string?._text,
|
||||
sky_condition: sky_condition,
|
||||
flight_category: data.flight_category._text,
|
||||
three_hr_pressure_tendency_mb: data.three_hr_pressure_tendency_mb?._text,
|
||||
metar_type: data.metar_type._text,
|
||||
maxT_c: Number(data.maxT_c?._text),
|
||||
minT_c: Number(data.minT_c?._text),
|
||||
precip_in: Number(data.precip_in?._text),
|
||||
elevation_m: Number(data.elevation_m._text),
|
||||
};
|
||||
metars.push(metar);
|
||||
}
|
||||
}
|
||||
return metars;
|
||||
.map((airport) => airport.icao)
|
||||
.join(',');
|
||||
const url = `http://localhost:5000/metars/KHEF`;
|
||||
const response = await axios.get(url).catch((error) => console.error(error));
|
||||
console.log(response);
|
||||
return [];
|
||||
}
|
||||
|
||||
// export async function getMetars(airports: Airport[]): Promise<Metar[]> {
|
||||
// const stationICAOs: string = airports
|
||||
// .map((airport) => airport.icao)
|
||||
// .join(',');
|
||||
// const url = `${base_url}/metar.php?ids=${stationICAOs}&format=xml`;
|
||||
// const response = await axios
|
||||
// .get(`${url}`)
|
||||
// .catch((error) => console.error(`${error}`));
|
||||
// const metars: Metar[] = [];
|
||||
// if (response != null && response != undefined) {
|
||||
// const json = xml2json(response.data, { compact: true });
|
||||
// const jsonObject = JSON.parse(json);
|
||||
// let metarData = jsonObject?.response?.data?.METAR;
|
||||
// if (!Array.isArray(metarData)) {
|
||||
// metarData = [metarData];
|
||||
// }
|
||||
// for (const data of metarData) {
|
||||
// const sky_condition: {
|
||||
// sky_cover: string;
|
||||
// cloud_base_ft_agl: number;
|
||||
// }[] = [];
|
||||
// if (Array.isArray(data.sky_condition)) {
|
||||
// for (const sc of data.sky_condition) {
|
||||
// sky_condition.push({
|
||||
// sky_cover: sc.sky_cover,
|
||||
// cloud_base_ft_agl: Number(sc.cloud_base_ft_agl)
|
||||
// })
|
||||
// }
|
||||
// } else {
|
||||
// sky_condition.push({
|
||||
// sky_cover: data.sky_condition?.sky_cover,
|
||||
// cloud_base_ft_agl: Number(data.sky_condition?.cloud_base_ft_agl)
|
||||
// })
|
||||
// }
|
||||
// const metar: Metar = {
|
||||
// raw_text: data.raw_text._text,
|
||||
// station_id: data.station_id._text,
|
||||
// observation_time: data.observation_time._text,
|
||||
// latitude: Number(data.latitude._text),
|
||||
// longitude: Number(data.longitude._text),
|
||||
// temp_c: Number(data.temp_c._text),
|
||||
// dewpoint_c: Number(data.dewpoint_c._text),
|
||||
// wind_dir_degrees: data.wind_dir_degrees._text,
|
||||
// wind_speed_kt: Number(data.wind_speed_kt._text),
|
||||
// visibility_statute_mi: data.visibility_statute_mi?._text,
|
||||
// altim_in_hg: Number(data.altim_in_hg?._text),
|
||||
// sea_level_pressure_mb: data.sea_level_pressure_mb?._text,
|
||||
// quality_control_flags: {
|
||||
// auto: data.quality_control_flags?.auto?._text == 'TRUE',
|
||||
// auto_station: data.quality_control_flags?.auto_station?._text == 'TRUE',
|
||||
// },
|
||||
// wx_string: data.wx_string?._text,
|
||||
// sky_condition: sky_condition,
|
||||
// flight_category: data.flight_category._text,
|
||||
// three_hr_pressure_tendency_mb: data.three_hr_pressure_tendency_mb?._text,
|
||||
// metar_type: data.metar_type._text,
|
||||
// maxT_c: Number(data.maxT_c?._text),
|
||||
// minT_c: Number(data.minT_c?._text),
|
||||
// precip_in: Number(data.precip_in?._text),
|
||||
// elevation_m: Number(data.elevation_m._text),
|
||||
// };
|
||||
// metars.push(metar);
|
||||
// }
|
||||
// }
|
||||
// return metars;
|
||||
// }
|
||||
|
||||
export interface Metar {
|
||||
raw_text: string;
|
||||
station_id: string;
|
||||
|
||||
Reference in New Issue
Block a user