private ICollection <DishBom> GetDishBoms(DishBomRawData dishBom, DishBomRawData auxDishBom) { List <DishBom> boms = new List <DishBom>(); AddBomItems(dishBom, boms, true); AddBomItems(auxDishBom, boms, false); return(boms); }
private void AddBomItems(DishBomRawData dishBom, List <DishBom> boms, bool isMain) { if (dishBom == null) { return; } foreach (var r1 in dishBom) { long foodMaterialId = GetFoodMaterialId(r1.EnglishName); if (foodMaterialId > 0) { boms.Add(new DishBom() { MatchingDescription = r1.Use, FoodMaterialId = foodMaterialId, IsMain = isMain, }); } } }
//补充 还不完整的信息 private async Task FillDetail(DishDetailsRawDataItem detail) { IHtmlDocument doc = await CrawlerHelper.GetDocumentASync($"https:{detail.Url}"); //大图 var img = doc.QuerySelector(".J_photo img"); // 找出大图url detail.BigImageUrl = img?.GetAttribute("src"); // 分类 var tips = doc.QuerySelectorAll(".recipeTip.mt16"); if (tips != null && tips.Length >= 3) { var links = tips[2].GetElementsByTagName("a"); StringBuilder sb = new StringBuilder(); foreach (var a in links) { sb.Append(a.TextContent); sb.Append(","); } detail.Tags = sb.ToString(); } // 配比bom var particulars = doc.QuerySelectorAll(".particulars"); if (particulars != null && particulars.Length >= 2) { var boms = particulars.Select(p => { var bom = new DishBomRawData(); var bis = p.GetElementsByTagName("li").Select(li => { var spans = li.Children; if (spans != null && spans.Length >= 2) { var bi = new BomItem() { EnglishName = CrawlerHelper.GetUrlLast(spans[0].FirstElementChild?.GetAttribute("href")), FoodMaterialName = spans[0].GetElementsByTagName("b").FirstOrDefault()?.TextContent, Use = spans[1].TextContent, }; return(bi); } else { return(new BomItem()); } } ); bom.AddRange(bis); return(bom); }).ToList(); if (boms != null && boms.Count >= 2) { detail.DishBom = boms[0]; detail.AuxDishBom = boms[1]; } } // 口味等 var specs = doc.QuerySelectorAll(".recipeCategory_sub_R.mt30.clear li").Select(li => { return(li.GetElementsByTagName("a").FirstOrDefault()?.TextContent); }).ToList(); if (specs != null && specs.Count >= 4) { detail.Taste = specs[0]; detail.Technology = specs[1]; detail.CookTime = specs[2]; detail.Difficulty = specs[3]; } // 步骤 var steps = doc.QuerySelectorAll(".recipeStep li").Select(li => { string url = li.GetElementsByTagName("img").FirstOrDefault()?.GetAttribute("src"); string content = li.LastElementChild?.TextContent; return(new CookeyItem() { Photo = url, Content = content }); }).ToList(); detail.Cookery = new CookeryRawData(steps); }