private AllInfoHTMLPage GetEntryInfo(string propertyID) { AllInfoHTMLPage pages = new AllInfoHTMLPage(); CookieContainer cookies; HttpWebRequest request; HttpWebResponse response; string strUrl; string postData; try { //Navigate to property information tab strUrl = $"https://ares.sncoapps.us/Property/PropertyInformation?propertyId={ propertyID }"; postData = ""; cookies = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(strUrl); request.Method = "GET"; request.Accept = "text/html"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; request.CookieContainer = cookies; request.Timeout = Timeout.Infinite; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; response = (HttpWebResponse)request.GetResponse(); response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); var encoding = new System.Text.UTF8Encoding(); var responseReader = new StreamReader(response.GetResponseStream(), encoding, true); pages.PropertyInformation = $"<div class=\"Entry URL\">{ strUrl }</div>{ responseReader.ReadToEnd() }"; response.Close(); responseReader.Close(); //Navigate to residential building data tab strUrl = $"https://ares.sncoapps.us/Property/ResidentialBuildingInformation?propertyId={ propertyID }"; postData = ""; cookies = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(strUrl); request.Method = "GET"; request.Accept = "text/html"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; request.CookieContainer = cookies; request.Timeout = Timeout.Infinite; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; response = (HttpWebResponse)request.GetResponse(); response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); encoding = new System.Text.UTF8Encoding(); responseReader = new StreamReader(response.GetResponseStream(), encoding, true); pages.BuildingData = responseReader.ReadToEnd(); response.Close(); responseReader.Close(); if (pages.BuildingData.Contains("<strong>Error</strong> Data is Null.")) { //If residential building data tab is empty, navigate to commercial building data tab strUrl = $"https://ares.sncoapps.us/Property/CommercialBuildingInformation?propertyId={ propertyID }"; postData = ""; cookies = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(strUrl); request.Method = "GET"; request.Accept = "text/html"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; request.CookieContainer = cookies; request.Timeout = Timeout.Infinite; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; response = (HttpWebResponse)request.GetResponse(); response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); encoding = new System.Text.UTF8Encoding(); responseReader = new StreamReader(response.GetResponseStream(), encoding, true); pages.BuildingData = responseReader.ReadToEnd(); response.Close(); responseReader.Close(); } //Navigate to tax information tab strUrl = $"https://ares.sncoapps.us/PropertyTax/TaxInformation?propertyId={ propertyID }"; postData = ""; cookies = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(strUrl); request.Method = "GET"; request.Accept = "text/html"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; request.CookieContainer = cookies; request.Timeout = Timeout.Infinite; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; response = (HttpWebResponse)request.GetResponse(); response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); encoding = new System.Text.UTF8Encoding(); responseReader = new StreamReader(response.GetResponseStream(), encoding, true); pages.TaxInformation = responseReader.ReadToEnd(); response.Close(); responseReader.Close(); //Navigate to property tax tab pages.TaxRecordPDF = $"/Common/GetPropertyRecordCard{ Regex.Match(pages.PropertyInformation, "<a href=\"/Common/GetPropertyRecordCard(.*?)\" style=\"display:inline;\">").Groups[1].Value }"; //Navigate to comparables tab strUrl = $"https://ares.sncoapps.us/Property/Comparables?propertyId={ propertyID }"; postData = ""; cookies = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(strUrl); request.Method = "GET"; request.Accept = "text/html"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; request.CookieContainer = cookies; request.Timeout = Timeout.Infinite; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; response = (HttpWebResponse)request.GetResponse(); response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); encoding = new System.Text.UTF8Encoding(); responseReader = new StreamReader(response.GetResponseStream(), encoding, true); pages.Comparables = responseReader.ReadToEnd(); response.Close(); responseReader.Close(); } catch (Exception e) { MessageBox.Show($"Error occured when fetching webpage for QuickRef:R{ propertyID }{ NewLine }{ e.Message }"); throw e; } return(pages); }
public Entry ParseEntries(AllInfoHTMLPage pages) { try { Entry entry = new Entry(); //Parse Personal Information var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(pages.PropertyInformation); var divNodes = doc.DocumentNode.SelectNodes(".//div"); for (int i = 0; i < divNodes.Count - 1; i++) { if (divNodes[i].OuterHtml.Contains("Entry URL")) { entry.PropertyUrl = divNodes[i].InnerText; } if (divNodes[i].InnerHtml.Contains("Parcel Id") && divNodes[i].InnerHtml.Length < 50) { entry.ParcelID = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Property Address") && divNodes[i].InnerHtml.Length < 50) { entry.Address = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Owner") && divNodes[i].InnerHtml.Length < 50) { entry.Owner = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Mailing Address") && divNodes[i].InnerHtml.Length < 50) { entry.MailingAddress = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Neighborhood") && divNodes[i].InnerHtml.Length < 50) { entry.Neighborhood = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Subdivision") && divNodes[i].InnerHtml.Length < 50) { entry.Subdivision = removeHTMLChars(divNodes[i + 1].InnerText); } if (divNodes[i].InnerHtml.Contains("Appraised Value") && divNodes[i].OuterHtml.Contains("visible-xs hidden-sm visible-md hidden-lg visible-xl")) { entry.CurrAppraisalValue = removeHTMLChars(divNodes[i + 1].InnerText); } } string tbl = doc.DocumentNode.SelectSingleNode("//table[@class='table table-striped text-center nomargin-bottom']").OuterHtml; var tblDoc = new HtmlAgilityPack.HtmlDocument(); tblDoc.LoadHtml(tbl); entry.PropertyClass = removeHTMLChars(tblDoc.DocumentNode.SelectSingleNode("//td").InnerText); //Parse Building Data if (!pages.BuildingData.Contains("<strong>Error</strong> Data is Null.")) { var bdDoc = new HtmlAgilityPack.HtmlDocument(); bdDoc.LoadHtml(pages.BuildingData); var bdNodes = bdDoc.DocumentNode.SelectNodes(".//div"); for (int i = 0; i < bdNodes.Count - 1; i++) { if (bdNodes[i].OuterHtml.Contains("Bedrooms") && bdNodes[i].InnerHtml.Length < 50) { entry.BedRooms = Convert.ToInt32(removeHTMLChars(bdNodes[i + 1].InnerText)); } if (bdNodes[i].InnerHtml.Contains("Fullbaths") && bdNodes[i].InnerHtml.Length < 50) { entry.FullBaths = Convert.ToInt32(removeHTMLChars(bdNodes[i + 1].InnerText)); } if (bdNodes[i].InnerHtml.Contains("Halfbaths") && bdNodes[i].InnerHtml.Length < 50) { entry.HalfBaths = Convert.ToInt32(removeHTMLChars(bdNodes[i + 1].InnerText)); } if (bdNodes[i].InnerHtml.Contains("Family Rooms") && bdNodes[i].InnerHtml.Length < 50) { entry.FamilyRooms = Convert.ToInt32(removeHTMLChars(bdNodes[i + 1].InnerText)); } if (bdNodes[i].InnerHtml.Contains("Living Area (Abv. Grade)") && bdNodes[i].InnerHtml.Length < 100) { entry.LivingArea = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Ground Floor Ar.") && bdNodes[i].InnerHtml.Length < 100) { entry.GroundFlrArea = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Finished/Rec Bsmt Area") && bdNodes[i].InnerHtml.Length < 50) { entry.BasementArea = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Upper Floor Area") && bdNodes[i].InnerHtml.Length < 50) { entry.UpperFlrArea = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Year Built") && bdNodes[i].InnerHtml.Length < 50) { entry.YearBuilt = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Style") && bdNodes[i].InnerHtml.Length < 50) { entry.Style = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Foundation") && bdNodes[i].InnerHtml.Length < 50) { entry.Foundation = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Basement Type") && bdNodes[i].InnerHtml.Length < 50) { entry.BasementType = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Last Remodel") && bdNodes[i].InnerHtml.Length < 50) { entry.LastRemodel = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Con. Quality") && bdNodes[i].OuterHtml.Contains("hidden-xs visible-sm hidden-md visible-lg hidden-xl") && bdNodes[i].InnerHtml.Length < 100) { entry.ConstructionQuality = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("Phys. Condition") && bdNodes[i].OuterHtml.Contains("hidden-xs visible-sm hidden-md hidden-lg hidden-xl") && bdNodes[i].InnerHtml.Length < 100) { entry.PhysicalCondition = removeHTMLChars(bdNodes[i + 1].InnerText); } if (bdNodes[i].InnerHtml.Contains("CDU") && bdNodes[i].OuterHtml.Contains("fa fa-question-circle title-popover") && bdNodes[i].InnerHtml.Length < 600) { entry.CDU = removeHTMLChars(bdNodes[i + 1].InnerText); } } } //Parse Tax Information if (!pages.TaxInformation.Contains("<strong>Error</strong> Data is Null.")) { var tiDoc = new HtmlAgilityPack.HtmlDocument(); tiDoc.LoadHtml(pages.TaxInformation); var tiNodes = tiDoc.DocumentNode.SelectNodes(".//div"); for (int i = 0; i < tiNodes.Count - 1; i++) { if (tiNodes[i].InnerHtml.Contains("Tax:") && tiNodes[i].OuterHtml.Contains("class=\"col-xs-6\">20") && tiNodes[i].InnerHtml.Length < 100) { entry.PrevYearTax = removeHTMLChars(tiNodes[i + 1].InnerText); } if (tiNodes[i].OuterHtml.Contains("style=\"padding-right:15px;\">Total:") && tiNodes[i].InnerHtml.Length < 100) { entry.TotalCurrentBalance = removeHTMLChars(tiNodes[i + 1].InnerText); } } } ///Parse Link of Tax Record PDF if (pages.TaxRecordPDF != "") { entry.TaxRecordPDF = $"https://ares.sncoapps.us{ pages.TaxRecordPDF }"; } return(entry); } catch (Exception e) { MessageBox.Show($"Error occured when parsing Property Information{ NewLine }{ e.Message }"); throw e; } }