diff --git a/10PriceScraping/Rohlik/products_300102013.json b/10PriceScraping/Rohlik/products_300102013.json new file mode 100644 index 0000000..a6138c2 --- /dev/null +++ b/10PriceScraping/Rohlik/products_300102013.json @@ -0,0 +1,2186 @@ +[ + { + "productId": 1407650, + "base": { + "id": 1407650, + "name": "Čerstvě utrženo – Okurka hadovka, bez folie", + "slug": "cerstve-utrzeno-okurka-hadovka-bez-folie", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 380 g", + "badges": [ + { + "type": "freshly-harvested", + "title": "Čerstvě sklizeno", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1407650/1407650-1625078085986.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1407650/1407650-1749191598729.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1407650/1407650-1625077978580.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1407650/1407650-1615392113885.jpg" + ], + "countries": [ + { + "name": "Česká republika", + "nameId": "ceska-republika", + "code": "CZ" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": "https://cdn.rohlik.cz/images/countryFlags/cz.svg", + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": "cz", + "attachments": [] + }, + "prices": { + "productId": 1407650, + "price": { + "amount": 34.16, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 89.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1407650, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.38, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 0, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": false + }, + "categories": { + "productId": 1407650, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1407650, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": true + } + }, + { + "productId": 1354613, + "base": { + "id": 1354613, + "name": "Okurka polní 1 ks", + "slug": "okurka-polni-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 290 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1326209/1326209-1498832932.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1354613/1354613-1599496202.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1354613, + "price": { + "amount": 31.87, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 109.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1354613, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.29, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 5, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1354613, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1354613, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1350461, + "base": { + "id": 1350461, + "name": "Cuketa zelená 1 ks", + "slug": "cuketa-zelena-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 300 g", + "badges": [ + { + "type": "best-buy", + "title": "Denní kontrola cen", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1350461/1350461-1564062753.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1294561/1294561-1539181755.jpg" + ], + "countries": [ + { + "name": "Španělsko", + "nameId": "spanelsko", + "code": "E" + }, + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1350461, + "price": { + "amount": 16.84, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 59.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1350461, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.2975, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 6, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1350461, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1350461, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1294559, + "base": { + "id": 1294559, + "name": "Okurka hadovka (cca 300 g)", + "slug": "okurka-hadovka-cca-300-g", + "mainCategoryId": 300102013, + "unit": "ks", + "textualAmount": "1 ks", + "badges": [ + { + "type": "best-buy", + "title": "Denní kontrola cen", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1294559/1294559-1599144049.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1294559/1294559-1599144062.jpg" + ], + "countries": [ + { + "name": "Španělsko", + "nameId": "spanelsko", + "code": "E" + }, + { + "name": "Holandsko", + "nameId": "holandsko", + "code": "NL" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": false, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1294559, + "price": { + "amount": 19.9, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 19.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1294559, + "warehouseId": 8799, + "packageInfo": { + "amount": 1.0, + "unit": "piece" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 20, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1294559, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1294559, + "shoppingListIds": [ + 44371, + 609306 + ], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": true, + "favorite": true + } + }, + { + "productId": 1410881, + "base": { + "id": 1410881, + "name": "Čerstvě utrženo – Okurka hadovka, bez folie, nestandard", + "slug": "cerstve-utrzeno-okurka-hadovka-bez-folie-nestandard", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 330 g", + "badges": [ + { + "type": "freshly-harvested", + "title": "Čerstvě sklizeno", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1410881/1410881-1624431896215.jpg" + ], + "countries": [ + { + "name": "Česká republika", + "nameId": "ceska-republika", + "code": "CZ" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": "https://cdn.rohlik.cz/images/countryFlags/cz.svg", + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": "cz", + "attachments": [] + }, + "prices": { + "productId": 1410881, + "price": { + "amount": 21.42, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 64.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1410881, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.33, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 0, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": "Vyprodáno. Očekáváme dnes.", + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": false + }, + "categories": { + "productId": 1410881, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1410881, + "shoppingListIds": [ + 240128, + 245344 + ], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": true, + "favorite": true + } + }, + { + "productId": 1294911, + "base": { + "id": 1294911, + "name": "BIO Okurka hadovka 1 ks (cca 300 g)", + "slug": "bio-okurka-hadovka-1-ks-cca-300-g", + "mainCategoryId": 300102013, + "unit": "ks", + "textualAmount": "1 ks", + "badges": [ + { + "type": "bio", + "title": "BIO", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1294911/1294911-1542968316.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1294911/1294911-1599214294.jpg" + ], + "countries": [ + { + "name": "Španělsko", + "nameId": "spanelsko", + "code": "E" + }, + { + "name": "Holandsko", + "nameId": "holandsko", + "code": "NL" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": false, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1294911, + "price": { + "amount": 49.9, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 49.9, + "currency": "CZK" + }, + "sales": [ + { + "id": 14223428, + "type": "premium", + "triggerAmount": 1, + "price": { + "amount": 44.91, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 44.91, + "currency": "CZK" + }, + "originalPrice": { + "amount": 49.9, + "currency": "CZK" + }, + "originalPricePerUnit": null, + "badges": [ + { + "type": "premium-discount", + "title": "-10 %", + "subtitle": null, + "tooltip": null, + "description": null + } + ], + "validTill": null, + "active": true, + "silent": false, + "bundleId": null + } + ], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1294911, + "warehouseId": 8799, + "packageInfo": { + "amount": 1.0, + "unit": "piece" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 13, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [ + { + "id": 14223428, + "amount": 691, + "unlimitedAmount": true, + "shelfLife": null + } + ], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1294911, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1294911, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": true + } + }, + { + "productId": 1340323, + "base": { + "id": 1340323, + "name": "Baby (snackové) okurky, balení", + "slug": "baby-snackove-okurky-baleni", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "250 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1340323/1340323-1527486995.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1340323/1340323-1779454372501.jpg" + ], + "countries": [ + { + "name": "Španělsko", + "nameId": "spanelsko", + "code": "E" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": false, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1340323, + "price": { + "amount": 54.9, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 219.6, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1340323, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.25, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 6, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1340323, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1340323, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": true + } + }, + { + "productId": 1463133, + "base": { + "id": 1463133, + "name": "Annatura Grilovaná cuketa plátky, balení", + "slug": "annatura-grilovana-cuketa-platky-baleni", + "mainCategoryId": 300124669, + "unit": "kg", + "textualAmount": "200 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": "Annatura", + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1463133/1463133-1738176735576.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1463133/1463133-1729180810439.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [ + { + "type": "BRAND", + "slug": "znacka", + "values": [ + { + "name": "Annatura", + "slug": "annatura" + } + ] + } + ], + "type": "PRODUCT", + "weightedItem": false, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1463133, + "price": { + "amount": 114.9, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 574.5, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1463133, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.2, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 9, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 2, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1463133, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300124625, + "type": "normal", + "name": "Kuchařské boxy, hotové saláty a ready to cook", + "slug": "kucharske-boxy-hotove-salaty-a-ready-to-cook", + "level": 1 + }, + { + "id": 300124669, + "type": "normal", + "name": "Rychlá příprava a předvařená zelenina", + "slug": "rychla-priprava-a-predvarena-zelenina", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1463133, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1463132, + "base": { + "id": 1463132, + "name": "Annatura Grilovaný lilek plátky, balení", + "slug": "annatura-grilovany-lilek-platky-baleni", + "mainCategoryId": 300124669, + "unit": "kg", + "textualAmount": "200 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": "Annatura", + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1463132/1463132-1738176598995.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1463132/1463132-1729180788021.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [ + { + "type": "BRAND", + "slug": "znacka", + "values": [ + { + "name": "Annatura", + "slug": "annatura" + } + ] + } + ], + "type": "PRODUCT", + "weightedItem": false, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1463132, + "price": { + "amount": 114.9, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 574.5, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1463132, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.2, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 24, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 2, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1463132, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300124625, + "type": "normal", + "name": "Kuchařské boxy, hotové saláty a ready to cook", + "slug": "kucharske-boxy-hotove-salaty-a-ready-to-cook", + "level": 1 + }, + { + "id": 300124669, + "type": "normal", + "name": "Rychlá příprava a předvařená zelenina", + "slug": "rychla-priprava-a-predvarena-zelenina", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1463132, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1460862, + "base": { + "id": 1460862, + "name": "Okurkový meloun Barattiere", + "slug": "okurkovy-meloun-barattiere", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 460 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1460862/1460862-1714380105317.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1460862/1460862-1713860979690.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1460862, + "price": { + "amount": 64.35, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 139.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1460862, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.46, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1460862, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1460862, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1450443, + "base": { + "id": 1450443, + "name": "Okra (Ibiškovec jedlý), volně", + "slug": "okra-ibiskovec-jedly-volne", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 100 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1450443/1450443-1698415787842.jpg" + ], + "countries": [ + { + "name": "Thajsko", + "nameId": "thajsko", + "code": "T" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1450443, + "price": { + "amount": 54.99, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 549.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1450443, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.1, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 30, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1450443, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1450443, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1406902, + "base": { + "id": 1406902, + "name": "BIO Lilek 1 ks", + "slug": "bio-lilek-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 380 g", + "badges": [ + { + "type": "bio", + "title": "BIO", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1406902/1406902-1658403146261.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1406902, + "price": { + "amount": 72.16, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 189.9, + "currency": "CZK" + }, + "sales": [ + { + "id": 14184642, + "type": "premium", + "triggerAmount": 1, + "price": { + "amount": 64.94, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 170.89, + "currency": "CZK" + }, + "originalPrice": { + "amount": 72.16, + "currency": "CZK" + }, + "originalPricePerUnit": null, + "badges": [ + { + "type": "premium-discount", + "title": "-10 %", + "subtitle": null, + "tooltip": null, + "description": null + } + ], + "validTill": null, + "active": true, + "silent": false, + "bundleId": null + } + ], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1406902, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.38, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 5, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 3, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [ + { + "id": 14184642, + "amount": 5, + "unlimitedAmount": true, + "shelfLife": null + } + ], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1406902, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1406902, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1357593, + "base": { + "id": 1357593, + "name": "Cuketa kulatá 1 ks", + "slug": "cuketa-kulata-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 260 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1357593/1357593-1562589318.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1357593/1357593-1562589342.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1357593, + "price": { + "amount": 28.57, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 109.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1357593, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.26, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 26, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1357593, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1357593, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1350465, + "base": { + "id": 1350465, + "name": "BIO Cuketa zelená 1 ks", + "slug": "bio-cuketa-zelena-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 330 g", + "badges": [ + { + "type": "bio", + "title": "BIO", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1316433/1316433-1536154761.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1350465/1350465-1599495939.jpg" + ], + "countries": [ + { + "name": "Itálie", + "nameId": "italie", + "code": "IT" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1350465, + "price": { + "amount": 26.7, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 80.9, + "currency": "CZK" + }, + "sales": [ + { + "id": 14207829, + "type": "premium", + "triggerAmount": 1, + "price": { + "amount": 24.03, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 72.82, + "currency": "CZK" + }, + "originalPrice": { + "amount": 26.7, + "currency": "CZK" + }, + "originalPricePerUnit": null, + "badges": [ + { + "type": "premium-discount", + "title": "-10 %", + "subtitle": null, + "tooltip": null, + "description": null + } + ], + "validTill": null, + "active": true, + "silent": false, + "bundleId": null + } + ], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1350465, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.33, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "ALLOWED", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 3, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [ + { + "id": 14207829, + "amount": 529, + "unlimitedAmount": true, + "shelfLife": null + } + ], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1350465, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1350465, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1350463, + "base": { + "id": 1350463, + "name": "Lilek 1 ks", + "slug": "lilek-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 430 g", + "badges": [ + { + "type": "best-buy", + "title": "Denní kontrola cen", + "subtitle": null, + "tooltip": "" + } + ], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1350463/1350463-1566815511.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1350463/1350463-1599481806.jpg" + ], + "countries": [ + { + "name": "Španělsko", + "nameId": "spanelsko", + "code": "E" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1350463, + "price": { + "amount": 27.53, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 69.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1350463, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.426, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 50, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": null, + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 6, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": true + }, + "categories": { + "productId": 1350463, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1350463, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1380741, + "base": { + "id": 1380741, + "name": "Okurky nakladačky (velikost plodu 7-12cm), balení", + "slug": "okurky-nakladacky-velikost-plodu-7-12cm-baleni", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 500 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1380741/1380741-1591973028.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1380741/1380741-1688364564414.jpg" + ], + "countries": [ + { + "name": "Česká republika", + "nameId": "ceska-republika", + "code": "CZ" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": "https://cdn.rohlik.cz/images/countryFlags/cz.svg", + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": "cz", + "attachments": [] + }, + "prices": { + "productId": 1380741, + "price": { + "amount": 39.95, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 79.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1380741, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.5, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 0, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": "Vyprodáno. Očekáváme dnes.", + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 0, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": false + }, + "categories": { + "productId": 1380741, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1380741, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + }, + { + "productId": 1352407, + "base": { + "id": 1352407, + "name": "Cuketa žlutá 1 ks", + "slug": "cuketa-zluta-1-ks", + "mainCategoryId": 300102013, + "unit": "kg", + "textualAmount": "cca 370 g", + "badges": [], + "archived": false, + "premiumOnly": false, + "brand": null, + "images": [ + "https://cdn.rohlik.cz/images/grocery/products/1313853/1313853-1502715602.jpg", + "https://cdn.rohlik.cz/images/grocery/products/1313853/1313853-1536759379.jpg" + ], + "countries": [ + { + "name": "Holandsko", + "nameId": "holandsko", + "code": "NL" + } + ], + "canBeFavorite": true, + "canBeRated": true, + "information": [], + "image3dData": null, + "adviceForSafeUse": null, + "countryOfOriginFlagIcon": null, + "productStory": null, + "filters": [], + "type": "PRODUCT", + "weightedItem": true, + "packageRatio": null, + "sellerId": 1, + "flag": null, + "attachments": [] + }, + "prices": { + "productId": 1352407, + "price": { + "amount": 29.56, + "currency": "CZK" + }, + "pricePerUnit": { + "amount": 79.9, + "currency": "CZK" + }, + "sales": [], + "lastMinuteTitle": null + }, + "stock": { + "productId": 1352407, + "warehouseId": 8799, + "packageInfo": { + "amount": 0.37, + "unit": "kg" + }, + "preorderEnabled": false, + "maxBasketAmount": 0, + "maxBasketAmountReason": "AVAILABLE", + "unavailabilityReason": "Vyprodáno. Očekáváme v út.", + "deliveryRestriction": null, + "expectedReplenishment": null, + "availabilityDimension": 1, + "shelfLife": null, + "billablePackaging": null, + "tooltips": [ + { + "type": "PRODUCT_EXTREME_WEIGHT", + "closable": true, + "triggerAmount": 6, + "size": null, + "message": "Prosím, zkontrolujte množství položek před dokončením objednávky.", + "actionable": false + } + ], + "sales": [], + "freshness": null, + "premiumOnly": false, + "inStock": false + }, + "categories": { + "productId": 1352407, + "categories": [ + { + "id": 300102000, + "type": "normal", + "name": "Ovoce a zelenina", + "slug": "ovoce-a-zelenina", + "level": 0 + }, + { + "id": 300102008, + "type": "normal", + "name": "Zelenina", + "slug": "zelenina", + "level": 1 + }, + { + "id": 300102013, + "type": "normal", + "name": "Okurky, cukety a lilky", + "slug": "okurky-cukety-a-lilky", + "level": 2 + } + ] + }, + "user_data": { + "productId": 1352407, + "shoppingListIds": [], + "canBeUserRated": true, + "userRating": "no-rating", + "watchDogActive": false, + "shoppingRoutine": false, + "favorite": false + } + } +] \ No newline at end of file diff --git a/10PriceScraping/Rohlik/scrape_first_leaf.py b/10PriceScraping/Rohlik/scrape_first_leaf.py index b574d6a..0eca052 100644 --- a/10PriceScraping/Rohlik/scrape_first_leaf.py +++ b/10PriceScraping/Rohlik/scrape_first_leaf.py @@ -1,9 +1,18 @@ """ Open the first leaf (deepest) subcategory from categories_live.json -and list all products in it via the Rohlik JSON API. +and list all products in it via the same API calls the website itself makes. -Endpoint: - GET /api/v1/categories/normal/{categoryId}/products?page=N&size=50&sort=recommended +Flow that mimics the real frontend: + 1. GET /api/v1/categories/normal/{categoryId}/products?page=N + -> { productIds: [...] } + 2. For each chunk of IDs, call 5 batch endpoints in the same way the site does: + /api/v1/products + /api/v1/products/prices + /api/v1/products/stock + /api/v1/products/categories + /api/v1/products/user-data + All use repeated query params: ?products=ID1&products=ID2&... + 3. Merge results per productId into one record. """ import json @@ -14,10 +23,19 @@ from test_login import ensure_logged_in TREE_PATH = Path(__file__).parent / "categories_live.json" PAGE_SIZE = 50 +CHUNK = 30 # how many IDs per batch request + +# Endpoints that the frontend calls in parallel for each set of product IDs. +PRODUCT_BATCH_ENDPOINTS = { + "base": "/api/v1/products", + "prices": "/api/v1/products/prices", + "stock": "/api/v1/products/stock", + "categories": "/api/v1/products/categories", + "user_data": "/api/v1/products/user-data", +} def find_first_leaf(nodes, path=None): - """Walk the tree depth-first and return (path, leaf_node) of the first leaf.""" if path is None: path = [] for n in nodes: @@ -31,44 +49,63 @@ def find_first_leaf(nodes, path=None): return None -def fetch_products_page(context, category_id, page): - url = f"{BASE_URL}/api/v1/categories/normal/{category_id}/products" - params = {"page": page, "size": PAGE_SIZE, "sort": "recommended", "filter": "", "excludeProductIds": ""} - resp = context.request.get(url, params=params) +def get_json(context, url): + resp = context.request.get(url) if resp.status != 200: - raise RuntimeError(f"GET {url} -> {resp.status}: {resp.text()[:200]}") + raise RuntimeError(f"GET {url[:120]}... -> {resp.status}: {resp.text()[:200]}") return resp.json() -def extract_products(payload): - """Find the products list in the payload — try common shapes.""" +def fetch_products_page(context, category_id, page): + url = (f"{BASE_URL}/api/v1/categories/normal/{category_id}/products" + f"?page={page}&size={PAGE_SIZE}&sort=recommended&filter=&excludeProductIds=") + return get_json(context, url) + + +def fetch_batch(context, path, product_ids): + """Call a batch endpoint with ?products=ID&products=ID&... — like the frontend does.""" + qs = "&".join(f"products={pid}" for pid in product_ids) + url = f"{BASE_URL}{path}?{qs}" + return get_json(context, url) + + +def as_list(payload): + """Each batch endpoint returns either a list or a wrapper around one.""" if isinstance(payload, list): return payload if isinstance(payload, dict): - for k in ("products", "data", "items"): + for k in ("data", "products", "items"): v = payload.get(k) if isinstance(v, list): return v - if isinstance(v, dict): - for k2 in ("products", "items"): - if isinstance(v.get(k2), list): - return v[k2] return [] -def format_price(p): - """Try common price fields.""" - if not isinstance(p, dict): - return "" - for k in ("price", "amount", "value"): - v = p.get(k) - if isinstance(v, (int, float)): - return f"{v:.2f}" - if isinstance(v, dict): - for k2 in ("amount", "value", "full"): - if isinstance(v.get(k2), (int, float)): - return f"{v[k2]:.2f}" - return "" +def index_by_id(items): + out = {} + for it in items: + if not isinstance(it, dict): + continue + pid = it.get("productId") or it.get("id") + if pid is not None: + out[int(pid)] = it + return out + + +def fetch_merged_products(context, product_ids): + """For a chunk of IDs, call all 5 endpoints and merge per productId.""" + results = {key: index_by_id(as_list(fetch_batch(context, path, product_ids))) + for key, path in PRODUCT_BATCH_ENDPOINTS.items()} + + merged = [] + for pid in product_ids: + record = {"productId": pid} + for key in PRODUCT_BATCH_ENDPOINTS: + data = results[key].get(int(pid)) + if data is not None: + record[key] = data + merged.append(record) + return merged def main(): @@ -76,46 +113,87 @@ def main(): raise SystemExit(f"Missing {TREE_PATH} — run scrape_categories.py first.") data = json.loads(TREE_PATH.read_text(encoding="utf-8")) - tree = data["tree"] - path, leaf = find_first_leaf(tree) + path, leaf = find_first_leaf(data["tree"]) print(f"First leaf: {' > '.join(path)} (id={leaf['id']})") print(f"URL: {BASE_URL}{leaf['url']}\n") with sync_playwright() as pw: context, page = ensure_logged_in(pw) - all_products = [] + # Step 1: collect all product IDs across pages + all_ids = [] page_num = 0 while True: - print(f"Fetching page {page_num} ...") + print(f"Listing page {page_num} ...") payload = fetch_products_page(context, leaf["id"], page_num) - products = extract_products(payload) - print(f" got {len(products)} products") - if not products: + ids = payload.get("productIds") or [] + print(f" got {len(ids)} product IDs") + if not ids: break - all_products.extend(products) - if len(products) < PAGE_SIZE: + all_ids.extend(ids) + if len(ids) < PAGE_SIZE: break page_num += 1 + print(f"\nTotal IDs: {len(all_ids)}") + if not all_ids: + context.browser.close() + return + + # Step 2: per chunk, hit the 5 batch endpoints the frontend uses and merge + all_products = [] + for i in range(0, len(all_ids), CHUNK): + chunk = all_ids[i:i + CHUNK] + print(f"Batch fetch for IDs {i}..{i + len(chunk) - 1} ({len(chunk)} items) ...") + merged = fetch_merged_products(context, chunk) + all_products.extend(merged) + print(f"\nTotal products: {len(all_products)}\n") - # Show first product raw structure so we can confirm field names + # Show one merged record so we see real field shapes if all_products: - print("--- Sample raw product (first item, truncated) ---") - print(json.dumps(all_products[0], ensure_ascii=False, indent=2)[:1500]) + print("--- Sample merged product (first item, truncated) ---") + print(json.dumps(all_products[0], ensure_ascii=False, indent=2)[:2500]) print("--- end sample ---\n") - print("Products in category:") + # Simple human-readable listing + print(f"{'ID':>9} {'Skladem':<8} {'Cena':>10} {'Za jedn.':>11} {'Akce':>10} Název (balení)") + print("-" * 100) for p in all_products: - name = p.get("productName") or p.get("name") or p.get("title") or "?" - pid = p.get("productId") or p.get("id") or "?" - price = format_price(p) - print(f" [{pid}] {name} {price}") + base = p.get("base") or {} + prices = p.get("prices") or {} + stock = p.get("stock") or {} + + name = base.get("name") or "?" + unit = base.get("unit") or "" + textual = base.get("textualAmount") or "" + + price = (prices.get("price") or {}).get("amount") + ppu = (prices.get("pricePerUnit") or {}).get("amount") + sale_price = None + sale_badge = "" + sales = prices.get("sales") or [] + if sales: + first = sales[0] + sale_price = (first.get("price") or {}).get("amount") + badges = first.get("badges") or [] + if badges: + sale_badge = badges[0].get("title") or first.get("type") or "" + else: + sale_badge = first.get("type") or "" + + in_stock = stock.get("inStock") + stock_str = "ano" if in_stock else ("ne" if in_stock is False else "?") + + price_str = f"{price:.2f}" if isinstance(price, (int, float)) else "" + ppu_str = f"{ppu:.2f}/{unit}" if isinstance(ppu, (int, float)) else "" + sale_str = f"{sale_price:.2f} {sale_badge}".strip() if isinstance(sale_price, (int, float)) else "" + + print(f"{p['productId']:>9} {stock_str:<8} {price_str:>10} {ppu_str:>11} {sale_str:>10} {name} ({textual})") out_path = Path(__file__).parent / f"products_{leaf['id']}.json" out_path.write_text(json.dumps(all_products, ensure_ascii=False, indent=2), encoding="utf-8") - print(f"\nSaved raw products -> {out_path} ({out_path.stat().st_size} bytes)") + print(f"\nSaved -> {out_path} ({out_path.stat().st_size} bytes)") context.browser.close()