src: Trying to implement module factory
This commit is contained in:
parent
44b71c5296
commit
da431878dd
202
src/index.js
202
src/index.js
@ -1,127 +1,127 @@
|
||||
const axios = require('axios');
|
||||
|
||||
const BASE_URL = "https://api.ebird.org/v2"
|
||||
const API_KEY = process.env.EBIRD_API_KEY;
|
||||
module.exports = function (EBIRD_API_KEY) {
|
||||
const BASE_URL = "https://api.ebird.org/v2"
|
||||
let key = EBIRD_API_KEY;
|
||||
|
||||
function query(endpoint, params) {
|
||||
let data = undefined;
|
||||
axios.get(`${BASE_URL}/${endpoint}`, {
|
||||
headers: {
|
||||
'X-eBirdApiToken': API_KEY
|
||||
},
|
||||
params: {
|
||||
...params
|
||||
}
|
||||
}).then((response) => {
|
||||
console.log('GET response');
|
||||
data = response.data;
|
||||
}).catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
return data;
|
||||
}
|
||||
|
||||
function get(endpoint) {
|
||||
return params => {
|
||||
query(endpoint, params);
|
||||
function query(endpoint, params) {
|
||||
let data = undefined;
|
||||
axios.get(`${BASE_URL}/${endpoint}`, {
|
||||
headers: {
|
||||
'X-eBirdApiToken': key
|
||||
},
|
||||
params: {
|
||||
...params
|
||||
}
|
||||
}).then((response) => {
|
||||
console.log('GET response');
|
||||
data = response.data;
|
||||
}).catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
const ebird = {
|
||||
data: {
|
||||
obs: {
|
||||
recent: {
|
||||
in: (regionCode) => get(`data/obs/${regionCode}/recent`),
|
||||
function get(endpoint) {
|
||||
return params => {
|
||||
query(endpoint, params);
|
||||
}
|
||||
}
|
||||
|
||||
const api = {
|
||||
data: {
|
||||
obs: {
|
||||
recent: {
|
||||
in: (regionCode) => get(`data/obs/${regionCode}/recent`),
|
||||
recent: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
for: (speciesCode) => get(`data/obs/${regionCode}/recent/${speciesCode}`)
|
||||
}
|
||||
},
|
||||
notable: {
|
||||
in: (regionCode) => get(`data/obs/${regionCode}/recent/notable`),
|
||||
},
|
||||
},
|
||||
},
|
||||
geo: {
|
||||
recent: {
|
||||
in: get(`data/obs/geo/recent`),
|
||||
species: (speciesCode) => get(`data/obs/geo/recent/${speciesCode}`),
|
||||
},
|
||||
},
|
||||
historic: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
for: (speciesCode) => get(`data/obs/${regionCode}/recent/${speciesCode}`)
|
||||
on: (year, month, day) => get(`data/${regionCode}/historic/${year}/${month}/${day}`)
|
||||
}
|
||||
},
|
||||
notable: {
|
||||
in: (regionCode) => get(`data/obs/${regionCode}/recent/notable`),
|
||||
},
|
||||
},
|
||||
nearest: {
|
||||
geo: {
|
||||
recent: {
|
||||
species: (speciesCode) => get(`data/nearest/geo/recent/${speciesCode}`),
|
||||
},
|
||||
},
|
||||
},
|
||||
geo: {
|
||||
recent: {
|
||||
in: get(`data/obs/geo/recent`),
|
||||
species: (speciesCode) => get(`data/obs/geo/recent/${speciesCode}`),
|
||||
},
|
||||
},
|
||||
historic: {
|
||||
},
|
||||
product: {
|
||||
lists: {
|
||||
get: (regionCode) => get(`product/lists/${regionCode}`),
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`data/${regionCode}/historic/${year}/${month}/${day}`)
|
||||
on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
nearest: {
|
||||
geo: {
|
||||
recent: {
|
||||
species: (speciesCode) => get(`data/nearest/geo/recent/${speciesCode}`),
|
||||
top100: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`),
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
product: {
|
||||
lists: {
|
||||
get: (regionCode) => get(`product/lists/${regionCode}`),
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
|
||||
stats: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`)
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
top100: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`),
|
||||
}
|
||||
spplist: {
|
||||
in: (regionCode) => get(`product/spplist/${regionCode}`),
|
||||
},
|
||||
checklist: {
|
||||
view: (subId) => get(`product/checklist/view/${subId}`),
|
||||
},
|
||||
},
|
||||
stats: {
|
||||
in: (regionCode) => {
|
||||
return {
|
||||
on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`)
|
||||
}
|
||||
}
|
||||
},
|
||||
spplist: {
|
||||
in: (regionCode) => get(`product/spplist/${regionCode}`),
|
||||
},
|
||||
checklist: {
|
||||
view: (subId) => get(`product/checklist/view/${subId}`),
|
||||
},
|
||||
},
|
||||
ref: {
|
||||
geo: {
|
||||
adjacent: {
|
||||
of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`),
|
||||
ref: {
|
||||
geo: {
|
||||
adjacent: {
|
||||
of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`),
|
||||
},
|
||||
},
|
||||
hotspot: {
|
||||
in: (regionCode) => get(`ref/hotspot/${regionCode}`),
|
||||
geo: get(`ref/hostspot/geo`),
|
||||
info: (locId) => get(`ref/hotspot/info/${locId}`),
|
||||
},
|
||||
taxonomy: {
|
||||
ebird: get(`ref/taxonomy/ebird`),
|
||||
versions: get(`ref/taxonomy/versions`),
|
||||
},
|
||||
taxon: {
|
||||
forms: (speciesCode) => get(`ref/taxon/${speciesCode}`),
|
||||
},
|
||||
taxa_locales: {
|
||||
ebird: get(`ref/taxa-locales/ebird`),
|
||||
},
|
||||
sppgroup: (speciesGrouping) => get(`ref/sppgroup/${speciesGrouping}`),
|
||||
region: {
|
||||
info: (regionCode) => get(`ref/region/${regionCode}`),
|
||||
list: (regionType, parentRegionCode) => get(`ref/region/list/${regionType}/${parentRegionCode}`),
|
||||
},
|
||||
},
|
||||
hotspot: {
|
||||
in: (regionCode) => get(`ref/hotspot/${regionCode}`),
|
||||
geo: get(`ref/hostspot/geo`),
|
||||
info: (locId) => get(`ref/hotspot/info/${locId}`),
|
||||
},
|
||||
taxonomy: {
|
||||
ebird: get(`ref/taxonomy/ebird`),
|
||||
versions: get(`ref/taxonomy/versions`),
|
||||
},
|
||||
taxon: {
|
||||
forms: (speciesCode) => get(`ref/taxon/${speciesCode}`),
|
||||
},
|
||||
taxa_locales: {
|
||||
ebird: get(`ref/taxa-locales/ebird`),
|
||||
},
|
||||
sppgroup: (speciesGrouping) => get(`ref/sppgroup/${speciesGrouping}`),
|
||||
region: {
|
||||
info: (regionCode) => get(`ref/region/${regionCode}`),
|
||||
list: (regionType, parentRegionCode) => get(`ref/region/list/${regionTypie}/${parentRegionCode}`),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = ebird;
|
||||
}
|
||||
};
|
@ -2,8 +2,8 @@ const ebird = require('../src/index');
|
||||
require('dotenv').config;
|
||||
|
||||
test('/data/obs/${regionCode}/recent for location France', () => {
|
||||
let data = ebird.obs.recent.in('FR');
|
||||
expect(data.length).toBeGreaterThan(1);
|
||||
let data = ebird.data.obs.recent.in('FR')();
|
||||
console.log(data);
|
||||
});
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user