ggbgg
Version:
package to collect data from boardgamegeek
73 lines (68 loc) • 2.04 kB
JavaScript
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;