@faa-aviation-data-portal/aeronav-charts
Version:
Fetch links and metadata for charts provided by Aeronav in a sane format.
102 lines (95 loc) • 2.73 kB
JavaScript
const superagent = require('superagent')
const { parseVfrTable } = require('./utils')
const baseURI =
'https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/'
// For some reason the server takes forever to respond without this request header
const ACCEPT = 'text/html'
const fetchIfr = async () => {
try {
const response = await superagent
.get(`${baseURI}/ifr`)
.set('Accept', ACCEPT)
.timeout({ deadline: 30000 })
.retry(5)
return response.text
} catch (err) {
console.error(`Error fetching values from ${baseURI}`, err)
}
}
exports.all = async () => {
const html = await fetchIfr()
const enrouteLow = parseEnrouteLow(html)
const enrouteHigh = parseEnrouteHigh(html)
const enrouteLowHighAlaska = parseEnrouteLowHighAlaska(html)
const enrouteArea = parseEnrouteArea(html)
const enrouteHawaiiPacific = parseEnrouteHawaiiPacific(html)
const planning = parsePlanning(html)
const gulf = parseGulf(html)
const caribbean = parseCaribbean(html)
return {
enrouteLow,
enrouteHigh,
enrouteLowHighAlaska,
enrouteArea,
enrouteHawaiiPacific,
planning,
gulf,
caribbean
}
}
exports.enrouteLow = async () => {
const html = await fetchIfr()
return parseEnrouteLow(html)
}
exports.enrouteHigh = async () => {
const html = await fetchIfr()
return parseEnrouteHigh(html)
}
exports.enrouteLowHighAlaska = async () => {
const html = await fetchIfr()
return parseEnrouteLowHighAlaska(html)
}
exports.enrouteArea = async () => {
const html = await fetchIfr()
return parseEnrouteArea(html)
}
exports.enrouteHawaiiPacific = async () => {
const html = await fetchIfr()
return parseEnrouteHawaiiPacific(html)
}
exports.planning = async () => {
const html = await fetchIfr()
return parsePlanning(html)
}
exports.gulf = async () => {
const html = await fetchIfr()
return parseGulf(html)
}
exports.caribbean = async () => {
const html = await fetchIfr()
return parseCaribbean(html)
}
const parseEnrouteLow = html => {
return parseVfrTable(html, '#lowsHighsAreas table', 0)
}
const parseEnrouteHigh = html => {
return parseVfrTable(html, '#lowsHighsAreas table', 1)
}
const parseEnrouteLowHighAlaska = html => {
return parseVfrTable(html, '#lowsHighsAreas table', 2)
}
const parseEnrouteArea = html => {
return parseVfrTable(html, '#lowsHighsAreas table', 3)
}
const parseEnrouteHawaiiPacific = html => {
return parseVfrTable(html, '#lowsHighsAreas table', 4)
}
const parsePlanning = html => {
return parseVfrTable(html, '#planning table')
}
const parseGulf = html => {
return parseVfrTable(html, '#gulf table')
}
const parseCaribbean = html => {
return parseVfrTable(html, '#caribbean table')
}