示例#1
0
        public ArborioModel ParseData(IHtmlDocument document)
        {
            var recipe       = document.QuerySelector("#mainWrapper");
            var arborioModel = new ArborioModel();

            if (recipe != null)
            {
                var service = new ParserServise();
                service.InitCollection(arborioModel);
                var recipeName = recipe.QuerySelector(".detailed").TextContent;
                arborioModel.Name = recipeName;

                var descriptions = recipe.QuerySelector("[itemprop=recipeInstructions]");
                if (descriptions != null)
                {
                    var descriptinfo = descriptions.QuerySelectorAll("div").Where(
                        item => item.ClassName == "detailed_step_description_big");
                    foreach (var item in descriptinfo)
                    {
                        arborioModel.Description += item.TextContent + "\n";
                    }
                }

                var imghref = recipe.QuerySelector(".bigImgBox > a:nth-child(1) > img:nth-child(1)").GetAttribute("src");
                if (imghref != null)
                {
                    arborioModel.ImageHref = imghref;
                }
                var consist = document.QuerySelector(".ingredients_wrapper");

                var productsIinfo = consist.QuerySelectorAll("li")
                                    .Where(item => item.ParentElement.ClassName != null &&
                                           item.ParentElement.ClassName.Contains("detailed_ingredients")
                                           );

                var productsNameList  = new List <string>();
                var productsUnitsList = new List <string>();

                for (int i = 0; i < productsIinfo.Count(); i++)
                {
                    var product = productsIinfo.ElementAt(i).GetAttribute("rel");
                    productsNameList.Add(product);

                    var number       = productsIinfo.ElementAt(i).TextContent.Replace("—", "");
                    var resultNumber = number.Replace(product, "");
                    resultNumber.TrimStart();
                    productsUnitsList.Add(resultNumber);
                }


                arborioModel.Number   = productsUnitsList;
                arborioModel.Products = productsNameList;
            }
            return(arborioModel);
        }
示例#2
0
        public ArborioModel ParseData(IHtmlDocument document)
        {
            var recipe       = document.QuerySelector(".main-content");
            var arborioModel = new ArborioModel();

            if (recipe != null)
            {
                var service = new ParserServise();
                service.InitCollection(arborioModel);
                var descriptions = recipe.QuerySelector(".recipe__steps");
                if (descriptions != null)
                {
                    var descriptinfo = descriptions.QuerySelectorAll("li").Where(
                        item => item.ClassName.Contains("instruction"));
                    foreach (var item in descriptinfo)
                    {
                        arborioModel.Description += item.QuerySelector(".instruction__description").TextContent;
                    }
                }
                var consist    = document.QuerySelector(".ingredients-list__content");
                var ingredient = consist.QuerySelectorAll("p")
                                 .Where(item => item.ParentElement.ClassName != null &&
                                        item.ParentElement.ClassName.Contains("ingredients-list__content") &&
                                        item.ClassName != null &&
                                        item.ClassName.Contains("ingredients-list__content-item content-item js-cart-ingredients"));
                List <JObject> ingredientsJson = new List <JObject>();
                foreach (var item in ingredient)
                {
                    var ds      = item.GetAttribute("data-ingredient-object");
                    var objects = JObject.Parse(ds);
                    ingredientsJson.Add(objects);
                }
                var productsNames  = new List <string>();
                var productsAmount = new List <string>();
                foreach (JObject item in ingredientsJson)
                {
                    productsNames.Add((string)item["name"]);
                    productsAmount.Add((string)item["amount"]);
                }
                arborioModel.Number   = productsAmount;
                arborioModel.Products = productsNames;
                arborioModel.Name     = recipe.QuerySelector(".recipe__name").TextContent + "\n";
                arborioModel.Units    = productsAmount;
            }
            return(arborioModel);
        }
示例#3
0
        public async Task Create(ArborioModel arborioModel)
        {
            var recipe = new Recipe()
            {
                Name        = arborioModel.Name,
                ImageHref   = arborioModel.ImageHref,
                Description = arborioModel.Description,
            };
            var product = new Product();

            RecipeProduct recipeProduct;
            Product       productFind = null;
            var           result      = Database.RecipeManager.GetRecipeByName(arborioModel.Name);

            if (result.Count == 0)
            {
                try
                {
                    recipe = Database.RecipeManager.Create(recipe);
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                            ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    throw;
                }

                for (int i = 0; i < arborioModel.Products.Count; i++)
                {
                    productFind = Database.ProductManager.FindProductByName(arborioModel.Products[i]);
                    if (productFind != null)
                    {
                        recipeProduct = new RecipeProduct()
                        {
                            RecipeId  = recipe.RecipeId,
                            ProductId = productFind.ProductId,
                        };
                        var res       = Database.RecipeProductManager.GetRecipeIdByProductId(productFind.ProductId);
                        var recipeRes = res.Where(x => x.RecipeId == recipe.RecipeId);
                        if (recipeRes.Count() == 0)
                        {
                            recipeProduct.Number = arborioModel.Number[i];
                            Database.RecipeProductManager.Create(recipeProduct);
                        }
                        else
                        {
                            var ds = 5;
                        }
                    }
                    else
                    {
                        product.Name = arborioModel.Products[i];
                        Database.ProductManager.Create(product);

                        recipeProduct = new RecipeProduct()
                        {
                            RecipeId  = recipe.RecipeId,
                            ProductId = product.ProductId,
                        };
                        recipeProduct.Number = arborioModel.Number[i];
                        Database.RecipeProductManager.Create(recipeProduct);
                    }
                    await Database.SaveAsync();
                }
            }
        }
示例#4
0
 public void InitCollection(ArborioModel arborioModel)
 {
     arborioModel.Number   = new List <string>();
     arborioModel.Products = new List <string>();
     arborioModel.Units    = new List <string>();
 }