UNPKG

ggbgg

Version:

package to collect data from boardgamegeek

73 lines (68 loc) 2.04 kB
const bggapi = require('./bggapi'); const preprocessor = require('./preprocessor'); const helpers = { getData(what, options) { return bggapi.requestData(what, options) .then(response => preprocessor.parseXML(response.data)); }, getPlays(options, plays) { return bggapi.requestData('plays', options) .then((response) => { const playsPage = preprocessor.parseXML(response.data); const total = playsPage.plays.total; const updatedPlays = plays.concat(playsPage.plays.play); if (plays.length < total) { const updatedOptions = options; updatedOptions.page += 1; return helpers.getPlays(updatedOptions, updatedPlays); } return plays; }) .catch((err) => { console.log(err); }); }, }; const getters = {}; getters.get = { user(username, options = {}) { const params = options; params.name = username; return helpers.getData('user', params) .then(out => out.user) .then(out => preprocessor.user(out)) .catch((err) => { console.log(err); }); }, collection(username, options = {}) { const params = options; params.username = username; return helpers.getData('collection', params) .then(c => c.items.item) .then(c => preprocessor.collection(c)) .catch((err) => { // console.log(err); }); }, family(id, options = {}) { return helpers.getData('family', options); }, plays(username, options = {}) { // BGG allows only downloading games in bunch of 201, so we need to loop until we get all of it const params = options; params.username = username; params.page = 1; params.max = 0; return helpers.getPlays(params, []); }, item(id, options = {}) { const params = options; params.id = id; return helpers.getData('thing', params) .then(out => out.items.item) .then(out => preprocessor.game(out)); }, results() { return bggapi.results; }, }; module.exports = getters;