private async Task ProcessRecipe(string url, ParsingContext context, IParsingLogic logic) { IDocument page = null; try { page = await HtmlLoader.LoadAsync(url); } catch { Console.WriteLine($"Error downloading page {url}"); return; } try { var ingredients = context.GetIngredients(logic, page); var id = context.GetId(logic, page); if (ingredients.Select(i => i.name).Distinct().Count() != ingredients.Count()) { return; } if (RecipeDBProvider.RecipeExists(id)) { RecipeDBProvider.UpdateRecipe(id, context.GetDishName(logic, page), context.GetCookTime(logic, page), context.GetCuisine(logic, page), context.GetType(logic, page), context.GetPortionAmount(logic, page), context.GetPictureUrl(logic, page), context.GetSteps(logic, page), context.GetWebSite()); } else { RecipeDBProvider.AddRecipe(id, context.GetDishName(logic, page), context.GetCookTime(logic, page), context.GetCuisine(logic, page), context.GetType(logic, page), context.GetPortionAmount(logic, page), context.GetPictureUrl(logic, page), context.GetSteps(logic, page), context.GetWebSite(), ingredients.Count()); foreach (var ingredient in ingredients) { if (!RecipeDBProvider.IngredientExists(ingredient.name)) { RecipeDBProvider.AddIngredient(ingredient.name); } RecipeDBProvider.AddRecipeIngredient(id, ingredient.name, ingredient.amount); } } } catch (Exception exc) { Console.WriteLine($"Error occured during page parsing: {exc.Message}"); } }
public virtual IList <(string name, string amount)> GetIngredients(IParsingLogic logic, IDocument page) => logic.GetIngredients(page);
public virtual string GetPictureUrl(IParsingLogic logic, IDocument page) => logic.GetPictureUrl(page);
public virtual int GetPortionAmount(IParsingLogic logic, IDocument page) => logic.GetPortionAmount(page);
public virtual string GetCuisine(IParsingLogic logic, IDocument page) => logic.GetCuisine(page);
public virtual int GetCookTime(IParsingLogic logic, IDocument page) => logic.GetCookTime(page);
public virtual string GetDishName(IParsingLogic logic, IDocument page) => logic.GetDishName(page);