ggbgg
Version:
package to collect data from boardgamegeek
54 lines (51 loc) • 1.79 kB
JavaScript
const parser = require('fast-xml-parser');
const he = require('he');
const preprocessor = {
game(obj) {
if (typeof obj === 'undefined') return null;
const keyValues = ['yearpublished', 'minplayers', 'maxplayers', 'playingtime', 'minplaytime',
'maxplaytime', 'minage'];
const processed = preprocessor.valuesToProperties(obj, keyValues);
processed.title = (Array.isArray(processed.name)) ? processed.name[0].value : processed.name.value;
return processed;
},
user(obj) {
if (obj.id === '') return null;
const keyValues = ['firstname', 'lastname', 'avatarlink', 'yearregistered', 'firstname',
'lastlogin', 'stateorprovince', 'country', 'webaddress', 'xboxaccount', 'wiiaccount',
'psnaccount', 'battlenetaccount', 'steamaccount', 'traderating', 'marketrating'];
const processed = preprocessor.valuesToProperties(obj, keyValues);
return processed;
},
collection(obj) {
const preprocessed = obj.map((item) => {
const newItem = item;
newItem.title = item.name['#text'];
newItem.name = undefined;
Object.keys(item.status).forEach((key) => {
newItem[key] = item.status[key];
});
newItem.status = undefined;
return newItem;
});
return preprocessed;
},
parseXML(data) {
const options = {
attributeNamePrefix: '',
ignoreAttributes: false,
parseAttributeValue: true,
attrValueProcessor: a => he.decode(a, { isAttributeValue: true }),
};
const obj = parser.parse(data, options);
return obj;
},
valuesToProperties(obj, keys) {
const processed = obj;
keys.forEach((x) => {
if (typeof processed[x] !== 'undefined') processed[x] = processed[x].value;
});
return processed;
},
};
module.exports = preprocessor;