Exemplo n.º 1
0
        public void ProcessHtml()
        {
            var data = new Data();
            makes = data.GetMakes();

            var htmlList = data.GetAllHtmUnprocessed();

            htmlList.Clear();
            htmlList = data.GetAllHtmUnprocessed();
            var myList = new List<string>();
            foreach (var doc in htmlList)
            {
                var carId = doc.CarId;
                var propValue = new List<PropValue>();
                var parser = new HtmlParser();
                //Just get the DOM representation
                var document = parser.Parse(doc.html);
                var postdate = document.All.Where(m => m.LocalName == "time");
                if (postdate.Count() > 0)
                {
                    var date = ((AngleSharp.Dom.Html.IHtmlTimeElement)postdate.First()).DateTime;
                    propValue.Add(new PropValue
                    {
                        Prop = "PostDate",
                        Value = date
                    });
                }
                var attrgroup = document.All.Where(m => m.LocalName == "p" && m.ClassList.Contains("attrgroup"));
                foreach (var att in attrgroup)
                {
                    var c = att.GetDeepControlsByType<AngleSharp.Dom.IElement>();
                    foreach (var elem in c)
                    {
                        if (!string.IsNullOrEmpty(elem.InnerHtml.Trim()) && elem.InnerHtml.Contains("<b>"))
                        {
                            myList.Add(elem.InnerHtml);
                            var ymm = MatchYearMakeModel(elem.InnerHtml);
                            if (ymm != null)
                            {
                                if (!string.IsNullOrEmpty(ymm.Year))
                                {
                                    propValue.Add(item:
                                        new PropValue { CarId = carId, Prop = "year", Value = ymm.Year });
                                }
                                if (!string.IsNullOrEmpty(ymm.Make))
                                {
                                    propValue.Add(item:
                                        new PropValue { CarId = carId, Prop = "make", Value = ymm.Make });
                                }
                                if (!string.IsNullOrEmpty(ymm.Model))
                                {
                                    propValue.Add(item:
                                        new PropValue { CarId = carId, Prop = "model", Value = ymm.Model });
                                }

                            }
                            var propval = MatchPropValue(elem.InnerHtml);
                            propValue.Add(item:
                                new PropValue { CarId = carId, Prop = propval.Prop, Value = propval.Value });

                        }

                    }
                }

                if (propValue.Count > 0)
                {
                    var car = data.GetCar(doc.CarId);
                    if (car == null) continue;
                    foreach (var pv in propValue)
                    {
                        switch (pv.Prop)
                        {
                            case "PostDate":
                                car.PostDate = DateTimeOffset.Parse(pv.Value).UtcDateTime;
                                break;
                            case "year":
                                car.Year = !string.IsNullOrEmpty(pv.Value.NullIfEmpty())
                                    ? Convert.ToInt16(pv.Value.NullIfEmpty())
                                    : car.Year;
                                break;
                            case "make":
                                car.Make = pv.Value.NullIfEmpty();
                                break;
                            case "model":
                                car.Model = pv.Value.NullIfEmpty();
                                break;
                            case "condition":
                                car.Condition = pv.Value.NullIfEmpty();
                                break;
                            case "drive":
                                car.Drive = pv.Value.NullIfEmpty();
                                break;
                            case "fuel":
                                car.Fuel = pv.Value.NullIfEmpty();
                                break;
                            case "paint color":
                                car.Color = pv.Value.NullIfEmpty();
                                break;
                            case "size":
                                car.Size = pv.Value.NullIfEmpty();
                                break;
                            case "title status":
                                car.TitleStatus = pv.Value.NullIfEmpty();
                                break;
                            case "transmission":
                                car.Transmission = pv.Value.NullIfEmpty();
                                break;
                            case "type":
                                car.Type = pv.Value.NullIfEmpty();
                                break;
                            case "VID":
                                car.VIN = pv.Value.NullIfEmpty();
                                break;
                            case "odometer":
                                var miles = !string.IsNullOrEmpty(pv.Value.NullIfEmpty())
                                    ? Convert.ToInt32(pv.Value.NullIfEmpty())
                                    : car.Miles;
                                if (miles != null)
                                    if (!car.Miles.ToString().StartsWith(miles.ToString().Trim()))
                                    {
                                        car.Miles = miles != 0 ? miles : null;
                                    }
                                break;
                        }
                    }
                    data.UpdateCars(car);
                }

                data.UpdateHtmlSent(doc.CarId);

            }
            data.Dispose();
        }