diff --git a/app/services/browserless_service.py b/app/services/browserless_service.py index e9b3723..cb75215 100644 --- a/app/services/browserless_service.py +++ b/app/services/browserless_service.py @@ -238,8 +238,9 @@ class BrowserlessService: safe_name = "".join(c if c.isalnum() else "_" for c in url.split("//")[-1])[:50] filename = f"{safe_name}_{timestamp}.jpg" screenshot_path = f"{screenshots_dir}/{filename}" - - await page.screenshot(path=screenshot_path, full_page=False, quality=80, type="jpeg") + + # Use full_page=True to capture entire page, not just viewport + await page.screenshot(path=screenshot_path, full_page=True, quality=80, type="jpeg") logger.info(f"Screenshot saved to {screenshot_path}") except Exception as e: logger.warning(f"Failed to take screenshot: {e}") diff --git a/app/utils/image.py b/app/utils/image.py index 785b75a..09dd3d6 100644 --- a/app/utils/image.py +++ b/app/utils/image.py @@ -8,7 +8,8 @@ from PIL import Image logger = logging.getLogger(__name__) # Image processing constants -MAX_IMAGE_SIZE = 1024 +# Increased from 1024 to 2048 to preserve more detail for AI analysis +MAX_IMAGE_SIZE = 2048 JPEG_QUALITY = 85 diff --git a/app/utils/text.py b/app/utils/text.py index bbc7c56..4176ded 100644 --- a/app/utils/text.py +++ b/app/utils/text.py @@ -69,6 +69,7 @@ def filter_relevant_text(text: str, max_length: int = 2000) -> str: # Keywords to search for (case-insensitive) price_keywords = [ + # English patterns r"\$\d+\.?\d*", # $XX.XX pattern r"\d+\.\d{2}\s*(usd|eur|gbp|cad)", # XX.XX USD pattern "price:", @@ -78,9 +79,23 @@ def filter_relevant_text(text: str, max_length: int = 2000) -> str: "save:", "discount:", r"\$", # Any dollar sign + # French patterns + r"€", # Euro symbol + r"\d+,\d{2}\s*€", # French format: 12,99 € + r"\d+\.\d{3},\d{2}", # French thousands: 1.234,56 + r"\d+\s\d{3},\d{2}", # French thousands with space: 1 234,56 + "prix", # French: price + "prix:", + "coût", + "coût:", + "promotion", + "réduction", + "économie", + "remise", ] stock_keywords = [ + # English keywords "add to cart", "buy now", "purchase", @@ -96,6 +111,20 @@ def filter_relevant_text(text: str, max_length: int = 2000) -> str: "ships", "delivery", "get it by", + # French keywords + "ajouter au panier", + "acheter", + "commander", + "en stock", + "rupture", + "rupture de stock", + "disponible", + "indisponible", + "épuisé", + "être averti", + "précommande", + "livraison", + "expédié", ] all_keywords = price_keywords + stock_keywords