wrs-bmkg
Version:
Wrapper tidak resmi yang digunakan untuk mendapatkan informasi gempa dari WRS-BMKG
56 lines (48 loc) • 1.65 kB
JavaScript
// wrs.js
// Wrapper tidak resmi yang digunakan untuk mendapatkan informasi dari WRS BMKG
const miniget = require("miniget");
const events = require("events");
/*
* @param object apiURL
* return event
*/
module.exports = function newListener(apiURL = "https://bmkg-content-inatews.storage.googleapis.com") {
let event = new events();
let stop = false;
event.lastAlert = null;
event.lastRealtimeQL = null;
function get(t) {
if (stop) return;
miniget(apiURL, { path: `/datagempa.json?t=${Date.now()}` }).text().then(body => {
let msg = JSON.parse(body);
event.emit("incommingBody", body);
if (!!event.lastAlert && msg.identifier === event.lastAlert.identifier) return get();
event.lastAlert = msg;
event.emit(msg.info.event, msg.info);
// Then do a polling after request finished.
setTimeout(_ => get(t), t);
}).catch(err => event.emit('error', err));
miniget(apiURL, { path: `/lastQL.json?t=${Date.now()}` }).text().then(body => {
let msg = JSON.parse(body)
msg = msg.features[0];
event.emit("incommingBody_lastQL", body);
if (!!event.lastRealtimeQL && msg.properties.id === event.lastRealtimeQL.properties.id) return;
event.lastRealtimeQL = msg;
event.emit('realtime', msg);
}).catch(err => event.emit('error', err));
}
event.gempaQL = function getGempaQL () {
return new Promise((res, rej) => {
miniget(apiURL, { path: `/gempaQL.json` }).text().then(body => {
let msg = JSON.parse(body);
res(msg.features);
}).catch(rej);
});
}
event.startPolling = timeout => {
stop = false;
get(timeout || 10000);
}
event.stopPolling = _ => stop = true;
return event;
}