protected Movie MapResult(HtmlDocument doc) { var xPath = _movieXPathRepository.GetXPath(); if (xPath == null) { throw new Exception("No XPathSetup"); } var title = doc.DocumentNode.SelectSingleNode(xPath.Title).OuterHtmlClean(); var strRate = doc.DocumentNode.SelectSingleNode(xPath.Rate).InnerHtml(); var rate = Convert.ToDouble(String.IsNullOrEmpty(strRate) ? "0" : strRate); var dateReleased = doc.DocumentNode.SelectSingleNode(xPath.DateReleased).InnerTextClean(); var rating = doc.DocumentNode.SelectSingleNode(xPath.Rating).Attribute("content"); var summary = doc.DocumentNode.SelectSingleNode(xPath.Summary).OuterHtmlClean(); var year = doc.DocumentNode.SelectSingleNode(xPath.Year).InnerText(); var genre = String.Join(", ", doc.DocumentNode.SelectNodes(xPath.Genre).Select(x => x.InnerTextClean())); var runtime = doc.DocumentNode.SelectSingleNode(xPath.Runtime).InnerTextClean(); var stars = String.Join(",", doc.DocumentNode.SelectNodes(xPath.Stars).Select(x => x.SelectSingleNode("*/span").InnerTextClean())); var writers = doc.DocumentNode.SelectNodes(xPath.Writers) != null? String.Join(",", doc.DocumentNode.SelectNodes(xPath.Writers).Select(x => x.SelectSingleNode("*/span").InnerTextClean())) : ""; var directors = doc.DocumentNode.SelectNodes(xPath.Directors) != null? String.Join(",", doc.DocumentNode.SelectNodes(xPath.Directors).Select(x => x.SelectSingleNode("*/span").InnerTextClean())) : ""; //using headers var header = doc.DocumentNode.SelectSingleNode(xPath.Header); var poster = header.SelectSingleNode(xPath.Poster).Attribute("src"); var hdPosterUrl = ""; if (!String.IsNullOrEmpty(poster)) { var hdPosterLink = header.SelectSingleNode(xPath.Poster).ParentNode; if (hdPosterLink != null) { hdPosterUrl = hdPosterLink.Attribute("href"); } } var hdPoster = poster; //get the HD if (!String.IsNullOrEmpty(poster)) { var splittedPosterUrl = poster.Split(new string[] { "@@" }, StringSplitOptions.None); if (splittedPosterUrl.Length > 1) { hdPoster = splittedPosterUrl[0] + "@@._V1_SY1000_CR0,0,676,1000_AL_.jpg"; } else { if (poster.Contains("._V1_")) { splittedPosterUrl = poster.Split(new string[] { "._V1_" }, StringSplitOptions.None); if (splittedPosterUrl.Length > 1) { hdPoster = splittedPosterUrl[0] + "._V1_SY1000_CR0,0,676,1000_AL_.jpg"; } } } } var titleDetails = doc.DocumentNode.SelectSingleNode(xPath.TitleDetails).SelectNodes("*/h4"); var country = titleDetails.FirstOrDefault(x => x.InnerText == "Country:").TitleDetailsAnchor(); var language = titleDetails.FirstOrDefault(x => x.InnerText == "Language:").TitleDetailsAnchor(); var alsoKnownAs = titleDetails.FirstOrDefault(x => x.InnerText == "Also Known As:").TitleDetailsText(); var budget = titleDetails.FirstOrDefault(x => x.InnerText == "Budget:").TitleDetailsText(); var gross = titleDetails.FirstOrDefault(x => x.InnerText == "Gross:").TitleDetailsText(); //Related Movies var relatedMoviesList = new List <Movie>(); var overviews = doc.DocumentNode.SelectNodes(xPath.RelatedRoot); if (overviews != null) { foreach (var overview in overviews) { var genres = overview.SelectSingleNode(xPath.RelatedGenre); var directorsNode = overview.SelectSingleNode(xPath.RelatedDirectors); var actorsNode = overview.SelectSingleNode(xPath.RelatedStars); var rateNode = overview.SelectSingleNode(xPath.RelatedRate); if (directorsNode != null) { var directorNode = directorsNode.SelectSingleNode("b"); if (directorNode != null) { directorsNode.RemoveChild(directorsNode.SelectSingleNode("b")); } } var actorNode = actorsNode.SelectSingleNode("b"); if (actorNode != null) { actorsNode.RemoveChild(actorsNode.SelectSingleNode("b")); } var genreSpans = genres.SelectNodes("span"); if (genreSpans != null) { foreach (var span in genreSpans) { genres.RemoveChild(span); } } double relateMovieRate = 0; var movieRate = rateNode != null?Double.TryParse(rateNode.InnerText, out relateMovieRate) : false; relatedMoviesList.Add(new Movie { ImdbId = overview.Attribute("data-tconst"), Title = overview.SelectSingleNode(xPath.RelatedTitle).InnerTextClean(), Year = overview.SelectSingleNode(xPath.RelatedYear).InnerTextClean().Replace("(", "").Replace(")", ""), Poster = overview.SelectSingleNode(xPath.RelatedPoster).Attribute("src"), Genre = genres.InnerText.CleanHtml().Replace(" ", "|"), Summary = overview.SelectSingleNode(xPath.RelatedSummary).InnerTextClean(), Directors = directorsNode != null ? directorsNode.InnerTextClean() : "", Stars = actorsNode.InnerTextClean(), Rate = movieRate ? relateMovieRate : 0 }); } } var movie = new Movie { Title = title, Rate = rate, DateReleased = dateReleased, Rating = rating, OriginalPoster = poster, Poster = hdPoster, HdPosterLink = hdPosterUrl, Stars = stars, Summary = summary, Year = year, Genre = genre, Runtime = runtime, Directors = directors, Writers = writers, RelatedMovie = String.Join(",", relatedMoviesList.Select(x => x.ImdbId)), //String.Join(",", strRelatedMovies), Country = country, Language = language, AlsoKnownAs = alsoKnownAs, Budget = budget, Gross = gross, RelatedMovies = relatedMoviesList }; return(movie); }