diff --git a/mealie/services/image/image.py b/mealie/services/image/image.py index 7cc35b771062..d162135038b9 100644 --- a/mealie/services/image/image.py +++ b/mealie/services/image/image.py @@ -47,7 +47,21 @@ def scrape_image(image_url: str, slug: str) -> Path: pass if isinstance(image_url, list): # Handles List Types - image_url = image_url[0] + # Multiple images have been defined in the schema - usually different resolutions + # Typically would be in smallest->biggest order, but can't be certain so test each. + # 'Google will pick the best image to display in Search results based on the aspect ratio and resolution.' + + all_image_requests = [] + for url in image_url: + try: + r = requests.get(url, stream=True, headers={"User-Agent": ""}) + except Exception: + logger.exception("Image {url} could not be requested") + continue + if r.status_code == 200: + all_image_requests.append((url, r)) + + image_url, _ = max(all_image_requests, key=lambda url_r: len(url_r[1].content), default=("", 0)) if isinstance(image_url, dict): # Handles Dictionary Types for key in image_url: diff --git a/mealie/services/scraper/scraper.py b/mealie/services/scraper/scraper.py index 66b928f9efbc..c04d5c3bb090 100644 --- a/mealie/services/scraper/scraper.py +++ b/mealie/services/scraper/scraper.py @@ -145,7 +145,7 @@ def clean_scraper(scraped_data: SchemaScraperFactory.SchemaScraper, url: str) -> return Recipe( name=try_get_default(scraped_data.title, "name", "No Name Found", cleaner.clean_string), slug="", - image=try_get_default(scraped_data.image, "image", None), + image=try_get_default(None, "image", None), description=try_get_default(None, "description", "", cleaner.clean_string), nutrition=try_get_default(None, "nutrition", None, cleaner.clean_nutrition), recipe_yield=try_get_default(scraped_data.yields, "recipeYield", "1", cleaner.clean_string),