private List<Movie> GetMoviesInternal(string url) { var body = GetHtmlDocument(url); if (body == null) return new List<Movie>(); var posts = body.QuerySelectorAll("#content .post"); if (posts.Length < 1) return new List<Movie>(); var movies = new List<Movie>(); foreach (IElement post in posts) { var domTitle = post.QuerySelector(".entry-title a"); if (domTitle == null) continue; var domContent = post.QuerySelector(".entry-content p") ?? post.QuerySelector(".entry-summary p"); if (domContent == null) continue; var movie = new Movie { Title = domTitle.InnerHtml, DetailLink = domTitle.GetAttribute("href"), ImageLink = domContent.GetElementsByTagName("img").FirstOrDefault()?.GetAttribute("src") }; foreach (var meta in domContent.GetElementsByTagName("strong")) { string name = meta.Text().Trim().TrimEnd(':').ToLower(); if (string.IsNullOrEmpty(name)) continue; DefineMeta(name, meta, movie); } movies.Add(movie); } return movies; }
private static void DefineMeta(string name, IElement dom, Movie movie) { if (dom == null) throw new ArgumentNullException(nameof(dom)); if (movie == null) throw new ArgumentNullException(nameof(movie)); if (new[] { "info", "subtitle", "synopsis" }.Contains(name)) { string link = dom.NextElementSibling.GetAttribute("href"); if (name == "info") movie.ImdbInfo = link; else if (name == "subtitle") movie.SubtitleLink = link; //else if (name == "synopsis") movie.DetailLink = link; return; } if (name == "release date") { string date = dom.NextSibling.NodeValue.Trim(); date = Regex.Replace(date, @"\([^\)]+\)", string.Empty).Trim(); movie.ReleaseDate = Regex.IsMatch(date, @"^\d{4}$") ? new DateTime(int.Parse(date), 1, 1, 0, 0, 0) : DateTime.Parse(date); return; } if (new[] { "genre", "stars" }.Contains(name)) { var values = dom.NextSibling.NodeValue.Split(',').Select(word => word.Trim()).ToList(); if (name == "genre") values.ForEach(movie.Genres.Add); else if (name == "stars") values.ForEach(movie.Stars.Add); return; } string value = dom.NextSibling.NodeValue.Trim(); if (name == "quality") movie.Quality = value; else if (name == "source") movie.Source = value; }