mirror of
https://github.com/badlogic/heissepreise.git
synced 2024-06-28 03:16:12 +02:00
Generate quantity and unified unit for spar data
This commit is contained in:
parent
b3d3a30286
commit
22f380c390
|
@ -1,16 +1,46 @@
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
const HITS = Math.floor(30000 + Math.random() * 2000);
|
const HITS = Math.floor(30000 + Math.random() * 2000);
|
||||||
|
|
||||||
|
const conversions = {
|
||||||
|
'G': { unit: 'g', factor: 1 },
|
||||||
|
'KG': { unit: 'g', factor: 1000 },
|
||||||
|
'L': { unit: 'ml', factor: 1000 },
|
||||||
|
'ML': { unit: 'ml', factor: 1 },
|
||||||
|
'STK': { unit: 'stk', factor: 1 },
|
||||||
|
'Stück': { unit: 'stk', factor: 1 },
|
||||||
|
'kg': { unit: 'g', factor: 1000 },
|
||||||
|
'l': { unit: 'ml', factor: 1000 },
|
||||||
|
'100ml': { unit: 'ml', factor: 100 },
|
||||||
|
'WG': { unit: 'wg', factor: 1 },
|
||||||
|
'100g': { unit: 'g', factor: 100 },
|
||||||
|
'm': { unit: 'cm', factor: 100 },
|
||||||
|
'ml': { unit: 'ml', factor: 1 },
|
||||||
|
};
|
||||||
|
|
||||||
exports.getCanonical = function(item, today) {
|
exports.getCanonical = function(item, today) {
|
||||||
let price, unit;
|
let price, unit, quantity;
|
||||||
if (item.masterValues["quantity-selector"]) {
|
if (item.masterValues["quantity-selector"]) {
|
||||||
const [str_price, str_unit] = item.masterValues["price-per-unit"].split('/');
|
const [str_price, str_unit] = item.masterValues["price-per-unit"].split('/');
|
||||||
price = parseFloat(str_price.replace("€", ""));
|
price = parseFloat(str_price.replace("€", ""));
|
||||||
unit = str_unit.trim();
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
price = item.masterValues.price;
|
price = item.masterValues.price;
|
||||||
unit = item.masterValues["short-description-3"];
|
}
|
||||||
|
if("short-description-3" in item.masterValues) {
|
||||||
|
let [rawQuantity, rawUnit] = item.masterValues["short-description-3"].replace(" EINWEG", "").replace(" MEHRWEG", "").trim().split(' ');
|
||||||
|
const conv = conversions[rawUnit];
|
||||||
|
quantity = parseFloat(rawQuantity.replace(',','.')) * conv.factor;
|
||||||
|
unit = conv.unit;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// use price per unit to calculate quantity (less accurate)
|
||||||
|
let [unitPrice, rawUnit] = item.masterValues['price-per-unit'].split('/');
|
||||||
|
unitPrice = parseFloat(unitPrice.replace("€", ""));
|
||||||
|
const conv = conversions[rawUnit];
|
||||||
|
if(conv === undefined)
|
||||||
|
console.error("unknown unit: " + rawUnit)
|
||||||
|
quantity = Math.round(price / unitPrice * conv.factor)
|
||||||
|
unit = conv.unit;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
id: item.masterValues["code-internal"],
|
id: item.masterValues["code-internal"],
|
||||||
|
@ -19,6 +49,7 @@ exports.getCanonical = function(item, today) {
|
||||||
price,
|
price,
|
||||||
priceHistory: [{ date: today, price }],
|
priceHistory: [{ date: today, price }],
|
||||||
unit,
|
unit,
|
||||||
|
quantity,
|
||||||
bio: item.masterValues.biolevel === "Bio"
|
bio: item.masterValues.biolevel === "Bio"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -27,4 +58,4 @@ exports.fetchData = async function() {
|
||||||
const SPAR_SEARCH = `https://search-spar.spar-ics.com/fact-finder/rest/v4/search/products_lmos_at?query=*&q=*&page=1&hitsPerPage=${HITS}`;
|
const SPAR_SEARCH = `https://search-spar.spar-ics.com/fact-finder/rest/v4/search/products_lmos_at?query=*&q=*&page=1&hitsPerPage=${HITS}`;
|
||||||
const rawItems = (await axios.get(SPAR_SEARCH)).data.hits;
|
const rawItems = (await axios.get(SPAR_SEARCH)).data.hits;
|
||||||
return rawItems?.hits || rawItems;
|
return rawItems?.hits || rawItems;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user