diff --git a/analysis.js b/analysis.js index a304f20..9255095 100644 --- a/analysis.js +++ b/analysis.js @@ -2,9 +2,7 @@ const fs = require("fs"); const fsAsync = require("fs").promises; const zlib = require("zlib"); const stores = require("./stores"); -const { FILE } = require("dns"); const { promisify } = require("util"); -const { dateToUint16 } = require("./site/js/misc"); const STORE_KEYS = Object.keys(stores); exports.STORE_KEYS = STORE_KEYS; @@ -149,7 +147,7 @@ function sortItems(items) { }); } -// Keep this in sync with utils.js:decompress +// Keep this in sync with items.js:decompress function compress(items) { const compressed = { stores: STORE_KEYS, @@ -170,6 +168,7 @@ function compress(items) { data.push(STORE_KEYS.indexOf(item.store)); data.push(item.id); data.push(item.name); + data.push(item.category ?? "A0"); data.push(item.priceHistory.length); for (price of item.priceHistory) { data.push(uniqueDates[price.date.replaceAll("-", "")]); @@ -179,7 +178,7 @@ function compress(items) { data.push(item.quantity); data.push(item.isWeighted ? 1 : 0); data.push(item.bio ? 1 : 0); - data.push(item.url?.replace(stores[item.store].urlBase, "")); + data.push(item.url?.replace(stores[item.store].urlBase, "") ?? ""); } return compressed; } @@ -210,10 +209,11 @@ exports.replay = function (rawDataDir) { const canonicalFiles = {}; for (const store of STORE_KEYS) { + stores[store].generateCategoryMapping(); storeFiles[store] = getFilteredFilesFor(store); canonicalFiles[store] = storeFiles[store].map((file) => { console.log(`Creating canonical items for ${file}`); - return getCanonicalFor(store, readJSON(file), file.match(/\d{4}-\d{2}-\d{2}/)[0]); + getCanonicalFor(store, readJSON(file), file.match(/\d{4}-\d{2}-\d{2}/)[0]); }); canonicalFiles[store].reverse(); } @@ -248,6 +248,8 @@ exports.updateData = async function (dataDir, done) { console.log("Fetching data for date: " + today); const storeFetchPromises = []; for (const store of STORE_KEYS) { + await stores[store].initializeCategoryMapping(); + storeFetchPromises.push( new Promise(async (resolve) => { const start = performance.now(); @@ -261,7 +263,18 @@ exports.updateData = async function (dataDir, done) { writeJSON(rawDataFile, storeItems, FILE_COMPRESSOR); } const storeItemsCanonical = getCanonicalFor(store, storeItems, today); - console.log(`Fetched ${store.toUpperCase()} data, took ${(performance.now() - start) / 1000} seconds`); + let numUncategorized = 0; + for (let i = 0; i < storeItemsCanonical.length; i++) { + const rawItem = storeItems[i]; + const item = storeItemsCanonical[i]; + item.category = stores[store].mapCategory(rawItem); + if (item.category == null) numUncategorized++; + } + console.log( + `Fetched ${store.toUpperCase()} data, took ${(performance.now() - start) / 1000} seconds, ${numUncategorized}/${ + storeItemsCanonical.length + } items without category.` + ); resolve(storeItemsCanonical); } catch (e) { console.error(`Error while fetching data from ${store}, continuing after ${(performance.now() - start) / 1000} seconds...`, e); diff --git a/server.js b/server.js index cf09f8e..85d77f2 100644 --- a/server.js +++ b/server.js @@ -14,6 +14,7 @@ function copyItemsToSite(dataDir) { const storeItems = items.filter((item) => item.store === store); analysis.writeJSON(`site/output/data/latest-canonical.${store}.compressed.json`, storeItems, false, 0, true); } + console.log("Copied latest items to site."); } function scheduleFunction(hour, minute, second, func) { diff --git a/site/cart.js b/site/cart.js index 62d6585..32e20ed 100644 --- a/site/cart.js +++ b/site/cart.js @@ -207,5 +207,6 @@ function loadCart() { cartList.model = cartFilter.model = cart; productsList.model = productsFilter.model = models.items; if (c || d) itemsChart.render(); + cartFilter.filter(); document.querySelector('[x-id="loader"]').classList.add("hidden"); })(); diff --git a/site/model/categories.js b/site/model/categories.js index b665582..d3a3fe2 100644 --- a/site/model/categories.js +++ b/site/model/categories.js @@ -149,6 +149,8 @@ exports.categories = [ }, ]; +exports.categories.forEach((category, index) => (category.index = index)); + exports.toCategoryCode = (i, j) => { return ( (i < 10 ? "" + i : String.fromCharCode("A".charCodeAt(0) + (i - 10))) + (j < 10 ? "" + j : String.fromCharCode("A".charCodeAt(0) + (j - 10))) @@ -156,7 +158,7 @@ exports.toCategoryCode = (i, j) => { }; exports.fromCategoryCode = (code) => { - if (code.length != 2) return [exports.categories.length - 1, 0]; + if (!code || code.length != 2) return [exports.categories.length - 1, 0]; const codeI = code.charCodeAt(0); const codeJ = code.charCodeAt(1); return [ diff --git a/site/model/items.js b/site/model/items.js index 08d67ce..16e50dc 100644 --- a/site/model/items.js +++ b/site/model/items.js @@ -175,6 +175,7 @@ class Items extends Model { const store = storeLookup[data[i++]]; const id = data[i++]; const name = data[i++]; + const category = data[i++]; const numPrices = data[i++]; const prices = new Array(numPrices); for (let j = 0; j < numPrices; j++) { @@ -195,6 +196,7 @@ class Items extends Model { store, id, name, + category, price: prices[0].price, priceHistory: prices, isWeighted, diff --git a/site/views/custom-checkbox.js b/site/views/custom-checkbox.js index 3896294..5ca5531 100644 --- a/site/views/custom-checkbox.js +++ b/site/views/custom-checkbox.js @@ -13,12 +13,19 @@ class CustomCheckbox extends View { - ${this.hasAttribute("abbr") ? `${label}` : label} + ${ + this.hasAttribute("abbr") + ? `${label}` + : `${label}` + } `; this.classList.add("customcheckbox"); this._checkbox = View.elements(this).checkbox; - this.setupEventHandlers(); + this._checkbox.addEventListener("change", (event) => { + event.stopPropagation(); + this.fireChangeEvent(); + }); } get checkbox() { @@ -32,5 +39,9 @@ class CustomCheckbox extends View { set checked(value) { this._checkbox.checked = value; } + + set label(value) { + this.elements.label.innerText = value; + } } customElements.define("custom-checkbox", CustomCheckbox); diff --git a/site/views/items-filter.js b/site/views/items-filter.js index d6ab5dd..ee45ff0 100644 --- a/site/views/items-filter.js +++ b/site/views/items-filter.js @@ -1,5 +1,6 @@ const { today, parseNumber, dom, getBooleanAttribute, queryItems, queryItemsAlasql, log, deltaTime } = require("../js/misc"); const { stores, STORE_KEYS, BUDGET_BRANDS } = require("../model/stores"); +const { fromCategoryCode, categories } = require("../model/categories"); const { settings } = require("../model"); const { View } = require("./view"); @@ -69,6 +70,19 @@ class ItemsFilter extends View { + + `; this.classList.add("items-filter"); @@ -102,7 +116,7 @@ class ItemsFilter extends View { }) ); - elements.allStores.addEventListener("change", handleChangeAll); + elements.allStores.addEventListener("x-change", handleChangeAll); elements.priceChangesToday.addEventListener("change", () => { if (elements.priceChangesToday.checked) elements.priceDirection.classList.remove("hidden"); @@ -218,11 +232,42 @@ class ItemsFilter extends View { } } - if (this.model.lastQuery && this.model.lastQuery != query && !this._noChartClear) { + let queryChanged = this.model.lastQuery && this.model.lastQuery != query; + if (queryChanged && !this._noChartClear) { filteredItems.forEach((item) => (item.chart = false)); } this.model.lastQuery = query; + if (this.model.numItemsBeforeCategories != filteredItems.length) queryChanged = true; + this.model.numItemsBeforeCategories = filteredItems.length; // This is not entirely correct, but I'm too lazy... + const filteredCategories = {}; + filteredItems.forEach((item) => { + const category = categories[fromCategoryCode(item.category)[0]]; + filteredCategories[category.index] = filteredCategories[category.index] ? filteredCategories[category.index] + 1 : 1; + }); + for (const category of categories) { + const checkbox = elements["category-" + category.index]; + if (filteredCategories[category.index] > 0) { + if (queryChanged) checkbox.checked = true; + checkbox.label = `${category.name} (${filteredCategories[category.index]})`; + checkbox.classList.remove("hidden"); + } else { + if (queryChanged) checkbox.checked = false; + checkbox.classList.add("hidden"); + } + } + + if (Object.keys(filteredCategories).length == 0) { + elements.categories.classList.add("hidden"); + } else { + elements.categories.classList.remove("hidden"); + } + + filteredItems = filteredItems.filter((item) => { + const category = categories[fromCategoryCode(item.category)[0]]; + return elements["category-" + category.index].checked; + }); + log(`ItemsFilter - Filtering ${this.model.items.length} took ${deltaTime(start).toFixed(4)} secs, ${filteredItems.length} results.`); this.model.removeListener(this._listener); diff --git a/stores/billa.js b/stores/billa.js index e146fab..2ac44b6 100644 --- a/stores/billa.js +++ b/stores/billa.js @@ -23,27 +23,11 @@ exports.getCanonical = function (item, today) { if (grammage) [quantity, unit] = grammage.trim().split(" ").splice(0, 2); } - let billaCategory = null; - for (const groupId of item.data.articleGroupIds) { - if (billaCategory == null) { - billaCategory = groupId; - continue; - } - - if (groupId.charCodeAt(3) < billaCategory.charCodeAt(3)) { - billaCategory = groupId; - } - } - let categoryCode = billaCategory.replace("B2-", "").substring(0, 2); - let [ci, cj] = fromCategoryCode(categoryCode); - categoryCode = toCategoryCode(ci - 1, cj - 1); - return utils.convertUnit( { id: item.data.articleId, name: item.data.name, description: item.data.description ?? "", - categoryCode, price: item.data.price.final, priceHistory: [{ date: today, price: item.data.price.final }], isWeighted: item.data.isWeightArticle, @@ -90,4 +74,27 @@ exports.fetchData = async function () { return items; }; +exports.initializeCategoryMapping = async () => { + // FIXME check if categories have changed. + console.log("No mapping for Billa"); +}; + +exports.mapCategory = (rawItem) => { + let billaCategory = null; + for (const groupId of rawItem.data.articleGroupIds) { + if (billaCategory == null) { + billaCategory = groupId; + continue; + } + + if (groupId.charCodeAt(3) < billaCategory.charCodeAt(3)) { + billaCategory = groupId; + } + } + let categoryCode = billaCategory.replace("B2-", "").substring(0, 2); + let [ci, cj] = fromCategoryCode(categoryCode); + categoryCode = toCategoryCode(ci - 1, cj - 1); + return categoryCode; +}; + exports.urlBase = "https://shop.billa.at"; diff --git a/stores/dm-de.js b/stores/dm-de.js index 19be722..fbae4a6 100644 --- a/stores/dm-de.js +++ b/stores/dm-de.js @@ -93,4 +93,8 @@ exports.fetchData = async function () { return dmItems; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.dm.de/product-p"; diff --git a/stores/dm.js b/stores/dm.js index a4d12e9..ec6b567 100644 --- a/stores/dm.js +++ b/stores/dm.js @@ -91,4 +91,8 @@ exports.fetchData = async function () { return dmItems; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.dm.at/product-p"; diff --git a/stores/hofer.js b/stores/hofer.js index 0ef6213..5520b4e 100644 --- a/stores/hofer.js +++ b/stores/hofer.js @@ -1,3 +1,5 @@ +const fs = require("fs"); +const path = require("path"); const axios = require("axios"); const utils = require("./utils"); @@ -35,31 +37,21 @@ exports.getCanonical = function (item, today) { ); }; +const HOFER_BASE_URL = `https://shopservice.roksh.at`; +const CATEGORIES = HOFER_BASE_URL + `/category/GetFullCategoryList/`; +const CONFIG = { headers: { authorization: null } }; +const TOKEN_DATA = { + OwnWebshopProviderCode: "", + SetUserSelectedShopsOnFirstSiteLoad: true, + RedirectToDashboardNeeded: false, + ShopsSelectedForRoot: "hofer", + BrandProviderSelectedForRoot: null, + UserSelectedShops: [], +}; +const ITEMS = HOFER_BASE_URL + `/productlist/CategoryProductList`; + exports.fetchData = async function () { - const HOFER_BASE_URL = `https://shopservice.roksh.at`; - const CATEGORIES = HOFER_BASE_URL + `/category/GetFullCategoryList/`; - const CONFIG = { headers: { authorization: null } }; - const ITEMS = HOFER_BASE_URL + `/productlist/CategoryProductList`; - - // fetch access token - const token_data = { - OwnWebshopProviderCode: "", - SetUserSelectedShopsOnFirstSiteLoad: true, - RedirectToDashboardNeeded: false, - ShopsSelectedForRoot: "hofer", - BrandProviderSelectedForRoot: null, - UserSelectedShops: [], - }; - const token = ( - await axios.post("https://shopservice.roksh.at/session/configure", token_data, { - headers: { Accept: "application/json", "Content-Type": "application/json" }, - }) - ).headers["jwt-auth"]; - CONFIG.headers.authorization = "Bearer " + token; - - // concat all subcategories (categories.[i].ChildList) - const categories = (await axios.post(CATEGORIES, {}, CONFIG)).data; - const subCategories = categories.reduce((acc, category) => acc.concat(category.ChildList), []); + const { subCategories } = await exports.getCategories(); let hoferItems = []; for (let subCategory of subCategories) { @@ -78,4 +70,73 @@ exports.fetchData = async function () { return hoferItems; }; +exports.getCategories = async () => { + const token = ( + await axios.post("https://shopservice.roksh.at/session/configure", TOKEN_DATA, { + headers: { Accept: "application/json", "Content-Type": "application/json" }, + }) + ).headers["jwt-auth"]; + CONFIG.headers.authorization = "Bearer " + token; + + // concat all subcategories (categories.[i].ChildList) + const categories = (await axios.post(CATEGORIES, {}, CONFIG)).data; + const subCategories = categories.reduce((acc, category) => acc.concat(category.ChildList), []); + return { categories, subCategories }; +}; + exports.urlBase = "https://www.roksh.at/hofer/produkte/"; + +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + +exports.generateCategoryMapping = async (rawItems) => { + const { categories } = await exports.getCategories(); + const lookup = {}; + const processCategory = (category) => { + lookup[category.ProgID] = { + category: category.ProgID, + url: category.Url, + code: "", + numItems: 0, + }; + + for (const child of category.ChildList) { + processCategory(child); + } + }; + for (const category of categories) { + processCategory(category); + } + + let total = 0; + for (const item of rawItems) { + if (!lookup[item.CategorySEOName]) { + console.log(`Couldn't find category '${item.CategorySEOName}' for Hofer product ${item.ProductName}`); + total++; + lookup[item.CategorySEOName] = { + category: item.CategorySEOName, + url: "", + code: "", + numItems: 1, + }; + } else { + const category = lookup[item.CategorySEOName]; + category.item = item; + category.numItems++; + } + } + const output = Object.keys(lookup).map((key) => lookup[key]); + const oldCategories = path.join(__dirname, "hofer-categories.json"); + fs.writeFileSync(path.join(__dirname, "hofer-categories.json"), JSON.stringify(output, null, 2)); +}; + +// Generate JSON for category mapping in stores/hofer-categories.json +if (require.main === module) { + (async () => { + const { readJSON } = require("../analysis"); + // const rawItems = await this.fetchData(); + const rawItems = readJSON("data/hofer-2023-06-20.json.br"); + await exports.generateCategoryMapping(rawItems); + })(); +} diff --git a/stores/lidl.js b/stores/lidl.js index 70e1876..46bebf1 100644 --- a/stores/lidl.js +++ b/stores/lidl.js @@ -57,4 +57,8 @@ exports.fetchData = async function () { return (await axios.get(LIDL_SEARCH)).data.filter((item) => !!item.price.price); }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.lidl.at"; diff --git a/stores/mpreis.js b/stores/mpreis.js index 56dafa9..23bddb8 100644 --- a/stores/mpreis.js +++ b/stores/mpreis.js @@ -58,4 +58,8 @@ exports.fetchData = async function () { return mpreisItems; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.mpreis.at/shop/p/"; diff --git a/stores/penny.js b/stores/penny.js index 9af921f..c170e43 100644 --- a/stores/penny.js +++ b/stores/penny.js @@ -47,4 +47,8 @@ exports.fetchData = async function () { return result; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.penny.at/produkte/"; diff --git a/stores/rewe-de.js b/stores/rewe-de.js index 8acccc2..d8e5992 100644 --- a/stores/rewe-de.js +++ b/stores/rewe-de.js @@ -111,4 +111,8 @@ exports.fetchData = async function () { } }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = ""; diff --git a/stores/spar-categories.json b/stores/spar-categories.json new file mode 100644 index 0000000..81ca0c5 --- /dev/null +++ b/stores/spar-categories.json @@ -0,0 +1,3002 @@ +[ + { + "id": "F16", + "description": "Regionalität", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16", + "code": null + }, + { + "id": "F16-1", + "description": "Kühlregal", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-1", + "code": null + }, + { + "id": "F16-1-1", + "description": "Milchprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-1-1", + "code": null + }, + { + "id": "F16-2", + "description": "Vorratsschrank", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-2", + "code": null + }, + { + "id": "F16-2-1", + "description": "Grundnahrungsmittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-2-1", + "code": null + }, + { + "id": "F16-3", + "description": "Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-3", + "code": null + }, + { + "id": "F16-4", + "description": "alkoholische Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-4", + "code": null + }, + { + "id": "F16-4-1", + "description": "Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-4-1", + "code": null + }, + { + "id": "F16-4-2", + "description": "Wein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-4-2", + "code": null + }, + { + "id": "F16-4-3", + "description": "Spirituosen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-4-3", + "code": null + }, + { + "id": "F16-5", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F16-5", + "code": null + }, + { + "id": "F17", + "description": "vegan & vegetarisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17", + "code": null + }, + { + "id": "F17-1", + "description": "Veggie Produkte gekühlt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1", + "code": null + }, + { + "id": "F17-1-1", + "description": "Pflanzlich & laktosefrei", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-1", + "code": null + }, + { + "id": "F17-1-2", + "description": "Veggie Gerichte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-2", + "code": null + }, + { + "id": "F17-1-3", + "description": "Veggie Laibchen & Bratlinge", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-3", + "code": null + }, + { + "id": "F17-1-4", + "description": "Veggie Aufstriche & Käseersatz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-4", + "code": null + }, + { + "id": "F17-1-5", + "description": "Fleischalternativen & Wurstersatz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-5", + "code": null + }, + { + "id": "F17-1-6", + "description": "Tofu", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-6", + "code": null + }, + { + "id": "F17-1-7", + "description": "Sojaprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-1-7", + "code": null + }, + { + "id": "F17-2", + "description": "Veggie Produkte ungekühlt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-2", + "code": null + }, + { + "id": "F17-2-1", + "description": "Reformprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-2-1", + "code": null + }, + { + "id": "F17-2-2", + "description": "Nahrungsergänzung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-2-2", + "code": null + }, + { + "id": "F17-2-3", + "description": "Sojadrinks, Getreidedrinks & Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-2-3", + "code": null + }, + { + "id": "F17-2-4", + "description": "Tofu & Soja", + "url": "https://www.interspar.at/shop/lebensmittel/c/F17-2-4", + "code": null + }, + { + "id": "F1", + "description": "Obst & Gemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1", + "code": null + }, + { + "id": "F1-1", + "description": "Frischgemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1", + "code": "01" + }, + { + "id": "F1-1-1", + "description": "Salat", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-1", + "code": null + }, + { + "id": "F1-1-2", + "description": "Tomaten & Gurken", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-2", + "code": null + }, + { + "id": "F1-1-3", + "description": "Paprika & Pfefferoni", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-3", + "code": null + }, + { + "id": "F1-1-4", + "description": "Wurzelgemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-4", + "code": null + }, + { + "id": "F1-1-5", + "description": "Kräuter", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-5", + "code": null + }, + { + "id": "F1-1-6", + "description": "Kartoffeln, Zwiebeln & Co.", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-6", + "code": null + }, + { + "id": "F1-1-7", + "description": "Zucchini, Melanzani & Co.", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-7", + "code": null + }, + { + "id": "F1-1-8", + "description": "Broccoli & Kohl", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-8", + "code": null + }, + { + "id": "F1-1-9", + "description": "Hülsenfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-9", + "code": null + }, + { + "id": "F1-1-10", + "description": "Pilze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-10", + "code": null + }, + { + "id": "F1-1-11", + "description": "Spargel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-1-11", + "code": null + }, + { + "id": "F1-2", + "description": "Frischobst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2", + "code": "00" + }, + { + "id": "F1-2-1", + "description": "Äpfel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-1", + "code": null + }, + { + "id": "F1-2-2", + "description": "Birnen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-2", + "code": null + }, + { + "id": "F1-2-3", + "description": "Steinobst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-3", + "code": null + }, + { + "id": "F1-2-4", + "description": "Beeren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-4", + "code": null + }, + { + "id": "F1-2-5", + "description": "Trauben", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-5", + "code": null + }, + { + "id": "F1-2-6", + "description": "Bananen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-6", + "code": null + }, + { + "id": "F1-2-7", + "description": "Zitrusfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-7", + "code": null + }, + { + "id": "F1-2-8", + "description": "Melonen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-8", + "code": null + }, + { + "id": "F1-2-9", + "description": "Exotische Früchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-2-9", + "code": null + }, + { + "id": "F1-3", + "description": "Obst-, Gemüse- & Salat-Zubereitungen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-3", + "code": "01" + }, + { + "id": "F1-3-1", + "description": "Gemüse- & Salat-Zubereitungen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-3-1", + "code": null + }, + { + "id": "F1-4", + "description": "Saisonartikel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-4", + "code": "01" + }, + { + "id": "F1-5", + "description": "Obst- & Gemüsekisten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F1-5", + "code": "00" + }, + { + "id": "F2", + "description": "Kühlregal", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2", + "code": null + }, + { + "id": "F2-1", + "description": "Molkerei & Eier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1", + "code": "34" + }, + { + "id": "F2-1-1", + "description": "Milch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-1", + "code": "34" + }, + { + "id": "F2-1-2", + "description": "Milchgetränk", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-2", + "code": "34" + }, + { + "id": "F2-1-3", + "description": "Eiskaffee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-3", + "code": "20" + }, + { + "id": "F2-1-4", + "description": "Produkte auf Pflanzenbasis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-4", + "code": "5D" + }, + { + "id": "F2-1-5", + "description": "Rahm, Schlagobers & Topfen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-5", + "code": "34" + }, + { + "id": "F2-1-7", + "description": "Butter, Margarine & Fette", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-7", + "code": "34" + }, + { + "id": "F2-1-8", + "description": "Eier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-1-8", + "code": "31" + }, + { + "id": "F2-2", + "description": "Joghurt & Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2", + "code": "34" + }, + { + "id": "F2-2-1", + "description": "Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2-1", + "code": null + }, + { + "id": "F2-2-2", + "description": "Pudding", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2-2", + "code": null + }, + { + "id": "F2-2-3", + "description": "Fruchtjoghurt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2-3", + "code": null + }, + { + "id": "F2-2-4", + "description": "Naturjoghurt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2-4", + "code": null + }, + { + "id": "F2-2-5", + "description": "Milchsnack", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-2-5", + "code": null + }, + { + "id": "F2-3", + "description": "Käse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3", + "code": "33" + }, + { + "id": "F2-3-1", + "description": "Hartkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-1", + "code": null + }, + { + "id": "F2-3-2", + "description": "Schnittkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-2", + "code": null + }, + { + "id": "F2-3-3", + "description": "Weichkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-3", + "code": null + }, + { + "id": "F2-3-4", + "description": "Frischkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-4", + "code": null + }, + { + "id": "F2-3-5", + "description": "Schmelzkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-5", + "code": null + }, + { + "id": "F2-3-6", + "description": "Sauermilchkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-6", + "code": null + }, + { + "id": "F2-3-7", + "description": "Käse in Scheiben", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-7", + "code": null + }, + { + "id": "F2-3-8", + "description": "Käse gerieben", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-8", + "code": null + }, + { + "id": "F2-3-9", + "description": "Käse für die warme Küche", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-3-9", + "code": null + }, + { + "id": "F2-4", + "description": "Aufstriche & Salate", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-4", + "code": "33" + }, + { + "id": "F2-4-1", + "description": "Aufstriche", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-4-1", + "code": null + }, + { + "id": "F2-4-2", + "description": "Gabelbissen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-4-2", + "code": null + }, + { + "id": "F2-4-3", + "description": "Feinkostsalate", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-4-3", + "code": null + }, + { + "id": "F2-5", + "description": "Fertiggerichte, Snacks & Teige", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5", + "code": "30" + }, + { + "id": "F2-5-1", + "description": "Sandwiches & Snacks", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-1", + "code": null + }, + { + "id": "F2-5-2", + "description": "Baguette & Pizzen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-2", + "code": null + }, + { + "id": "F2-5-3", + "description": "Hausmannskost", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-3", + "code": null + }, + { + "id": "F2-5-4", + "description": "Internationale Küche", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-4", + "code": null + }, + { + "id": "F2-5-5", + "description": "Fertigsuppen & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-5", + "code": null + }, + { + "id": "F2-5-6", + "description": "Fertignudeln & Teigwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-6", + "code": null + }, + { + "id": "F2-5-7", + "description": "Süßspeisen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-7", + "code": null + }, + { + "id": "F2-5-8", + "description": "Teige", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-5-8", + "code": null + }, + { + "id": "F2-6", + "description": "Vegetarisch, Tofu, Soja & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6", + "code": "3B" + }, + { + "id": "F2-6-1", + "description": "Produkte auf Pflanzenbasis & Laktosefrei", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-1", + "code": null + }, + { + "id": "F2-6-2", + "description": "Vegetarische Mahlzeiten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-2", + "code": null + }, + { + "id": "F2-6-3", + "description": "Vegetarische Aufstriche & Dip Saucen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-3", + "code": null + }, + { + "id": "F2-6-4", + "description": "Vegetarische Laibchen & Bratlinge", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-4", + "code": null + }, + { + "id": "F2-6-5", + "description": "Vegetarische Fleisch- & Wurstwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-5", + "code": null + }, + { + "id": "F2-6-6", + "description": "Tofu", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-6", + "code": null + }, + { + "id": "F2-6-7", + "description": "Vegetarischer Aufschnitt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-7", + "code": null + }, + { + "id": "F2-6-8", + "description": "Alternativen auf Soja Basis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F2-6-8", + "code": null + }, + { + "id": "F3", + "description": "Wurst, Fleisch & Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3", + "code": null + }, + { + "id": "F3-1", + "description": "Wurst & Selchwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1", + "code": "37" + }, + { + "id": "F3-1-1", + "description": "Salami", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-1", + "code": null + }, + { + "id": "F3-1-2", + "description": "Dauerwurst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-2", + "code": null + }, + { + "id": "F3-1-3", + "description": "Rohwurst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-3", + "code": null + }, + { + "id": "F3-1-4", + "description": "Spezialitäten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-4", + "code": null + }, + { + "id": "F3-1-5", + "description": "Streichwurst & Pasteten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-5", + "code": null + }, + { + "id": "F3-1-6", + "description": "Würstel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-6", + "code": null + }, + { + "id": "F3-1-7", + "description": "Schinken & Prosciutto", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-7", + "code": null + }, + { + "id": "F3-1-8", + "description": "Speck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-8", + "code": null + }, + { + "id": "F3-1-9", + "description": "Aufschnitt & Stangenwurst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-9", + "code": null + }, + { + "id": "F3-1-10", + "description": "Leberkäse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-10", + "code": null + }, + { + "id": "F3-1-11", + "description": "Sülzen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-11", + "code": null + }, + { + "id": "F3-1-12", + "description": "Selchwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-12", + "code": null + }, + { + "id": "F3-1-13", + "description": "Schmalz, Grammeln & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-1-13", + "code": null + }, + { + "id": "F3-2", + "description": "Frischfleisch & -Geflügel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2", + "code": "32" + }, + { + "id": "F3-2-1", + "description": "Schwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-1", + "code": null + }, + { + "id": "F3-2-2", + "description": "Rind", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-2", + "code": null + }, + { + "id": "F3-2-3", + "description": "Kalb", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-3", + "code": null + }, + { + "id": "F3-2-5", + "description": "Sonstige Fleischprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-5", + "code": null + }, + { + "id": "F3-2-6", + "description": "Huhn", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-6", + "code": null + }, + { + "id": "F3-2-7", + "description": "Pute", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-7", + "code": null + }, + { + "id": "F3-2-8", + "description": "Sonstiges Geflügel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-2-8", + "code": null + }, + { + "id": "F3-3", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3", + "code": "39" + }, + { + "id": "F3-3-1", + "description": "Fischfeinkost, Marinaden & Kaviar", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-1", + "code": null + }, + { + "id": "F3-3-2", + "description": "Räucherlachs", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-2", + "code": null + }, + { + "id": "F3-3-3", + "description": "Räucherforelle", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-3", + "code": null + }, + { + "id": "F3-3-4", + "description": "Sonstige Fische geräuchert", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-4", + "code": null + }, + { + "id": "F3-3-5", + "description": "Meeresfische & -früchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-5", + "code": null + }, + { + "id": "F3-3-6", + "description": "Sushi", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-6", + "code": null + }, + { + "id": "F3-3-7", + "description": "Frischfisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F3-3-7", + "code": null + }, + { + "id": "F4", + "description": "Vorratsschrank", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4", + "code": null + }, + { + "id": "F4-1", + "description": "Feinkost & Konserven", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1", + "code": "57" + }, + { + "id": "F4-1-1", + "description": "Gemüse & Sauergemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-1", + "code": null + }, + { + "id": "F4-1-2", + "description": "Obst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-2", + "code": null + }, + { + "id": "F4-1-3", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-3", + "code": null + }, + { + "id": "F4-1-4", + "description": "Pikante Aufstriche & Pasteten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-4", + "code": null + }, + { + "id": "F4-1-5", + "description": "Fertiggerichte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-5", + "code": null + }, + { + "id": "F4-1-6", + "description": "Suppen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-1-6", + "code": null + }, + { + "id": "F4-2", + "description": "Frühstück", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-2", + "code": "56" + }, + { + "id": "F4-2-1", + "description": "Konfitüre", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-2-1", + "code": "56" + }, + { + "id": "F4-2-2", + "description": "Honig", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-2-2", + "code": "56" + }, + { + "id": "F4-2-3", + "description": "Nuss- & Schokoaufstriche", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-2-3", + "code": "56" + }, + { + "id": "F4-2-4", + "description": "Cerealien & Müsli", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-2-4", + "code": "5A" + }, + { + "id": "F4-3", + "description": "Grundnahrungsmittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3", + "code": "5F" + }, + { + "id": "F4-3-1", + "description": "Gewürze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-1", + "code": "55" + }, + { + "id": "F4-3-2", + "description": "Saucen & Würze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-2", + "code": "5C" + }, + { + "id": "F4-3-3", + "description": "Saucen Süß", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-3", + "code": "5C" + }, + { + "id": "F4-3-4", + "description": "Senf & Kren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-4", + "code": "5C" + }, + { + "id": "F4-3-5", + "description": "Ketchup & Mayonnaise", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-5", + "code": "5C" + }, + { + "id": "F4-3-6", + "description": "Essig", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-6", + "code": "53" + }, + { + "id": "F4-3-7", + "description": "Öl", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-7", + "code": "53" + }, + { + "id": "F4-3-8", + "description": "Dressing & Croutons", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-8", + "code": "5C" + }, + { + "id": "F4-3-9", + "description": "Zucker", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-9", + "code": "5E" + }, + { + "id": "F4-3-10", + "description": "Salz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-3-10", + "code": "55" + }, + { + "id": "F4-4", + "description": "Beilagen & Basisprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4", + "code": "5B" + }, + { + "id": "F4-4-1", + "description": "Teigwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-1", + "code": "5B" + }, + { + "id": "F4-4-2", + "description": "Reis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-2", + "code": "5B" + }, + { + "id": "F4-4-3", + "description": "Kartoffelprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-3", + "code": "5F" + }, + { + "id": "F4-4-4", + "description": "Samen & Hülsenfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-4", + "code": "57" + }, + { + "id": "F4-4-5", + "description": "Fix- & Basisprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-5", + "code": "5F" + }, + { + "id": "F4-4-7", + "description": "Saucen & Würze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-7", + "code": "5C" + }, + { + "id": "F4-4-8", + "description": "Einkochen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-8", + "code": "52" + }, + { + "id": "F4-4-10", + "description": "Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-10", + "code": "58" + }, + { + "id": "F4-4-6", + "description": "Suppen & Bouillons", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-4-6", + "code": "54" + }, + { + "id": "F4-5", + "description": "Getreideprodukte & Backen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5", + "code": null + }, + { + "id": "F4-5-1", + "description": "Mehl", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-1", + "code": "59" + }, + { + "id": "F4-5-2", + "description": "Grieß & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-2", + "code": "59" + }, + { + "id": "F4-5-3", + "description": "Getreideprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-3", + "code": "59" + }, + { + "id": "F4-5-4", + "description": "Backmischungen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-4", + "code": "52" + }, + { + "id": "F4-5-5", + "description": "Backzutaten & Hilfsmittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-5", + "code": "52" + }, + { + "id": "F4-5-6", + "description": "Verfeinerungen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-5-6", + "code": "52" + }, + { + "id": "F4-6", + "description": "Trockenfrüchte, Nüsse & Kerne", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-6", + "code": "03" + }, + { + "id": "F4-6-1", + "description": "Trockenfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-6-1", + "code": null + }, + { + "id": "F4-6-2", + "description": "Nüsse & Kerne", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-6-2", + "code": null + }, + { + "id": "F4-7", + "description": "Reform & Nahrungsergänzung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-7", + "code": "5D" + }, + { + "id": "F4-7-1", + "description": "Reformprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-7-1", + "code": null + }, + { + "id": "F4-7-2", + "description": "Nahrungsergänzung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-7-2", + "code": null + }, + { + "id": "F4-7-3", + "description": "Soja-, Getreidedrinks & Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-7-3", + "code": null + }, + { + "id": "F4-7-4", + "description": "Tofu & Soja ungekühlt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-7-4", + "code": null + }, + { + "id": "F4-8", + "description": "Asien & Mexiko", + "url": "https://www.interspar.at/shop/lebensmittel/c/F4-8", + "code": "50" + }, + { + "id": "F5", + "description": "Süßwaren & Knabbereien", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5", + "code": null + }, + { + "id": "F5-1", + "description": "Süßwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1", + "code": "64" + }, + { + "id": "F5-1-1", + "description": "Kekse & Biskotten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-1", + "code": null + }, + { + "id": "F5-1-2", + "description": "Waffeln & Schnitten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-2", + "code": null + }, + { + "id": "F5-1-3", + "description": "Kaugummi", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-3", + "code": null + }, + { + "id": "F5-1-4", + "description": "Pralinen & Dragees", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-4", + "code": null + }, + { + "id": "F5-1-5", + "description": "Schokolade", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-5", + "code": null + }, + { + "id": "F5-1-6", + "description": "Riegel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-6", + "code": null + }, + { + "id": "F5-1-7", + "description": "Bonbons & Pastillen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-7", + "code": null + }, + { + "id": "F5-1-8", + "description": "Fruchtgummi", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-8", + "code": null + }, + { + "id": "F5-1-9", + "description": "Schoko- & Schaumzuckerware", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-9", + "code": null + }, + { + "id": "F5-1-10", + "description": "Lebkuchen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-10", + "code": null + }, + { + "id": "F5-1-11", + "description": "Saisonartikel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-11", + "code": null + }, + { + "id": "F5-1-12", + "description": "Sonstige Süßwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-1-12", + "code": null + }, + { + "id": "F5-2", + "description": "Knabbergebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2", + "code": "63" + }, + { + "id": "F5-2-1", + "description": "Chips & Snips", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-1", + "code": null + }, + { + "id": "F5-2-2", + "description": "Nachos & Dips", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-2", + "code": null + }, + { + "id": "F5-2-3", + "description": "Nüsse & Kerne", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-3", + "code": null + }, + { + "id": "F5-2-4", + "description": "Laugengebäck & Salzgebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-4", + "code": null + }, + { + "id": "F5-2-5", + "description": "Popcorn", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-5", + "code": null + }, + { + "id": "F5-2-6", + "description": "Reiswaffeln & mehr", + "url": "https://www.interspar.at/shop/lebensmittel/c/F5-2-6", + "code": null + }, + { + "id": "F6", + "description": "Brot & Gebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6", + "code": null + }, + { + "id": "F6-1", + "description": "Aufbackware Brot & Gebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-1", + "code": "10" + }, + { + "id": "F6-2", + "description": "Brot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2", + "code": "11" + }, + { + "id": "F6-2-1", + "description": "Schwarzbrot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-1", + "code": null + }, + { + "id": "F6-2-2", + "description": "Spezialbrot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-2", + "code": null + }, + { + "id": "F6-2-3", + "description": "Vollkornbrot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-3", + "code": null + }, + { + "id": "F6-2-4", + "description": "Weiß- & Halbweißbrot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-4", + "code": null + }, + { + "id": "F6-2-5", + "description": "Toast", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-5", + "code": null + }, + { + "id": "F6-2-6", + "description": "Baguette & Ciabatta", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-6", + "code": null + }, + { + "id": "F6-2-7", + "description": "Sonstiges Brot", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-2-7", + "code": null + }, + { + "id": "F6-3", + "description": "Gebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3", + "code": "11" + }, + { + "id": "F6-3-1", + "description": "Semmel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3-1", + "code": null + }, + { + "id": "F6-3-2", + "description": "Salzstangerl", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3-2", + "code": null + }, + { + "id": "F6-3-3", + "description": "Korn- & Vollkorngebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3-3", + "code": null + }, + { + "id": "F6-3-4", + "description": "Laugengebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3-4", + "code": null + }, + { + "id": "F6-3-5", + "description": "Sonstiges Kleingebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-3-5", + "code": null + }, + { + "id": "F6-4", + "description": "Feinbackwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4", + "code": "12" + }, + { + "id": "F6-4-1", + "description": "Croissant & Plundergebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-1", + "code": null + }, + { + "id": "F6-4-2", + "description": "Strudel & Hefeteiggebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-2", + "code": null + }, + { + "id": "F6-4-3", + "description": "Zöpfe", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-3", + "code": null + }, + { + "id": "F6-4-4", + "description": "Kuchen & Torten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-4", + "code": null + }, + { + "id": "F6-4-5", + "description": "Rouladen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-5", + "code": null + }, + { + "id": "F6-4-6", + "description": "Schnitten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-6", + "code": null + }, + { + "id": "F6-4-7", + "description": "Kekse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-7", + "code": null + }, + { + "id": "F6-4-9", + "description": "Sonstige Konditoreiwaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-9", + "code": null + }, + { + "id": "F6-4-11", + "description": "Saisonware", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-4-11", + "code": null + }, + { + "id": "F6-5", + "description": "Knäckebrot & Zwieback", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-5", + "code": "12" + }, + { + "id": "F6-5-1", + "description": "Knäckebrot, Grissini & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-5-1", + "code": null + }, + { + "id": "F6-5-2", + "description": "Zwieback", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-5-2", + "code": null + }, + { + "id": "F6-6", + "description": "Brösel & Semmelwürfel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F6-6", + "code": "14" + }, + { + "id": "F7", + "description": "Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7", + "code": null + }, + { + "id": "F7-1", + "description": "Softdrinks & Säfte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1", + "code": "20" + }, + { + "id": "F7-1-1", + "description": "Fruchtsäfte & Nektare", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-1", + "code": null + }, + { + "id": "F7-1-2", + "description": "Fruchtsäfte gespritzt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-2", + "code": null + }, + { + "id": "F7-1-3", + "description": "Cola & Limonaden", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-3", + "code": null + }, + { + "id": "F7-1-4", + "description": "Tonic & Bitter Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-4", + "code": null + }, + { + "id": "F7-1-5", + "description": "Eistee & Getränke auf Teebasis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-5", + "code": null + }, + { + "id": "F7-1-6", + "description": "Sirupe", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-6", + "code": null + }, + { + "id": "F7-1-7", + "description": "Smoothies & gekühlte Säfte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-7", + "code": null + }, + { + "id": "F7-1-8", + "description": "Sport- & isotonische Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-8", + "code": null + }, + { + "id": "F7-1-9", + "description": "Energy Drinks", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-1-9", + "code": null + }, + { + "id": "F7-2", + "description": "Mineral- & Tafelwasser", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-2", + "code": "26" + }, + { + "id": "F7-2-1", + "description": "Mineralwasser", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-2-1", + "code": null + }, + { + "id": "F7-2-3", + "description": "Fruchtiges Mineralwasser", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-2-3", + "code": null + }, + { + "id": "F7-3", + "description": "Kaffee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-3", + "code": "22" + }, + { + "id": "F7-3-2", + "description": "Ganze Bohnen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-3-2", + "code": null + }, + { + "id": "F7-3-3", + "description": "Gemahlen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-3-3", + "code": null + }, + { + "id": "F7-3-4", + "description": "Kapseln & Pads", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-3-4", + "code": null + }, + { + "id": "F7-3-5", + "description": "löslich", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-3-5", + "code": null + }, + { + "id": "F7-4", + "description": "Tee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-4", + "code": "22" + }, + { + "id": "F7-4-1", + "description": "Früchtetee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-4-1", + "code": null + }, + { + "id": "F7-4-2", + "description": "Kräutertee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-4-2", + "code": null + }, + { + "id": "F7-4-3", + "description": "Grüner & Weißer Tee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-4-3", + "code": null + }, + { + "id": "F7-4-4", + "description": "Schwarzer Tee", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-4-4", + "code": null + }, + { + "id": "F7-5", + "description": "Kakao", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-5", + "code": "22" + }, + { + "id": "F7-6", + "description": "Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6", + "code": "21" + }, + { + "id": "F7-6-1", + "description": "Lager/Märzen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-1", + "code": null + }, + { + "id": "F7-6-2", + "description": "Schankbier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-2", + "code": null + }, + { + "id": "F7-6-3", + "description": "Obersorten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-3", + "code": null + }, + { + "id": "F7-6-4", + "description": "Pils", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-4", + "code": null + }, + { + "id": "F7-6-5", + "description": "Bockbier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-5", + "code": null + }, + { + "id": "F7-6-6", + "description": "Unfiltriert/Zwickl Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-6", + "code": null + }, + { + "id": "F7-6-7", + "description": "Dunkles Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-7", + "code": null + }, + { + "id": "F7-6-8", + "description": "Spezialbier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-8", + "code": null + }, + { + "id": "F7-6-9", + "description": "Weizenbier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-9", + "code": null + }, + { + "id": "F7-6-10", + "description": "Sonstige Biere", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-10", + "code": null + }, + { + "id": "F7-6-11", + "description": "Alkoholreduziertes Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-11", + "code": null + }, + { + "id": "F7-6-12", + "description": "Alkoholfreies Bier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-12", + "code": null + }, + { + "id": "F7-6-13", + "description": "Radler", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-13", + "code": null + }, + { + "id": "F7-6-14", + "description": "Craft Beer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-6-14", + "code": null + }, + { + "id": "F7-7", + "description": "Wein & Schaumwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7", + "code": null + }, + { + "id": "F7-7-1", + "description": "Rotwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-1", + "code": "25" + }, + { + "id": "F7-7-2", + "description": "Weißwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-2", + "code": "25" + }, + { + "id": "F7-7-3", + "description": "Rosewein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-3", + "code": "25" + }, + { + "id": "F7-7-4", + "description": "Dessertwein, Sherry & Port", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-4", + "code": "25" + }, + { + "id": "F7-7-5", + "description": "Sekt & Champagner", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-5", + "code": "23" + }, + { + "id": "F7-7-6", + "description": "Frizzante & Prosecco", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-6", + "code": "23" + }, + { + "id": "F7-7-7", + "description": "Cider & Fruchtschaumwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-7", + "code": "25" + }, + { + "id": "F7-7-8", + "description": "Weinhaltige Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-8", + "code": "25" + }, + { + "id": "F7-7-9", + "description": "Alkoholfreier Wein & Schaumwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-7-9", + "code": "25" + }, + { + "id": "F7-8", + "description": "Spirituosen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8", + "code": "24" + }, + { + "id": "F7-8-1", + "description": "Whisky/Whiskey", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-1", + "code": null + }, + { + "id": "F7-8-2", + "description": "Weinbrand", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-2", + "code": null + }, + { + "id": "F7-8-3", + "description": "Vodka", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-3", + "code": null + }, + { + "id": "F7-8-4", + "description": "Rum", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-4", + "code": null + }, + { + "id": "F7-8-5", + "description": "Edelbrände", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-5", + "code": null + }, + { + "id": "F7-8-6", + "description": "Tequila & Gin", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-6", + "code": null + }, + { + "id": "F7-8-7", + "description": "Liköre", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-7", + "code": null + }, + { + "id": "F7-8-8", + "description": "Wermut", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-8", + "code": null + }, + { + "id": "F7-8-9", + "description": "Bittergetränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-9", + "code": null + }, + { + "id": "F7-8-10", + "description": "Premixes", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-10", + "code": null + }, + { + "id": "F7-8-11", + "description": "Heißgetränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F7-8-11", + "code": null + }, + { + "id": "F8", + "description": "Tiefkühlung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8", + "code": null + }, + { + "id": "F8-1", + "description": "Fleisch, Fisch & Meeresfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1", + "code": "42" + }, + { + "id": "F8-1-1", + "description": "Schwein", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-1", + "code": "42" + }, + { + "id": "F8-1-2", + "description": "Rind & Wild", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-2", + "code": "42" + }, + { + "id": "F8-1-3", + "description": "Gans & Ente", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-3", + "code": "42" + }, + { + "id": "F8-1-4", + "description": "Huhn & Pute", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-4", + "code": "42" + }, + { + "id": "F8-1-5", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-5", + "code": "43" + }, + { + "id": "F8-1-6", + "description": "Meeresfrüchte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-1-6", + "code": "43" + }, + { + "id": "F8-2", + "description": "Gemüse, Obst & Kartoffelprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2", + "code": "41" + }, + { + "id": "F8-2-1", + "description": "Gemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2-1", + "code": "44" + }, + { + "id": "F8-2-2", + "description": "Kräuter & Pilze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2-2", + "code": "44" + }, + { + "id": "F8-2-3", + "description": "Obst", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2-3", + "code": "47" + }, + { + "id": "F8-2-4", + "description": "Pommes Frites", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2-4", + "code": "45" + }, + { + "id": "F8-2-5", + "description": "Kroketten & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-2-5", + "code": "45" + }, + { + "id": "F8-3", + "description": "Fertiggerichte & Teige", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3", + "code": "42" + }, + { + "id": "F8-3-1", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-1", + "code": null + }, + { + "id": "F8-3-2", + "description": "Gemüse", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-2", + "code": null + }, + { + "id": "F8-3-3", + "description": "Traditionelle Gerichte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-3", + "code": null + }, + { + "id": "F8-3-4", + "description": "Internationale Gerichte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-4", + "code": null + }, + { + "id": "F8-3-5", + "description": "Knödel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-5", + "code": null + }, + { + "id": "F8-3-8", + "description": "Tiefkühlteige", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-3-8", + "code": null + }, + { + "id": "F8-4", + "description": "Pizza, Baguette & Gebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4", + "code": null + }, + { + "id": "F8-4-1", + "description": "Baguette", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4-1", + "code": "46" + }, + { + "id": "F8-4-2", + "description": "Pizzasnacks", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4-2", + "code": "46" + }, + { + "id": "F8-4-3", + "description": "American Style Pizza", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4-3", + "code": "46" + }, + { + "id": "F8-4-4", + "description": "Italian Style Pizza", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4-4", + "code": "46" + }, + { + "id": "F8-4-5", + "description": "Tiefkühl Gebäck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-4-5", + "code": "46" + }, + { + "id": "F8-5", + "description": "Mehlspeisen & Eis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5", + "code": "42" + }, + { + "id": "F8-5-1", + "description": "Süße Knödel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-1", + "code": "47" + }, + { + "id": "F8-5-2", + "description": "Strudel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-2", + "code": "47" + }, + { + "id": "F8-5-3", + "description": "Nudeln", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-3", + "code": "47" + }, + { + "id": "F8-5-5", + "description": "Sonstige klassische Mehlspeisen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-5", + "code": "47" + }, + { + "id": "F8-5-6", + "description": "Torten, Kuchen & Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-6", + "code": "47" + }, + { + "id": "F8-5-7", + "description": "Eisbecher", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-7", + "code": "40" + }, + { + "id": "F8-5-8", + "description": "Eis am Stiel & Stanitzel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-8", + "code": "40" + }, + { + "id": "F8-5-10", + "description": "Eis", + "url": "https://www.interspar.at/shop/lebensmittel/c/F8-5-10", + "code": "40" + }, + { + "id": "F9", + "description": "Baby", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9", + "code": null + }, + { + "id": "F9-1", + "description": "Babynahrung & Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1", + "code": "51" + }, + { + "id": "F9-1-1", + "description": "Milchfertignahrung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-1", + "code": "51" + }, + { + "id": "F9-1-2", + "description": "Breie", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-2", + "code": "51" + }, + { + "id": "F9-1-3", + "description": "Menüs", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-3", + "code": "51" + }, + { + "id": "F9-1-4", + "description": "Gemüse & Gemüsemischungen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-4", + "code": "51" + }, + { + "id": "F9-1-5", + "description": "Früchte, Mischungen & Desserts", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-5", + "code": "51" + }, + { + "id": "F9-1-6", + "description": "Snacks", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-6", + "code": "51" + }, + { + "id": "F9-1-7", + "description": "Getränke", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-1-7", + "code": "51" + }, + { + "id": "F9-2", + "description": "Flaschen & Sauger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-2", + "code": "70" + }, + { + "id": "F9-2-2", + "description": "Sauger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-2-2", + "code": "70" + }, + { + "id": "F9-3", + "description": "Pflege & Windeln", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3", + "code": "60" + }, + { + "id": "F9-3-1", + "description": "Windeln", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-1", + "code": null + }, + { + "id": "F9-3-2", + "description": "Babytücher", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-2", + "code": null + }, + { + "id": "F9-3-3", + "description": "Lotionen, Creme, Öl & Puder", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-3", + "code": null + }, + { + "id": "F9-3-4", + "description": "Bad & Reinigung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-4", + "code": null + }, + { + "id": "F9-3-7", + "description": "Essen & Trinken", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-7", + "code": null + }, + { + "id": "F9-3-8", + "description": "Pflege & Sicherheit", + "url": "https://www.interspar.at/shop/lebensmittel/c/F9-3-8", + "code": null + }, + { + "id": "F10", + "description": "Tiere", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10", + "code": null + }, + { + "id": "F10-1", + "description": "Tiernahrung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1", + "code": "92" + }, + { + "id": "F10-1-1", + "description": "Hund", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1-1", + "code": "90" + }, + { + "id": "F10-1-2", + "description": "Katze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1-2", + "code": "91" + }, + { + "id": "F10-1-3", + "description": "Nager", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1-3", + "code": "92" + }, + { + "id": "F10-1-4", + "description": "Vögel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1-4", + "code": "93" + }, + { + "id": "F10-1-5", + "description": "Fisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-1-5", + "code": null + }, + { + "id": "F10-2", + "description": "Tierzubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-2", + "code": null + }, + { + "id": "F10-2-1", + "description": "Hund", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-2-1", + "code": "90" + }, + { + "id": "F10-2-2", + "description": "Katze", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-2-2", + "code": "91" + }, + { + "id": "F10-3", + "description": "Heu, Streu & Co.", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-3", + "code": null + }, + { + "id": "F10-3-1", + "description": "Heimtier Heu", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-3-1", + "code": "92" + }, + { + "id": "F10-3-2", + "description": "Heimtier Streu", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-3-2", + "code": "91" + }, + { + "id": "F10-3-3", + "description": "Heimtier Sand", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-3-3", + "code": "91" + }, + { + "id": "F10-3-4", + "description": "Heimtier sonstige Verbrauchsstoffe", + "url": "https://www.interspar.at/shop/lebensmittel/c/F10-3-4", + "code": "90" + }, + { + "id": "F11", + "description": "Beauty", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11", + "code": null + }, + { + "id": "F11-1", + "description": "Kosmetik & Düfte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-1", + "code": null + }, + { + "id": "F11-1-1", + "description": "Nagellackentferner & -härter", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-1-1", + "code": "75" + }, + { + "id": "F11-1-2", + "description": "Düfte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-1-2", + "code": "72" + }, + { + "id": "F11-2", + "description": "Haare", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2", + "code": "73" + }, + { + "id": "F11-2-1", + "description": "Shampoo", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2-1", + "code": null + }, + { + "id": "F11-2-2", + "description": "Conditioner", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2-2", + "code": null + }, + { + "id": "F11-2-3", + "description": "Haarstyling", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2-3", + "code": null + }, + { + "id": "F11-2-4", + "description": "Colorationen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2-4", + "code": null + }, + { + "id": "F11-2-5", + "description": "Stylinggeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-2-5", + "code": null + }, + { + "id": "F11-3", + "description": "Mund & Zahn", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3", + "code": "76" + }, + { + "id": "F11-3-1", + "description": "Zahncreme", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-1", + "code": null + }, + { + "id": "F11-3-2", + "description": "Handzahnbürsten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-2", + "code": null + }, + { + "id": "F11-3-3", + "description": "Elektrische Zahnpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-3", + "code": null + }, + { + "id": "F11-3-4", + "description": "Zahnersatzpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-4", + "code": null + }, + { + "id": "F11-3-5", + "description": "Mundwasser & Spülung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-5", + "code": null + }, + { + "id": "F11-3-6", + "description": "Zusatzpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-3-6", + "code": null + }, + { + "id": "F11-4", + "description": "Körper & Gesicht", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4", + "code": null + }, + { + "id": "F11-4-1", + "description": "Baden & Duschen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-1", + "code": "78" + }, + { + "id": "F11-4-2", + "description": "Seifen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-2", + "code": "78" + }, + { + "id": "F11-4-3", + "description": "Händedesinfektion", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-3", + "code": "74" + }, + { + "id": "F11-4-4", + "description": "Deodorants", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-4", + "code": "72" + }, + { + "id": "F11-4-5", + "description": "Hautpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-5", + "code": "75" + }, + { + "id": "F11-4-6", + "description": "Fußpflege & Zubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-6", + "code": "7B" + }, + { + "id": "F11-4-7", + "description": "Rasur & Haarentfernung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-7", + "code": "77" + }, + { + "id": "F11-4-8", + "description": "Sonnen- & Insektenschutz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-4-8", + "code": "79" + }, + { + "id": "F11-5", + "description": "Gesundheit", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5", + "code": "8F" + }, + { + "id": "F11-5-1", + "description": "Desinfektionsmittel & Gesichtsmasken", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-1", + "code": "74" + }, + { + "id": "F11-5-2", + "description": "Kondome & Gleitmittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-2", + "code": "7A" + }, + { + "id": "F11-5-3", + "description": "Wundversorgung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-3", + "code": "74" + }, + { + "id": "F11-5-4", + "description": "Massage- & Einreibemittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-4", + "code": "75" + }, + { + "id": "F11-5-5", + "description": "Kontaktlinsenzubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-5", + "code": null + }, + { + "id": "F11-5-6", + "description": "Sonstige Gesundheitsprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-5-6", + "code": null + }, + { + "id": "F11-6", + "description": "Reisegrößen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F11-6", + "code": null + }, + { + "id": "F12", + "description": "Haushalt", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12", + "code": null + }, + { + "id": "F12-1", + "description": "Haushaltspapier & Hygiene", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1", + "code": null + }, + { + "id": "F12-1-1", + "description": "Taschentücher", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-1", + "code": "89" + }, + { + "id": "F12-1-3", + "description": "Watte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-3", + "code": "75" + }, + { + "id": "F12-1-4", + "description": "Damenhygiene", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-4", + "code": "71" + }, + { + "id": "F12-1-5", + "description": "Küchenrollen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-5", + "code": "84" + }, + { + "id": "F12-1-6", + "description": "Toilettenpapier", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-6", + "code": "84" + }, + { + "id": "F12-1-7", + "description": "Inkontinenz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-1-7", + "code": "71" + }, + { + "id": "F12-2", + "description": "Putzen & Reinigen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2", + "code": null + }, + { + "id": "F12-2-1", + "description": "Geschirrreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-1", + "code": "88" + }, + { + "id": "F12-2-2", + "description": "Allzweckreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-2", + "code": "88" + }, + { + "id": "F12-2-3", + "description": "WC Reiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-3", + "code": "88" + }, + { + "id": "F12-2-4", + "description": "Bodenpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-4", + "code": "88" + }, + { + "id": "F12-2-5", + "description": "Glasreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-5", + "code": "88" + }, + { + "id": "F12-2-6", + "description": "Küchenreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-6", + "code": "88" + }, + { + "id": "F12-2-7", + "description": "Metallpflege & Entkalker", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-7", + "code": "88" + }, + { + "id": "F12-2-8", + "description": "Badreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-8", + "code": "88" + }, + { + "id": "F12-2-9", + "description": "Hygienereiniger & Desinfektion", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-9", + "code": "88" + }, + { + "id": "F12-2-10", + "description": "Abflussreiniger", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-10", + "code": "88" + }, + { + "id": "F12-2-11", + "description": "Möbelpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-11", + "code": "88" + }, + { + "id": "F12-2-12", + "description": "Schuhpflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-12", + "code": "8B" + }, + { + "id": "F12-2-13", + "description": "Putzutensilien", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-13", + "code": "88" + }, + { + "id": "F12-2-14", + "description": "Lufterfrischer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-2-14", + "code": "87" + }, + { + "id": "F12-3", + "description": "Elektrische Putzgeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-3", + "code": null + }, + { + "id": "F12-3-1", + "description": "Staubsauger & Reinigungsgeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-3-1", + "code": "88" + }, + { + "id": "F12-3-2", + "description": "Staubbeutel & Zubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-3-2", + "code": "86" + }, + { + "id": "F12-4", + "description": "Waschen, Trocknen & Bügeln", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4", + "code": "8A" + }, + { + "id": "F12-4-1", + "description": "Waschmittel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-1", + "code": null + }, + { + "id": "F12-4-2", + "description": "Weichspüler", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-2", + "code": null + }, + { + "id": "F12-4-3", + "description": "Fleckenentferner & Textilfarben", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-3", + "code": null + }, + { + "id": "F12-4-4", + "description": "Wäschestärke, -desinfektion & Imprägnieren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-4", + "code": null + }, + { + "id": "F12-4-5", + "description": "Wasserenthärter", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-5", + "code": null + }, + { + "id": "F12-4-6", + "description": "Textilerfrischer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-6", + "code": null + }, + { + "id": "F12-4-7", + "description": "Waschzubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-7", + "code": null + }, + { + "id": "F12-4-8", + "description": "Bügeln", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-4-8", + "code": null + }, + { + "id": "F12-5", + "description": "Haushaltszubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5", + "code": null + }, + { + "id": "F12-5-1", + "description": "Kleiderbügel & Türhaken", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-1", + "code": null + }, + { + "id": "F12-5-2", + "description": "Putzutensilien", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-2", + "code": "88" + }, + { + "id": "F12-5-3", + "description": "Aufbewahrung & Abfalleimer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-3", + "code": "8C" + }, + { + "id": "F12-5-4", + "description": "Akkus, Batterien & Ladegeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-4", + "code": "85" + }, + { + "id": "F12-5-5", + "description": "Beleuchtung & Taschenlampen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-5", + "code": "85" + }, + { + "id": "F12-5-6", + "description": "Technik & Elektronik", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-6", + "code": null + }, + { + "id": "F12-5-7", + "description": "Nähen & Kurzware", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-7", + "code": null + }, + { + "id": "F12-5-8", + "description": "Grillen & Zubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-8", + "code": null + }, + { + "id": "F12-5-9", + "description": "Pflanzenpflege & Insektenschutz", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-9", + "code": "8D" + }, + { + "id": "F12-5-10", + "description": "Kerzen, Raumdüfte & Anzündhilfe", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-10", + "code": "87" + }, + { + "id": "F12-5-11", + "description": "Papier, Schule & Büro", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-11", + "code": "80" + }, + { + "id": "F12-5-12", + "description": "Party- & Festtagsartikel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-12", + "code": "83" + }, + { + "id": "F12-5-13", + "description": "Autopflege", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-5-13", + "code": null + }, + { + "id": "F12-6", + "description": "Spielware", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-6", + "code": "8E" + }, + { + "id": "F12-7", + "description": "Regenschirme", + "url": "https://www.interspar.at/shop/lebensmittel/c/F12-7", + "code": null + }, + { + "id": "F13", + "description": "Küche & Tisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13", + "code": null + }, + { + "id": "F13-1", + "description": "Kochgeschirr", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1", + "code": "83" + }, + { + "id": "F13-1-1", + "description": "Töpfe & Deckel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1-1", + "code": "83" + }, + { + "id": "F13-1-2", + "description": "Pfannen & Deckel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1-2", + "code": "83" + }, + { + "id": "F13-1-3", + "description": "Sets & Garnituren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1-3", + "code": "83" + }, + { + "id": "F13-1-4", + "description": "Fondue-Sets, Plattengrill, Raclette & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1-4", + "code": "83" + }, + { + "id": "F13-1-5", + "description": "Bräter & Auflaufformen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-1-5", + "code": "83" + }, + { + "id": "F13-2", + "description": "Gedeckter Tisch", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2", + "code": "83" + }, + { + "id": "F13-2-1", + "description": "Essbesteck", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2-1", + "code": "83" + }, + { + "id": "F13-2-2", + "description": "Gläser & Glaswaren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2-2", + "code": "83" + }, + { + "id": "F13-2-3", + "description": "Porzellan", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2-3", + "code": "83" + }, + { + "id": "F13-2-4", + "description": "Servietten", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2-4", + "code": "89" + }, + { + "id": "F13-2-5", + "description": "Tischdecken & Läufer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-2-5", + "code": "83" + }, + { + "id": "F13-3", + "description": "Backen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-3", + "code": "83" + }, + { + "id": "F13-3-1", + "description": "Backblech & Formen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-3-1", + "code": "83" + }, + { + "id": "F13-3-2", + "description": "Backzubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-3-2", + "code": "83" + }, + { + "id": "F13-4", + "description": "Küchenhelfer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4", + "code": "83" + }, + { + "id": "F13-4-1", + "description": "Rühren", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-1", + "code": "83" + }, + { + "id": "F13-4-3", + "description": "Küchenwaagen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-3", + "code": "83" + }, + { + "id": "F13-4-4", + "description": "Messbecher", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-4", + "code": "83" + }, + { + "id": "F13-4-5", + "description": "Schälen & Zerteilen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-5", + "code": "83" + }, + { + "id": "F13-4-6", + "description": "Siebe & Trichter", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-6", + "code": "83" + }, + { + "id": "F13-4-7", + "description": "Weinzubehör", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-7", + "code": "83" + }, + { + "id": "F13-4-8", + "description": "Reiben", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-8", + "code": "83" + }, + { + "id": "F13-4-9", + "description": "Bratenwender & Schaumlöffel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-9", + "code": "83" + }, + { + "id": "F13-4-10", + "description": "Suppenkelle & Löffel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-10", + "code": "83" + }, + { + "id": "F13-4-11", + "description": "Sonstige Küchenhelfer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-11", + "code": "83" + }, + { + "id": "F13-4-12", + "description": "Schneidebretter, Untersetzer & Tablett", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-12", + "code": "83" + }, + { + "id": "F13-4-13", + "description": "Messer", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-13", + "code": "83" + }, + { + "id": "F13-4-14", + "description": "Salz- & Pfeffermühlen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-14", + "code": "83" + }, + { + "id": "F13-4-15", + "description": "Kunststoffgeschirr", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-15", + "code": "83" + }, + { + "id": "F13-4-16", + "description": "Einkochen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-4-16", + "code": "83" + }, + { + "id": "F13-5", + "description": "Folien, Säcke & Filter", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-5", + "code": "86" + }, + { + "id": "F13-6", + "description": "Aufbewahrung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-6", + "code": "8C" + }, + { + "id": "F13-7", + "description": "Sodaprodukte & Sahneaufbereitung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-7", + "code": "83" + }, + { + "id": "F13-7-1", + "description": "Sodamaker & Sodaprodukte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-7-1", + "code": "83" + }, + { + "id": "F13-7-2", + "description": "Sahneaufbereitung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-7-2", + "code": "83" + }, + { + "id": "F13-8", + "description": "Küchenwäsche", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-8", + "code": "83" + }, + { + "id": "F13-9", + "description": "Trink- & Isolierflaschen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-9", + "code": "83" + }, + { + "id": "F13-10", + "description": "Wasseraufbereitung", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-10", + "code": "83" + }, + { + "id": "F13-11", + "description": "Einweggeschirr & Strohhalme", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-11", + "code": "83" + }, + { + "id": "F13-12", + "description": "Party- & Festtagsartikel", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-12", + "code": "83" + }, + { + "id": "F13-13", + "description": "Elektrische Küchengeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13", + "code": "83" + }, + { + "id": "F13-13-1", + "description": "Kaffeemaschinen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-1", + "code": "83" + }, + { + "id": "F13-13-2", + "description": "Fondue-Sets, Plattengrill, Raclette & Co", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-2", + "code": "83" + }, + { + "id": "F13-13-3", + "description": "Mikrowelle & Kleinküchen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-3", + "code": "83" + }, + { + "id": "F13-13-4", + "description": "Mixer & Küchenmaschinen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-4", + "code": "83" + }, + { + "id": "F13-13-6", + "description": "Wasserkocher", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-6", + "code": "83" + }, + { + "id": "F13-13-8", + "description": "Entsafter & Zitruspressen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-8", + "code": "83" + }, + { + "id": "F13-13-9", + "description": "Elektrische Schneidegeräte", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-9", + "code": "83" + }, + { + "id": "F13-13-10", + "description": "Toaster", + "url": "https://www.interspar.at/shop/lebensmittel/c/F13-13-10", + "code": "83" + }, + { + "id": "F14", + "description": "Geschenkideen", + "url": "https://www.interspar.at/shop/lebensmittel/c/F14", + "code": null + }, + { + "id": "F15", + "description": "Partyservice", + "url": "https://www.interspar.at/shop/lebensmittel/c/F15", + "code": null + } +] diff --git a/stores/spar-si.js b/stores/spar-si.js index 7246203..e01a82e 100644 --- a/stores/spar-si.js +++ b/stores/spar-si.js @@ -83,4 +83,8 @@ exports.fetchData = async function () { return rawItems?.hits || rawItems; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://www.spar.si/online"; diff --git a/stores/spar.js b/stores/spar.js index ceb93e3..2e257fc 100644 --- a/stores/spar.js +++ b/stores/spar.js @@ -1,6 +1,9 @@ const axios = require("axios"); +const fs = require("fs"); +const path = require("path"); const utils = require("./utils"); -const { UNKNOWN_CATEGORY } = require("../site/model/categories"); +const HTMLParser = require("node-html-parser"); +const { readJSON } = require("../analysis"); const HITS = Math.floor(30000 + Math.random() * 2000); const units = { @@ -9,23 +12,6 @@ const units = { "100g": { unit: "g", factor: 100 }, }; -function getCategory(item) { - if (!item.masterValues["category-path"]) return null; - const regex = /F(\d+)-(\d+)/g; - const categoryPath = item.masterValues["category-path"] - .filter((p) => { - const match = regex.exec(p); - if (match == null) return false; - if (Number.parseInt(match[1]) > 13) return false; - return true; - }) - .map((p) => p[0]); - if (categoryPath.length == 0) return null; - const sparCategory = categoryPath[0]; - // console.log(sparCategory); - return UNKNOWN_CATEGORY; -} - exports.getCanonical = function (item, today) { let price, unit, quantity; if (item.masterValues["quantity-selector"]) { @@ -69,14 +55,11 @@ exports.getCanonical = function (item, today) { quantity = fallback.quantity; } - const category = getCategory(item); - return utils.convertUnit( { id: item.masterValues["product-number"], name: item.masterValues.title + " " + (item.masterValues["short-description"] ?? item.masterValues.name), description: item.masterValues["marketing-text"] ?? "", - category, price, priceHistory: [{ date: today, price }], unit, @@ -96,1224 +79,67 @@ exports.fetchData = async function () { return rawItems?.hits || rawItems; }; +exports.initializeCategoryMapping = async () => { + const result = (await axios.get("https://www.interspar.at/shop/lebensmittel/")).data; + const root = HTMLParser.parse(result); + let categories = Array.from(root.querySelectorAll(`.flyout-categories__link`)) + .filter((el) => !(el.innerText.toLowerCase().includes("übersicht") || el.innerText.toLowerCase().includes("zurück"))) + .map((el) => { + const paths = el.attributes.href.split("/"); + const id = paths[paths.length - 2]; + return { + id, + description: el.innerText.trim(), + url: `https://www.interspar.at/shop/lebensmittel/c/${id}`, + code: null, + }; + }); + utils.mergeAndSaveCategories("spar", categories); + exports.categoryLookup = {}; + for (const category of categories) { + exports.categoryLookup[category.id] = category; + } +}; + +exports.mapCategory = (rawItem) => { + if (!rawItem.masterValues["category-path"]) return null; + + const categoryLookup = exports.categoryLookup; + if (!categoryLookup) throw Error("Category mapping for spar not initialized."); + const regex = /F(\d+)-(\d+)/g; + const categoryPaths = rawItem.masterValues["category-path"] + .filter((p) => { + const match = regex.exec(p); + if (match == null) return false; + if (Number.parseInt(match[1]) > 13) return false; + return true; + }) + .map((p) => p[0]); + if (categoryPaths.length == 0) return null; + categoryPaths.sort((a, b) => b.length - a.length); + let categoryCode = null; + for (const path of categoryPaths) { + if (categoryLookup[path]) { + categoryCode = categoryLookup[path]; + break; + } + } + const longestPath = categoryPaths[0].split("-"); + for (let i = longestPath.length; i > 0; i--) { + const path = longestPath.slice(0, i).join("-"); + if (categoryLookup[path] && categoryLookup[path].code) { + categoryCode = categoryLookup[path]; + break; + } + } + + return categoryCode.code; +}; + exports.urlBase = "https://www.interspar.at/shop/lebensmittel"; -// Generated in Chrome dev tools at https://www.interspar.at/shop/lebensmittel/ via: -// -// Array.from(document.querySelectorAll(`.flyout-categories__link`)).filter(el => !(el.innerText.toLowerCase().includes("übersicht") || el.innerText.toLowerCase().includes("zurück"))).map(el => { -// const paths = el.href.split("/"); -// return { category: paths[paths.length - 2], name: el.innerText.trim(), code: "" }; -// }) -// -const categoryMapping = [ - { - category: "F1-1", - name: "Frischgemüse", - code: "01", - }, - { - category: "F1-2", - name: "Frischobst", - code: "00", - }, - { - category: "F1-3", - name: "Obst-, Gemüse- & Salat-Zubereitungen", - code: "01", - }, - { - category: "F1-4", - name: "Saisonartikel", - code: "01", - }, - { - category: "F1-5", - name: "Obst- & Gemüsekisten", - code: "00", - }, - { - category: "F2", - name: "KÜHLREGAL", - code: "", - }, - { - category: "F2-1", - name: "Molkerei & Eier", - code: "", - }, - { - category: "F2-1-1", - name: "Milch", - code: "34", - }, - { - category: "F2-1-2", - name: "Milchgetränk", - code: "34", - }, - { - category: "F2-1-3", - name: "Eiskaffee", - code: "20", - }, - { - category: "F2-1-4", - name: "Produkte auf Pflanzenbasis", - code: "5D", - }, - { - category: "F2-1-5", - name: "Rahm, Schlagobers & Topfen", - code: "34", - }, - { - category: "F2-1-7", - name: "Butter, Margarine & Fette", - code: "34", - }, - { - category: "F2-1-8", - name: "Eier", - code: "31", - }, - { - category: "F2-2", - name: "Joghurt & Desserts", - code: "34", - }, - { - category: "F2-3", - name: "Käse", - code: "33", - }, - { - category: "F2-4", - name: "Aufstriche & Salate", - code: "33", - }, - { - category: "F2-5", - name: "Fertiggerichte, Snacks & Teige", - code: "30", - }, - { - category: "F2-6", - name: "Vegetarisch, Tofu, Soja & Co", - code: "3B", - }, - { - category: "F3-1", - name: "Wurst & Selchwaren", - code: "37", - }, - { - category: "F3-2", - name: "Frischfleisch & -Geflügel", - code: "32", - }, - { - category: "F3-3", - name: "Fisch", - code: "39", - }, - { - category: "F4-1", - name: "Feinkost & Konserven", - code: "57", - }, - { - category: "F4-2-1", - name: "Konfitüre", - code: "56", - }, - { - category: "F4-2-2", - name: "Honig", - code: "56", - }, - { - category: "F4-2-3", - name: "Nuss- & Schokoaufstriche", - code: "56", - }, - { - category: "F4-2-4", - name: "Cerealien & Müsli", - code: "5A", - }, - { - category: "F4-3-1", - name: "Gewürze", - code: "55", - }, - { - category: "F4-3-2", - name: "Saucen & Würze", - code: "5C", - }, - { - category: "F4-3-3", - name: "Saucen Süß", - code: "5C", - }, - { - category: "F4-3-4", - name: "Senf & Kren", - code: "5C", - }, - { - category: "F4-3-5", - name: "Ketchup & Mayonnaise", - code: "5C", - }, - { - category: "F4-3-6", - name: "Essig", - code: "53", - }, - { - category: "F4-3-7", - name: "Öl", - code: "53", - }, - { - category: "F4-3-8", - name: "Dressing & Croutons", - code: "5C", - }, - { - category: "F4-3-9", - name: "Zucker", - code: "5E", - }, - { - category: "F4-3-10", - name: "Salz", - code: "", - }, - { - category: "F4-4-1", - name: "Teigwaren", - code: "5B", - }, - { - category: "F4-4-2", - name: "Reis", - code: "5B", - }, - { - category: "F4-4-3", - name: "Kartoffelprodukte", - code: "5F", - }, - { - category: "F4-4-4", - name: "Samen & Hülsenfrüchte", - code: "57", - }, - { - category: "F4-4-5", - name: "Fix- & Basisprodukte", - code: "5F", - }, - { - category: "F4-4-7", - name: "Saucen & Würze", - code: "5C", - }, - { - category: "F4-4-8", - name: "Einkochen", - code: "52", - }, - { - category: "F4-4-10", - name: "Desserts", - code: "58", - }, - { - category: "F4-4-6", - name: "Suppen & Bouillons", - code: "54", - }, - { - category: "F4-5-1", - name: "Mehl", - code: "59", - }, - { - category: "F4-5-2", - name: "Grieß & Co", - code: "59", - }, - { - category: "F4-5-3", - name: "Getreideprodukte", - code: "59", - }, - { - category: "F4-5-4", - name: "Backmischungen", - code: "52", - }, - { - category: "F4-5-5", - name: "Backzutaten & Hilfsmittel", - code: "52", - }, - { - category: "F4-5-6", - name: "Verfeinerungen", - code: "52", - }, - { - category: "F4-6", - name: "Trockenfrüchte, Nüsse & Kerne", - code: "03", - }, - { - category: "F4-7", - name: "Reform & Nahrungsergänzung", - code: "5D", - }, - { - category: "F4-8", - name: "Asien & Mexiko", - code: "50", - }, - { - category: "F5-1", - name: "Süßwaren", - code: "64", - }, - { - category: "F5-2", - name: "Knabbergebäck", - code: "63", - }, - { - category: "F6-1", - name: "Aufbackware Brot & Gebäck", - code: "10", - }, - { - category: "F6-2", - name: "Brot", - code: "11", - }, - { - category: "F6-3", - name: "Gebäck", - code: "11", - }, - { - category: "F6-4", - name: "Feinbackwaren", - code: "12", - }, - { - category: "F6-5", - name: "Knäckebrot & Zwieback", - code: "12", - }, - { - category: "F6-6", - name: "Brösel & Semmelwürfel", - code: "14", - }, - { - category: "F7-1", - name: "Softdrinks & Säfte", - code: "20", - }, - { - category: "F7-2", - name: "Mineral- & Tafelwasser", - code: "26", - }, - { - category: "F7-3", - name: "Kaffee", - code: "22", - }, - { - category: "F7-4", - name: "Tee", - code: "22", - }, - { - category: "F7-5", - name: "Kakao", - code: "22", - }, - { - category: "F7-6", - name: "Bier", - code: "21", - }, - { - category: "F7-7-1", - name: "Rotwein", - code: "25", - }, - { - category: "F7-7-2", - name: "Weißwein", - code: "25", - }, - { - category: "F7-7-3", - name: "Rosewein", - code: "25", - }, - { - category: "F7-7-4", - name: "Dessertwein, Sherry & Port", - code: "25", - }, - { - category: "F7-7-5", - name: "Sekt & Champagner", - code: "23", - }, - { - category: "F7-7-6", - name: "Frizzante & Prosecco", - code: "23", - }, - { - category: "F7-7-7", - name: "Cider & Fruchtschaumwein", - code: "25", - }, - { - category: "F7-7-8", - name: "Weinhaltige Getränke", - code: "25", - }, - { - category: "F7-7-9", - name: "Alkoholfreier Wein & Schaumwein", - code: "25", - }, - { - category: "F7-8", - name: "Spirituosen", - code: "24", - }, - { - category: "F8-1-1", - name: "Schwein", - code: "42", - }, - { - category: "F8-1-2", - name: "Rind & Wild", - code: "42", - }, - { - category: "F8-1-3", - name: "Gans & Ente", - code: "42", - }, - { - category: "F8-1-4", - name: "Huhn & Pute", - code: "42", - }, - { - category: "F8-1-5", - name: "Fisch", - code: "43", - }, - { - category: "F8-1-6", - name: "Meeresfrüchte", - code: "43", - }, - { - category: "F8-2-1", - name: "Gemüse", - code: "44", - }, - { - category: "F8-2-2", - name: "Kräuter & Pilze", - code: "44", - }, - { - category: "F8-2-3", - name: "Obst", - code: "47", - }, - { - category: "F8-2-4", - name: "Pommes Frites", - code: "45", - }, - { - category: "F8-2-5", - name: "Kroketten & Co", - code: "45", - }, - { - category: "F8-3", - name: "Fertiggerichte & Teige", - code: "42", - }, - { - category: "F8-4-1", - name: "Baguette", - code: "46", - }, - { - category: "F8-4-2", - name: "Pizzasnacks", - code: "46", - }, - { - category: "F8-4-3", - name: "American Style Pizza", - code: "46", - }, - { - category: "F8-4-4", - name: "Italian Style Pizza", - code: "46", - }, - { - category: "F8-4-5", - name: "Tiefkühl Gebäck", - code: "46", - }, - { - category: "F8-5-1", - name: "Süße Knödel", - code: "47", - }, - { - category: "F8-5-2", - name: "Strudel", - code: "47", - }, - { - category: "F8-5-3", - name: "Nudeln", - code: "47", - }, - { - category: "F8-5-5", - name: "Sonstige klassische Mehlspeisen", - code: "47", - }, - { - category: "F8-5-6", - name: "Torten, Kuchen & Desserts", - code: "47", - }, - { - category: "F8-5-7", - name: "Eisbecher", - code: "40", - }, - { - category: "F8-5-8", - name: "Eis am Stiel & Stanitzel", - code: "40", - }, - { - category: "F8-5-10", - name: "Eis", - code: "40", - }, - { - category: "F9-1", - name: "Babynahrung & Getränke", - code: "51", - }, - { - category: "F9-1-1", - name: "Milchfertignahrung", - code: "51", - }, - { - category: "F9-1-2", - name: "Breie", - code: "51", - }, - { - category: "F9-1-3", - name: "Menüs", - code: "51", - }, - { - category: "F9-1-4", - name: "Gemüse & Gemüsemischungen", - code: "51", - }, - { - category: "F9-1-5", - name: "Früchte, Mischungen & Desserts", - code: "51", - }, - { - category: "F9-1-6", - name: "Snacks", - code: "51", - }, - { - category: "F9-1-7", - name: "Getränke", - code: "51", - }, - { - category: "F9-2", - name: "Flaschen & Sauger", - code: "70", - }, - { - category: "F9-2-2", - name: "Sauger", - code: "70", - }, - { - category: "F9-3", - name: "Pflege & Windeln", - code: "60", - }, - { - category: "F10-1-1", - name: "Hund", - code: "90", - }, - { - category: "F10-1-2", - name: "Katze", - code: "91", - }, - { - category: "F10-1-3", - name: "Nager", - code: "92", - }, - { - category: "F10-1-4", - name: "Vögel", - code: "93", - }, - { - category: "F10-2-1", - name: "Hund", - code: "90", - }, - { - category: "F10-2-2", - name: "Katze", - code: "91", - }, - { - category: "F10-3-1", - name: "Heimtier Heu", - code: "92", - }, - { - category: "F10-3-2", - name: "Heimtier Streu", - code: "91", - }, - { - category: "F10-3-3", - name: "Heimtier Sand", - code: "91", - }, - { - category: "F10-3-4", - name: "Heimtier sonstige Verbrauchsstoffe", - code: "90", - }, - { - category: "F11-1-1", - name: "Nagellackentferner & -härter", - code: "75", - }, - { - category: "F11-1-2", - name: "Düfte", - code: "72", - }, - { - category: "F11-2", - name: "Haare", - code: "73", - }, - { - category: "F11-3", - name: "Mund & Zahn", - code: "76", - }, - { - category: "F11-4-1", - name: "Baden & Duschen", - code: "78", - }, - { - category: "F11-4-2", - name: "Seifen", - code: "78", - }, - { - category: "F11-4-3", - name: "Händedesinfektion", - code: "74", - }, - { - category: "F11-4-4", - name: "Deodorants", - code: "72", - }, - { - category: "F11-4-5", - name: "Hautpflege", - code: "75", - }, - { - category: "F11-4-6", - name: "Fußpflege & Zubehör", - code: "7B", - }, - { - category: "F11-4-7", - name: "Rasur & Haarentfernung", - code: "77", - }, - { - category: "F11-4-8", - name: "Sonnen- & Insektenschutz", - code: "79", - }, - { - category: "F11-5-1", - name: "Desinfektionsmittel & Gesichtsmasken", - code: "74", - }, - { - category: "F11-5-2", - name: "Kondome & Gleitmittel", - code: "7A", - }, - { - category: "F11-5-3", - name: "Wundversorgung", - code: "74", - }, - { - category: "F11-5-4", - name: "Massage- & Einreibemittel", - code: "75", - }, - { - category: "F12-1", - name: "Haushaltspapier & Hygiene", - code: "", - }, - { - category: "F12-1-1", - name: "Taschentücher", - code: "", - }, - { - category: "F12-1-3", - name: "Watte", - code: "", - }, - { - category: "F12-1-4", - name: "Damenhygiene", - code: "", - }, - { - category: "F12-1-5", - name: "Küchenrollen", - code: "", - }, - { - category: "F12-1-6", - name: "Toilettenpapier", - code: "", - }, - { - category: "F12-1-7", - name: "Inkontinenz", - code: "", - }, - { - category: "F12-2", - name: "Putzen & Reinigen", - code: "", - }, - { - category: "F12-2-1", - name: "Geschirrreiniger", - code: "", - }, - { - category: "F12-2-2", - name: "Allzweckreiniger", - code: "", - }, - { - category: "F12-2-3", - name: "WC Reiniger", - code: "", - }, - { - category: "F12-2-4", - name: "Bodenpflege", - code: "", - }, - { - category: "F12-2-5", - name: "Glasreiniger", - code: "", - }, - { - category: "F12-2-6", - name: "Küchenreiniger", - code: "", - }, - { - category: "F12-2-7", - name: "Metallpflege & Entkalker", - code: "", - }, - { - category: "F12-2-8", - name: "Badreiniger", - code: "", - }, - { - category: "F12-2-9", - name: "Hygienereiniger & Desinfektion", - code: "", - }, - { - category: "F12-2-10", - name: "Abflussreiniger", - code: "", - }, - { - category: "F12-2-11", - name: "Möbelpflege", - code: "", - }, - { - category: "F12-2-12", - name: "Schuhpflege", - code: "", - }, - { - category: "F12-2-13", - name: "Putzutensilien", - code: "", - }, - { - category: "F12-2-14", - name: "Lufterfrischer", - code: "", - }, - { - category: "F12-3", - name: "Elektrische Putzgeräte", - code: "", - }, - { - category: "F12-3-1", - name: "Staubsauger & Reinigungsgeräte", - code: "", - }, - { - category: "F12-3-2", - name: "Staubbeutel & Zubehör", - code: "", - }, - { - category: "F12-4", - name: "Waschen, Trocknen & Bügeln", - code: "", - }, - { - category: "F12-4-1", - name: "Waschmittel", - code: "", - }, - { - category: "F12-4-2", - name: "Weichspüler", - code: "", - }, - { - category: "F12-4-3", - name: "Fleckenentferner & Textilfarben", - code: "", - }, - { - category: "F12-4-4", - name: "Wäschestärke, -desinfektion & Imprägnieren", - code: "", - }, - { - category: "F12-4-5", - name: "Wasserenthärter", - code: "", - }, - { - category: "F12-4-6", - name: "Textilerfrischer", - code: "", - }, - { - category: "F12-4-7", - name: "Waschzubehör", - code: "", - }, - { - category: "F12-4-8", - name: "Bügeln", - code: "", - }, - { - category: "F12-5", - name: "Haushaltszubehör", - code: "", - }, - { - category: "F12-5-1", - name: "Kleiderbügel & Türhaken", - code: "", - }, - { - category: "F12-5-2", - name: "Putzutensilien", - code: "", - }, - { - category: "F12-5-3", - name: "Aufbewahrung & Abfalleimer", - code: "", - }, - { - category: "F12-5-4", - name: "Akkus, Batterien & Ladegeräte", - code: "", - }, - { - category: "F12-5-5", - name: "Beleuchtung & Taschenlampen", - code: "", - }, - { - category: "F12-5-6", - name: "Technik & Elektronik", - code: "", - }, - { - category: "F12-5-7", - name: "Nähen & Kurzware", - code: "", - }, - { - category: "F12-5-8", - name: "Grillen & Zubehör", - code: "", - }, - { - category: "F12-5-9", - name: "Pflanzenpflege & Insektenschutz", - code: "", - }, - { - category: "F12-5-10", - name: "Kerzen, Raumdüfte & Anzündhilfe", - code: "", - }, - { - category: "F12-5-11", - name: "Papier, Schule & Büro", - code: "", - }, - { - category: "F12-5-12", - name: "Party- & Festtagsartikel", - code: "", - }, - { - category: "F12-5-13", - name: "Autopflege", - code: "", - }, - { - category: "F12-6", - name: "Spielware", - code: "", - }, - { - category: "F12-7", - name: "Regenschirme", - code: "", - }, - { - category: "F13", - name: "KÜCHE & TISCH", - code: "", - }, - { - category: "F13-1", - name: "Kochgeschirr", - code: "", - }, - { - category: "F13-1-1", - name: "Töpfe & Deckel", - code: "", - }, - { - category: "F13-1-2", - name: "Pfannen & Deckel", - code: "", - }, - { - category: "F13-1-3", - name: "Sets & Garnituren", - code: "", - }, - { - category: "F13-1-4", - name: "Fondue-Sets, Plattengrill, Raclette & Co", - code: "", - }, - { - category: "F13-1-5", - name: "Bräter & Auflaufformen", - code: "", - }, - { - category: "F13-2", - name: "Gedeckter Tisch", - code: "", - }, - { - category: "F13-2-1", - name: "Essbesteck", - code: "", - }, - { - category: "F13-2-2", - name: "Gläser & Glaswaren", - code: "", - }, - { - category: "F13-2-3", - name: "Porzellan", - code: "", - }, - { - category: "F13-2-4", - name: "Servietten", - code: "", - }, - { - category: "F13-2-5", - name: "Tischdecken & Läufer", - code: "", - }, - { - category: "F13-3", - name: "Backen", - code: "", - }, - { - category: "F13-3-1", - name: "Backblech & Formen", - code: "", - }, - { - category: "F13-3-2", - name: "Backzubehör", - code: "", - }, - { - category: "F13-4", - name: "Küchenhelfer", - code: "", - }, - { - category: "F13-4-1", - name: "Rühren", - code: "", - }, - { - category: "F13-4-3", - name: "Küchenwaagen", - code: "", - }, - { - category: "F13-4-4", - name: "Messbecher", - code: "", - }, - { - category: "F13-4-5", - name: "Schälen & Zerteilen", - code: "", - }, - { - category: "F13-4-6", - name: "Siebe & Trichter", - code: "", - }, - { - category: "F13-4-7", - name: "Weinzubehör", - code: "", - }, - { - category: "F13-4-8", - name: "Reiben", - code: "", - }, - { - category: "F13-4-9", - name: "Bratenwender & Schaumlöffel", - code: "", - }, - { - category: "F13-4-10", - name: "Suppenkelle & Löffel", - code: "", - }, - { - category: "F13-4-11", - name: "Sonstige Küchenhelfer", - code: "", - }, - { - category: "F13-4-12", - name: "Schneidebretter, Untersetzer & Tablett", - code: "", - }, - { - category: "F13-4-13", - name: "Messer", - code: "", - }, - { - category: "F13-4-14", - name: "Salz- & Pfeffermühlen", - code: "", - }, - { - category: "F13-4-15", - name: "Kunststoffgeschirr", - code: "", - }, - { - category: "F13-4-16", - name: "Einkochen", - code: "", - }, - { - category: "F13-5", - name: "Folien, Säcke & Filter", - code: "", - }, - { - category: "F13-6", - name: "Aufbewahrung", - code: "", - }, - { - category: "F13-7", - name: "Sodaprodukte & Sahneaufbereitung", - code: "", - }, - { - category: "F13-7-1", - name: "Sodamaker & Sodaprodukte", - code: "", - }, - { - category: "F13-7-2", - name: "Sahneaufbereitung", - code: "", - }, - { - category: "F13-8", - name: "Küchenwäsche", - code: "", - }, - { - category: "F13-9", - name: "Trink- & Isolierflaschen", - code: "", - }, - { - category: "F13-10", - name: "Wasseraufbereitung", - code: "", - }, - { - category: "F13-11", - name: "Einweggeschirr & Strohhalme", - code: "", - }, - { - category: "F13-12", - name: "Party- & Festtagsartikel", - code: "", - }, - { - category: "F13-13", - name: "Elektrische Küchengeräte", - code: "", - }, - { - category: "F13-13-1", - name: "Kaffeemaschinen", - code: "", - }, - { - category: "F13-13-2", - name: "Fondue-Sets, Plattengrill, Raclette & Co", - code: "", - }, - { - category: "F13-13-3", - name: "Mikrowelle & Kleinküchen", - code: "", - }, - { - category: "F13-13-4", - name: "Mixer & Küchenmaschinen", - code: "", - }, - { - category: "F13-13-6", - name: "Wasserkocher", - code: "", - }, - { - category: "F13-13-8", - name: "Entsafter & Zitruspressen", - code: "", - }, - { - category: "F13-13-9", - name: "Elektrische Schneidegeräte", - code: "", - }, - { - category: "F13-13-10", - name: "Toaster", - code: "", - }, -]; +if (require.main == module) { + (async () => { + await exports.generateCategoryMapping(); + })(); +} diff --git a/stores/unimarkt.js b/stores/unimarkt.js index f2d3447..df1f08a 100644 --- a/stores/unimarkt.js +++ b/stores/unimarkt.js @@ -67,4 +67,8 @@ exports.fetchData = async function () { return unimarktItems; }; +exports.initializeCategoryMapping = async () => {}; + +exports.mapCategory = (rawItem) => {}; + exports.urlBase = "https://shop.unimarkt.at"; diff --git a/stores/utils.js b/stores/utils.js index d479fee..ef833cc 100644 --- a/stores/utils.js +++ b/stores/utils.js @@ -1,3 +1,6 @@ +const fs = require("fs"); +const path = require("path"); + // These are a match of the Billa categories, which are organized in a 2-level hierarchy. // Each category in the top level gets a code from 1-Z, each sub category also gets a code. // Together the two codes from a unique id for the category, which we store in the item.category @@ -115,6 +118,37 @@ exports.globalCategories = [ }, ]; +exports.mergeAndSaveCategories = (store, categories) => { + const mappingFile = path.join(__dirname, `${store}-categories.json`); + if (fs.existsSync(mappingFile)) { + const oldMapping = JSON.parse(fs.readFileSync(mappingFile)); + const oldLookup = {}; + for (const category of oldMapping) { + oldLookup[category.id] = category; + } + + for (const category of categories) { + const oldCategory = oldLookup[category.id]; + if (oldCategory == null) { + console.log(`Found new unmapped category for ${store}: ${category.id} - ${category.description}`); + } else { + category.code = oldCategory.code; + delete oldLookup[category.id]; + } + } + + if (Object.keys(oldLookup).length > 0) { + for (const key in oldLookup) { + const category = oldLookup[key]; + console.log(`Found category absent in latest mapping for ${store}: ${category.id} - ${category.description}`); + categories.push(category); + } + } + } + fs.writeFileSync(mappingFile, JSON.stringify(categories, null, 2)); + return categories; +}; + exports.globalUnits = { "stk.": { unit: "stk", factor: 1 }, blatt: { unit: "stk", factor: 1 },