UNPKG

ggbgg

Version:

package to collect data from boardgamegeek

54 lines (51 loc) 1.79 kB
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;