mirror of https://github.com/espruino/BangleApps
48 lines
1.6 KiB
JavaScript
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);
|
|
};
|
|
|