You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
import 'dotenv/config'
|
|
import puppeteer from 'puppeteer'
|
|
|
|
import fetchILMeteo from './scrapers/iLMeteo.js'
|
|
import fetch3Bmeteo from './scrapers/3Bmeteo.js'
|
|
import fetchAeronauticaMilitare from './scrapers/AeronauticaMilitare.js'
|
|
import fetchOpenMeteo from './scrapers/OpenMeteo.js'
|
|
|
|
export default class WeatherScraper {
|
|
constructor() {
|
|
this.lock = false
|
|
this.data = {}
|
|
}
|
|
async init(opts) {
|
|
const NIX_OPS = {
|
|
executablePath: process.env.NIX_CHROMIUM_PATH,
|
|
}
|
|
const OPTS = process.env.ON_NIX ? NIX_OPS : {}
|
|
|
|
this.browser = await puppeteer.launch(OPTS)
|
|
await this.fetch()
|
|
}
|
|
async fetch() {
|
|
const timestamp = new Date().getTime()
|
|
|
|
if (this.lock) {
|
|
console.log(`[${timestamp}] skipped (locked)`)
|
|
return
|
|
}
|
|
this.lock = true
|
|
|
|
console.log(`[${timestamp}] updating`)
|
|
const [
|
|
// Comment out unwanted fields
|
|
iLMeteo,
|
|
treBmeteo,
|
|
openMeteo,
|
|
aeronauticaMilitare,
|
|
] = await Promise.all([
|
|
fetchILMeteo(this.browser),
|
|
fetch3Bmeteo(this.browser),
|
|
fetchOpenMeteo(),
|
|
fetchAeronauticaMilitare(this.browser),
|
|
])
|
|
|
|
console.log(`[${timestamp}] updated`)
|
|
this.data = {
|
|
timestamp,
|
|
iLMeteo,
|
|
treBmeteo,
|
|
openMeteo,
|
|
aeronauticaMilitare,
|
|
}
|
|
|
|
this.lock = false
|
|
}
|
|
}
|