BangleApps/apps/avwx/avwx.js

48 lines
1.6 KiB
JavaScript

/*
* AVWX Bangle Module
*
* AVWX doco: https://avwx.docs.apiary.io/
* test AVWX API request with eg.: curl -X GET 'https://avwx.rest/api/metar/43.9844,-88.5570?token=...'
*
*/
const AVWX_BASE_URL = 'https://avwx.rest/api/'; // must end with a slash
const AVWX_CONFIG_FILE = 'avwx.json';
// read in the settings
var AVWXsettings = Object.assign({
AVWXtoken: '',
}, require('Storage').readJSON(AVWX_CONFIG_FILE, true) || {});
/**
* Make an AVWX API request
*
* @param {string} requestPath API path (after /api/), eg. 'meta/KOSH'
* @param {string} params optional request parameters, eg. 'onfail=nearest' (use '&' in the string to combine multiple params)
* @param {function} successCB callback if the API request was successful - will supply the returned data: successCB(data)
* @param {function} failCB callback in case the API request failed - will supply the error: failCB(error)
*
* @returns {number} the HTTP request ID
*
* Example:
* reqID = avwx.request('metar/'+lat+','+lon,
* 'filter=sanitized&onfail=nearest',
* data => { console.log(data); },
* error => { console.log(error); });
*
*/
exports.request = function(requestPath, optParams, successCB, failCB) {
if (! AVWXsettings.AVWXtoken) {
failCB('No AVWX API Token defined!');
return undefined;
}
let params = 'token='+AVWXsettings.AVWXtoken;
if (optParams)
params += '&'+optParams;
return Bangle.http(AVWX_BASE_URL+requestPath+'?'+params).then(successCB).catch(failCB);
};