protected List<Person> getPersonListFromHtmlDocument(HtmlDocument doc, SearchName searchName) { HtmlNodeCollection vCardNodes = doc.DocumentNode.SelectNodes("//div[@class='hit vcard']"); List<Person> personList = new List<Person>(); if (vCardNodes == null) { var vCardSingleNode = doc.DocumentNode.SelectSingleNode("//div[@class='person-info vcard column']"); var person = parseSinglePerson(vCardSingleNode, searchName); if(person != null) { personList.Add(person); } return personList; } return parsePersonList(vCardNodes, searchName); }
protected List<Person> getPersonList(SearchName searchName, int postCode) { List<Person> resultList = new List<Person>(); HtmlDocument doc = new HtmlDocument(); int totalPageCount = 1; doc.LoadHtml(getKrakPersonHtml(searchName.Name, postCode)); totalPageCount = getTotalPageFromHtmlDocument(doc); for (int currentPage = 1; currentPage <= totalPageCount; currentPage++) { if (currentPage > 1) { doc.LoadHtml(getKrakPersonHtml(searchName.Name, postCode, currentPage)); } resultList.AddRange(getPersonListFromHtmlDocument(doc, searchName)); } return resultList; }
/// <summary> /// Parses krak person list /// </summary> protected List<Person> parsePersonList(HtmlNodeCollection vCardNodes, SearchName searchName) { List<Person> resultList = new List<Person>(); foreach (HtmlNode vCardNode in vCardNodes) { var person = parseSinglePerson(vCardNode, searchName); if(person != null) { resultList.Add(person); } } return resultList; }
protected Person parseSinglePerson(HtmlNode vCardNode, SearchName searchName) { if(vCardNode == null) { return null; } HtmlNode tel = vCardNode.SelectSingleNode(".//span[contains(@class,'tel')]/a[@href]"); string telReal = tel != null ? tel.GetAttributeValue("href", "").Replace("callto:", "") : ""; return new Person { SearchName = searchName, Name = getSingleNodeText(".//span[@class='given-name']", vCardNode), Lastname = getSingleNodeText(".//span[@class='family-name']", vCardNode), StreetAddress = getSingleNodeText(".//span[@class='street-address']", vCardNode), Locality = getSingleNodeText(".//span[@class='locality']", vCardNode), PostCode = getSingleNodeText(".//span[@class='postal-code']", vCardNode), TelephoneNumber = telReal, Latitude = getSingleNodeText(".//span[@class='latitude']", vCardNode), Longitude = getSingleNodeText(".//span[@class='longitude']", vCardNode) }; }