mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	improved scraper with debug
This commit is contained in:
		
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @@ -9,5 +9,8 @@ | ||||
|   "python.testing.unittestEnabled": false, | ||||
|   "python.testing.nosetestsEnabled": false, | ||||
|   "python.testing.pytestEnabled": false, | ||||
|   "python.testing.promptToConfigure": false | ||||
|   "python.testing.promptToConfigure": false, | ||||
|   "cSpell.enableFiletypes": [ | ||||
|     "!python" | ||||
|   ] | ||||
| } | ||||
|   | ||||
							
								
								
									
										0
									
								
								dev/scratch/scratch.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								dev/scratch/scratch.json
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										7
									
								
								dev/todos.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								dev/todos.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| Frontend | ||||
| - [ ] Catch 400 / bad response on create from URL | ||||
|  | ||||
| Backend | ||||
| - [x] Add Debug folder for writing the last pulled recipe data to.  | ||||
| - [ ] Normalize Recipe data on scrape | ||||
| - [ ] Support how to Sections | ||||
							
								
								
									
										74
									
								
								mealie/data/debug/last_recipe.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								mealie/data/debug/last_recipe.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| { | ||||
|     "@context": "http://schema.org/", | ||||
|     "@type": "Recipe", | ||||
|     "name": "Moscow Mule Recipe", | ||||
|     "author": { | ||||
|         "@type": "Person", | ||||
|         "name": "John Kanell" | ||||
|     }, | ||||
|     "description": "How to make a classic Moscow Mule using 3 simple ingredients. Don't forget to check out my step by step photos, tips and other cocktail varations above!", | ||||
|     "datePublished": "2020-12-28 03:59:30+00:00", | ||||
|     "image": "moscow-mule-recipe.jpg", | ||||
|     "recipeYield": [ | ||||
|         "1", | ||||
|         "1 serving" | ||||
|     ], | ||||
|     "prepTime": "0:05:00", | ||||
|     "totalTime": "0:05:00", | ||||
|     "recipeIngredient": [ | ||||
|         "2 oz vodka", | ||||
|         "1 oz fresh lime juice", | ||||
|         "4 oz ginger beer", | ||||
|         "Garnish with lime wedges" | ||||
|     ], | ||||
|     "recipeInstructions": [ | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Juice the lime and cut extra for garnish.", | ||||
|             "name": "Juice the lime and cut extra for garnish.", | ||||
|             "url": "https://preppykitchen.com/moscow-mule/#wprm-recipe-37963-step-0-0" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Fill a Moscow mule mug or glass with ice then add the lime juice, vodka and ginger beer.", | ||||
|             "name": "Fill a Moscow mule mug or glass with ice then add the lime juice, vodka and ginger beer.", | ||||
|             "url": "https://preppykitchen.com/moscow-mule/#wprm-recipe-37963-step-0-1" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Stir and top with lime wedges.", | ||||
|             "name": "Stir and top with lime wedges.", | ||||
|             "url": "https://preppykitchen.com/moscow-mule/#wprm-recipe-37963-step-0-2" | ||||
|         } | ||||
|     ], | ||||
|     "recipeCategory": [ | ||||
|         "Drinks" | ||||
|     ], | ||||
|     "recipeCuisine": [ | ||||
|         "American" | ||||
|     ], | ||||
|     "keywords": "Classic Moscow Mule, Moscow mule recipe, Moscow Mule variations", | ||||
|     "nutrition": { | ||||
|         "@type": "NutritionInformation", | ||||
|         "calories": "177 kcal", | ||||
|         "carbohydrateContent": "12 g", | ||||
|         "proteinContent": "1 g", | ||||
|         "fatContent": "1 g", | ||||
|         "sodiumContent": "9 mg", | ||||
|         "sugarContent": "10 g", | ||||
|         "servingSize": "1 serving" | ||||
|     }, | ||||
|     "@id": "https://preppykitchen.com/moscow-mule/#recipe", | ||||
|     "isPartOf": { | ||||
|         "@id": "https://preppykitchen.com/moscow-mule/#article" | ||||
|     }, | ||||
|     "mainEntityOfPage": "https://preppykitchen.com/moscow-mule/#webpage", | ||||
|     "url": "https://preppykitchen.com/moscow-mule/", | ||||
|     "slug": "moscow-mule-recipe", | ||||
|     "orgURL": "https://preppykitchen.com/moscow-mule/", | ||||
|     "categories": [], | ||||
|     "tags": [], | ||||
|     "dateAdded": null, | ||||
|     "notes": [], | ||||
|     "extras": [] | ||||
| } | ||||
							
								
								
									
										107
									
								
								mealie/data/debug/scratch.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								mealie/data/debug/scratch.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| { | ||||
|     "@context": "http://schema.org/", | ||||
|     "@type": "Recipe", | ||||
|     "name": "Dairy-Free Impossible Pumpkin Pie", | ||||
|     "author": { | ||||
|         "@type": "Person", | ||||
|         "name": "Kare for Kitchen Treaty" | ||||
|     }, | ||||
|     "description": "This crustless pumpkin pie might just be the\u00a0easiest\u00a0you'll ever make. Simply blend the ingredients together, pour into your pie pan, and bake!", | ||||
|     "datePublished": "2017-11-10 16:12:06+00:00", | ||||
|     "image": "dairy-free-impossible-pumpkin-pie.jpg", | ||||
|     "recipeYield": [ | ||||
|         "8" | ||||
|     ], | ||||
|     "prepTime": "0:10:00", | ||||
|     "cookTime": "0:45:00", | ||||
|     "totalTime": "0:55:00", | ||||
|     "recipeIngredient": [ | ||||
|         "1  (15-ounce) can coconut milk (I recommend full-fat for a richer pie, but lite also works)", | ||||
|         "1 cup pumpkin puree", | ||||
|         "4  large eggs", | ||||
|         "1/2 cup granulated sugar", | ||||
|         "1 tablespoon pure vanilla extract", | ||||
|         "1/2 cup all-purpose flour (or your favorite cup-for-cup gluten-free flour blend*)", | ||||
|         "1 teaspoon baking powder", | ||||
|         "1 tablespoon pumpkin pie spice", | ||||
|         "1/2 teaspoon fine-grain sea salt or table salt", | ||||
|         "Coconut whipped cream (for serving**)" | ||||
|     ], | ||||
|     "recipeInstructions": [ | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Preheat oven to 375 degrees Fahrenheit and position rack in the middle of the oven. Spray a 9- or 10-inch pie pan with baking spray or oil the pan with coconut oil or vegan butter.", | ||||
|             "name": "Preheat oven to 375 degrees Fahrenheit and position rack in the middle of the oven. Spray a 9- or 10-inch pie pan with baking spray or oil the pan with coconut oil or vegan butter.", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-0" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Add the coconut milk, pumpkin, eggs, sugar, and vanilla to the pitcher of a blender. Blend until combined, about 20 seconds. Add the flour, baking powder, pumpkin pie spice, and salt. Blend again until well-combined, another 20\u00a0seconds.", | ||||
|             "name": "Add the coconut milk, pumpkin, eggs, sugar, and vanilla to the pitcher of a blender. Blend until combined, about 20 seconds. Add the flour, baking powder, pumpkin pie spice, and salt. Blend again until well-combined, another 20\u00a0seconds.", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-1" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Pour filling into the pie plate. The mixture will be fairly runny. Carefully transfer to the preheated oven.", | ||||
|             "name": "Pour filling into the pie plate. The mixture will be fairly runny. Carefully transfer to the preheated oven.", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-2" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Bake\u00a0until the middle just barely jiggles, 40-50 minutes. I like to check the middle by giving the pie pan a little nudge, and if it seems like it's no longer liquid, I'll pull the pie out and insert a butter knife about halfway between the center and the edge. If the knife comes out relatively clean - no runny pie filling - it's\u00a0done!", | ||||
|             "name": "Bake\u00a0until the middle just barely jiggles, 40-50 minutes. I like to check the middle by giving the pie pan a little nudge, and if it seems like it's no longer liquid, I'll pull the pie out and insert a butter knife about halfway between the center and the edge. If the knife comes out relatively clean - no runny pie filling - it's\u00a0done!", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-3" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Place on a cooling rack and let cool, about 1 hour. Transfer to refrigerator to completely\u00a0cool, at least one more hour (or up to 3 days in advance).", | ||||
|             "name": "Place on a cooling rack and let cool, about 1 hour. Transfer to refrigerator to completely\u00a0cool, at least one more hour (or up to 3 days in advance).", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-4" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "If desired, top pie with dollops of coconut whipped cream. Or simply cut slices, transfer to a plate, and top\u00a0individual servings with the whipped cream.", | ||||
|             "name": "If desired, top pie with dollops of coconut whipped cream. Or simply cut slices, transfer to a plate, and top\u00a0individual servings with the whipped cream.", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-5" | ||||
|         }, | ||||
|         { | ||||
|             "@type": "HowToStep", | ||||
|             "text": "Keeps in the refrigerator for 3-4 days. I suggest covering the completely cooled pie with plastic wrap if not serving right away.", | ||||
|             "name": "Keeps in the refrigerator for 3-4 days. I suggest covering the completely cooled pie with plastic wrap if not serving right away.", | ||||
|             "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/#wprm-recipe-32856-step-0-6" | ||||
|         } | ||||
|     ], | ||||
|     "aggregateRating": { | ||||
|         "@type": "AggregateRating", | ||||
|         "ratingValue": "5", | ||||
|         "ratingCount": "4" | ||||
|     }, | ||||
|     "recipeCategory": [ | ||||
|         "Dessert" | ||||
|     ], | ||||
|     "recipeCuisine": [ | ||||
|         "American" | ||||
|     ], | ||||
|     "keywords": "pie", | ||||
|     "nutrition": { | ||||
|         "@type": "NutritionInformation", | ||||
|         "calories": "231 kcal", | ||||
|         "sugarContent": "14 g", | ||||
|         "sodiumContent": "239 mg", | ||||
|         "fatContent": "14 g", | ||||
|         "saturatedFatContent": "11 g", | ||||
|         "carbohydrateContent": "23 g", | ||||
|         "fiberContent": "1 g", | ||||
|         "proteinContent": "5 g", | ||||
|         "cholesterolContent": "82 mg", | ||||
|         "servingSize": "1 serving" | ||||
|     }, | ||||
|     "url": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/", | ||||
|     "slug": "dairy-free-impossible-pumpkin-pie", | ||||
|     "orgURL": "https://www.kitchentreaty.com/dairy-free-impossible-pumpkin-pie/", | ||||
|     "categories": [], | ||||
|     "tags": [], | ||||
|     "dateAdded": null, | ||||
|     "notes": [], | ||||
|     "extras": [] | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								mealie/data/img/chicken-salad-with-citrus-and-chile-oil.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mealie/data/img/chicken-salad-with-citrus-and-chile-oil.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.4 MiB | 
							
								
								
									
										
											BIN
										
									
								
								mealie/data/img/christmas-ornament-cupcakes.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mealie/data/img/christmas-ornament-cupcakes.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 114 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mealie/data/img/dairy-free-impossible-pumpkin-pie.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mealie/data/img/dairy-free-impossible-pumpkin-pie.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 136 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mealie/data/img/how-to-make-instant-pot-spaghetti.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mealie/data/img/how-to-make-instant-pot-spaghetti.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 MiB | 
							
								
								
									
										
											BIN
										
									
								
								mealie/data/img/moscow-mule-recipe.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mealie/data/img/moscow-mule-recipe.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 53 KiB | 
| @@ -42,9 +42,11 @@ async def get_recipe_url(url: dict): | ||||
|     """ Takes in a URL and Attempts to scrape data and load it into the database """ | ||||
|  | ||||
|     url = url.get("url") | ||||
|     slug = create_from_url(url) | ||||
|  | ||||
|     try: | ||||
|         slug = create_from_url(url) | ||||
|         pass | ||||
|         # slug = create_from_url(url) | ||||
|     except: | ||||
|         raise HTTPException( | ||||
|             status_code=400, detail=SnackResponse.error("Unable to Parse URL") | ||||
|   | ||||
| @@ -1,3 +1,6 @@ | ||||
| import json | ||||
| from pathlib import Path | ||||
|  | ||||
| from scrape_schema_recipe import scrape_url | ||||
| from slugify import slugify | ||||
| from utils.logger import logger | ||||
| @@ -5,9 +8,24 @@ from utils.logger import logger | ||||
| from services.image_services import scrape_image | ||||
| from services.recipe_services import Recipe | ||||
|  | ||||
| CWD = Path(__file__).parent | ||||
| TEMP_FILE = CWD.parent.joinpath("data", "debug", "last_recipe.json") | ||||
|  | ||||
|  | ||||
| def normalize_data(recipe_data: dict) -> dict: | ||||
|     if type(recipe_data["recipeYield"]) == list: | ||||
|         recipe_data["recipeYield"] = recipe_data["recipeYield"][0] | ||||
|  | ||||
|     return recipe_data | ||||
|  | ||||
|  | ||||
| def create_from_url(url: str) -> dict: | ||||
|     recipe_data = process_recipe_url(url) | ||||
|  | ||||
|     with open(TEMP_FILE, "w") as f: | ||||
|         f.write(json.dumps(recipe_data, indent=4, default=str)) | ||||
|  | ||||
|     recipe_data = normalize_data(recipe_data) | ||||
|     recipe = Recipe(**recipe_data) | ||||
|  | ||||
|     return recipe.save_to_db() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user