示例#1
0
        static void Main(string[] args)
        {
            List <DataModel> records = new List <DataModel>();

            try
            {
                var client  = new RestClient("https://socms.polkcountyiowa.gov/");
                var request = new RestRequest("sheriffsaleviewer/Home/PropertyListJson", Method.POST);
                request.AddParameter("draw", 1);
                request.AddParameter("start", 0);
                request.AddParameter("length", 100);
                request.AddParameter("isOpenStatus", true);

                var responce = client.Execute <RootObject>(request);
                var data     = responce.Data.data;

                Console.WriteLine("Total Records: " + data.Count);
                if (data.Count > 0)
                {
                    HtmlWeb web = new HtmlWeb();
                    int     i   = 1;
                    foreach (var item in data)
                    {
                        Console.WriteLine("===============================PROCESSING RECORD===============================");
                        //Get Details of each property
                        string url = "https://apps.polkcountyiowa.gov/sheriffsaleviewer/Home/Detail/" + item.propertyId;
                        var    doc = web.Load(url);

                        var       table = doc.DocumentNode.SelectSingleNode("/html/body/div/div[3]/div/table/tbody");
                        DataModel model = new DataModel()
                        {
                            Id = i
                        };
                        Console.WriteLine("Getting details...");
                        if (table != null)
                        {
                            foreach (var entry in table.ChildNodes.Where(x => x.Name != "#text"))
                            {
                                try
                                {
                                    HtmlDocument row = new HtmlDocument();
                                    row.LoadHtml(entry.InnerHtml);

                                    var title = row.DocumentNode.SelectSingleNode("/th[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                    title = title.Trim();
                                    string value = "";
                                    switch (title)
                                    {
                                    case "Sheriff Number":
                                        value = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.SheriffNumber = value.Trim();
                                        break;

                                    case "Approximate Judgment":
                                        value = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.ApproxJudgment = Convert.ToDouble(value.Replace("$", "").Replace(",", "").Trim());
                                        break;

                                    case "Sales Date":
                                        value           = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.SalesDate = value.Trim();
                                        break;

                                    case "Plaintiff":
                                        value           = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.PlainTiff = value.Trim();
                                        break;

                                    case "Defendant":
                                        value           = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.Defendant = value.Trim();
                                        break;

                                    case "Address":
                                        value         = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.Address = value.Trim();
                                        break;

                                    case "Redemption Period":
                                        value = row.DocumentNode.SelectSingleNode("/td[1]").InnerText.Replace("\n", "").Replace("\r", "");
                                        model.RedemptionPeriod = value.Trim();
                                        break;

                                    default:
                                        break;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("Unable to compile record.\nReason:" + ex.Message);
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Record details page not found");
                            model.SheriffNumber = item.referenceNumber.ToString();
                            model.SalesDate     = item.salesDate.ToString("MM/dd/yyyy");
                            model.PlainTiff     = item.plaintiff;
                            model.Defendant     = item.defendant;
                            model.Address       = item.propertyAddress;
                        }

                        if (!string.IsNullOrEmpty(model.Address))
                        {
                            Console.WriteLine("Getting Data from zillow...");
                            ReturnedResult dataModel = GetZestimateAPI(model.Address);
                            model.Zestimate    = (string.IsNullOrEmpty(dataModel.Zestimate)) ? 0 : Math.Round(Convert.ToDouble(dataModel.Zestimate));
                            model.TaxAssesment = string.IsNullOrEmpty(dataModel.TaxAssestment) ? 0 : Convert.ToDecimal(dataModel.TaxAssestment);
                            model.IndexValue   = dataModel.ZillowHomeValueIndex;

                            if (model.Zestimate == 0)
                            {
                                if (model.TaxAssesment != 0)
                                {
                                    model.Zestimate_Approx_Judgement_Diff = Math.Round((double)model.TaxAssesment - model.ApproxJudgment, 2);
                                    if (model.TaxAssesment > 0)
                                    {
                                        model.Zestimate_Approx_Judgement_Division = model.ApproxJudgment / (double)model.TaxAssesment;
                                    }
                                }
                            }
                            else
                            {
                                model.Zestimate_Approx_Judgement_Diff = Math.Round(model.Zestimate - model.ApproxJudgment, 2);
                                if (model.Zestimate > 0)
                                {
                                    model.Zestimate_Approx_Judgement_Division = model.ApproxJudgment / model.Zestimate;
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Address not found. So we cant get zestimate");
                        }

                        records.Add(model);
                        i += 1;
                    }

                    //Console.WriteLine("Fetching data from realtor.com. This may take few minutes...");
                    //records = GetRealtorEstimate(records);
                    //foreach (var model in records)
                    //{
                    //    model.Zestimate_Approx_Judgement_Diff = Math.Round(model.Zestimate - model.ApproxJudgment, 2);
                    //    if (model.Zestimate > 0)
                    //    {
                    //        model.Zestimate_Approx_Judgement_Division = model.ApproxJudgment / model.Zestimate;
                    //    }
                    //}

                    List <string> entries = new List <string>();
                    entries.Add(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\",\"{7}\",\"{8}\",\"{9}\",\"{10}\",\"{11}\"",
                                              "SalesDate", "PlainTiff", "Defendant", "SheriffNumber", "ApproxJudgment", "RedemptionPeriod", "Address"
                                              , "Zestimate", "Zestimate_Approx_Judgement_Diff", "Zestimate_Approx_Judgement_Division", "Tax Assestment", "Home Index Value"));
                    foreach (var item in records)
                    {
                        entries.Add(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\",\"{7}\",\"{8}\",\"{9}\",\"{10}\",\"{11}\"",
                                                  item.SalesDate, item.PlainTiff, item.Defendant, item.SheriffNumber, item.ApproxJudgment, item.RedemptionPeriod, item.Address
                                                  , item.Zestimate, item.Zestimate_Approx_Judgement_Diff, item.Zestimate_Approx_Judgement_Division, item.TaxAssesment, item.IndexValue));
                    }

                    DateTime today = DateTime.Now;
                    var      time  = string.Format("{0}{1}{2}{3}{4}{5}", today.Year, today.Month, today.Day, today.Hour, today.Minute, today.Second);

                    File.WriteAllLines("results-" + time + ".csv", entries);
                }
                else
                {
                    Console.WriteLine("No record found. Please try again another time.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to fetch data.\nReason: " + ex.Message);
            }
            Console.WriteLine("Operation Completed. Press any key to exit.");
            Console.ReadKey();
        }
示例#2
0
        private static ReturnedResult GetZestimateAPI(string address)
        {
            ReturnedResult result = new ReturnedResult();

            string[] parts = address.Split(',');
            switch (parts.Count())
            {
            case 3:
                break;

            case 4:
                break;

            case 5:
                break;

            default:
                break;
            }

            try
            {
                var client  = new RestClient("https://www.zillow.com/");
                var request = (parts.Count() == 5) ? new RestRequest("webservice/GetDeepSearchResults.htm?zws-id=X1-ZWz17v7h6igwzv_75222&address=" + parts[0] + "&citystatezip=" + string.Format("{0},{1},{2}", parts[2], parts[3], parts[4]) + "", Method.GET)
                    : new RestRequest("webservice/GetDeepSearchResults.htm?zws-id=X1-ZWz17v7h6igwzv_75222&address=" + parts[0] + "&citystatezip=" + string.Format("{0},{1},{2}", parts[1], parts[2], parts[3]) + "", Method.GET);
                request.AddHeader("Accept", "application/json");
                var responce = client.Execute(request);
                if (responce.Content.Contains("<zestimate>"))
                {
                    try
                    {
                        var text    = responce.Content.Substring(responce.Content.IndexOf("<zestimate>"));
                        var another = text.Substring(text.IndexOf("</zestimate>") + 12);
                        text = text.Replace(another, "");
                        XmlSerializer serializer   = new XmlSerializer(typeof(Zestimate), new XmlRootAttribute("zestimate"));
                        StringReader  stringReader = new StringReader(text);
                        Zestimate     zen          = (Zestimate)serializer.Deserialize(stringReader);
                        result.Zestimate = zen.Amount.Text;
                        //return zestimate;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to get zestimate. Exception: " + ex.Message);
                    }
                }

                if (responce.Content.Contains("<taxAssessment>"))
                {
                    try
                    {
                        var text    = responce.Content.Substring(responce.Content.IndexOf("<taxAssessment>"));
                        var another = text.Substring(text.IndexOf("</taxAssessment>") + 16);
                        text = text.Replace(another, "");
                        XmlSerializer serializer   = new XmlSerializer(typeof(string), new XmlRootAttribute("taxAssessment"));
                        StringReader  stringReader = new StringReader(text);
                        result.TaxAssestment = (string)serializer.Deserialize(stringReader);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to get tax assestment. Exception: " + ex.Message);
                    }
                    //  result.Zestimate = tax.Text;
                    //return zestimate;
                }

                if (responce.Content.Contains("<localRealEstate>"))
                {
                    try
                    {
                        var text    = responce.Content.Substring(responce.Content.IndexOf("<localRealEstate>"));
                        var another = text.Substring(text.IndexOf("</localRealEstate>") + 18);
                        text = text.Replace(another, "");
                        XmlSerializer serializer   = new XmlSerializer(typeof(LocalRealEstate), new XmlRootAttribute("localRealEstate"));
                        StringReader  stringReader = new StringReader(text);
                        var           m            = (LocalRealEstate)serializer.Deserialize(stringReader);

                        result.ZillowHomeValueIndex = m.Region[0].ZindexValue;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to get z-index-value. Exception: " + ex.Message);
                    }
                    //  result.Zestimate = tax.Text;
                    //return zestimate;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to get zestimate.\nReason: " + ex.Message);
            }

            return(result);
        }