示例#1
0
        private IEnumerable <string> GetAllUrlsInSpecifiedGenre(string baseUrl, out HtmlWeb htmlWeb,
                                                                out MovieParams movieParams, string view = "simple", string sort = "moviemeter.asc",
                                                                string genres = "Crime", string page = "1")
        {
            //var index = 1;
            //while (true)
            //{

            var listViewUrl =
                "http://www.imdb.com/search/title?explore=genres&view=" + view + "&sort=" + sort + "&genres=" + genres + "&page=" +
                page + "&ref_=adv_nxt";

            htmlWeb = new HtmlWeb();
            var listDocument = htmlWeb.Load(listViewUrl);

            movieParams = new MovieParams();

            var allRelatedAnchors = listDocument.DocumentNode.SelectNodes("//a")
                                    .Where(x => x.ParentNode.ParentNode.Attributes.Contains("class") &&
                                           x.ParentNode.ParentNode.Attributes["class"].Value.Contains("lister-item-header")).ToArray();

            var allHrefs = allRelatedAnchors.Select(x => baseUrl + x.GetAttributeValue("href", ""));

            return(allHrefs);
        }
示例#2
0
        public async Task <IActionResult> GetMovies(MovieParams movieParams)
        {
            var movies = _context.Movies.Include(x => x.Photos).OrderByDescending(x => x.YearOfRelease).AsQueryable();

            if (!string.IsNullOrEmpty(movieParams.Genre))
            {
                movies = movies.Where(m => m.Genre == movieParams.Genre);
            }

            if (!string.IsNullOrEmpty(movieParams.Name))
            {
                movies = movies.Where(m => m.Name.ToLower().StartsWith(movieParams.Name.ToLower()));
            }

            if (!string.IsNullOrEmpty(movieParams.OrderBy) && movieParams.OrderBy == "price")
            {
                movies = movies.OrderByDescending(x => x.Price);
            }

            if (!string.IsNullOrEmpty(movieParams.OrderBy) && movieParams.OrderBy == "year")
            {
                movies = movies.OrderByDescending(x => x.YearOfRelease);
            }

            var pagedMovies = await PagedList <Movie> .CreateAsync(movies, movieParams.PageNumber, movieParams.PageSize);

            var moviesToReturn = _mapper.Map <IEnumerable <MovieForListDto> >(pagedMovies);

            Response.AddPagination(pagedMovies.CurrentPage, pagedMovies.PageSize, pagedMovies.TotalCount, pagedMovies.TotalPages);
            return(Ok(moviesToReturn));
        }
        public async Task <IActionResult> GetMovies([FromQuery] MovieParams movieParams)
        {
            var movies = await _repo.GetMovies(movieParams);

            var moviesToReturn = _mapper.Map <IEnumerable <MovieForListDto> >(movies);

            return(Ok(moviesToReturn));
        }
示例#4
0
        public async Task <IActionResult> ClearCart(MovieParams movieParams)
        {
            var movies = _context.Movies.Include(x => x.Photos);

            foreach (var movie in movies)
            {
                movie.InCart = false;
            }
            var pagedMovies = await PagedList <Movie> .CreateAsync(movies, movieParams.PageNumber, movieParams.PageSize);

            var moviesToReturn = _mapper.Map <IEnumerable <MovieForListDto> >(pagedMovies);

            _context.SaveChanges();
            return(Ok(moviesToReturn));
        }
示例#5
0
        public async Task <IEnumerable <TblMovie> > GetMovies(MovieParams movieParams)
        {
            var movies = _context.TblMovie.OrderByDescending(movie => movie.ARating);

            if (!string.IsNullOrEmpty(movieParams.OrderBy))
            {
                switch (movieParams.OrderBy)
                {
                case "rating":
                    movies = movies.OrderByDescending(movie => movie.ARating);
                    break;

                default:
                    movies = movies.OrderBy(movie => movie.APrice);
                    break;
                }
            }

            return(await movies.ToListAsync());
        }
示例#6
0
        public void StoreAllMovieInGenres(int page = 1, string hrefInit = null)
        {
            string  baseUrl = "http://www.imdb.com";
            HtmlWeb htmlWeb;

            page = page == 1 ? 1 : page;

            while (page > 0)
            {
                var allHrefs = GetAllUrlsInSpecifiedGenre(baseUrl, out htmlWeb, page);

                if (allHrefs == null)
                {
                    page = 0;
                    break;
                }

                var allHrefList = allHrefs.ToList();

                if (allHrefList.Contains(hrefInit))
                {
                    var index = allHrefList.ToList().FindIndex(x => x == hrefInit);

                    if (index >= 0)
                    {
                        allHrefList.RemoveRange(0, index);
                    }
                }

                foreach (var href in allHrefList)
                {
                    var movieParams    = new MovieParams();
                    var detailDocument = htmlWeb.Load(href);

                    //< span itemprop = "actors" itemtype = "http://schema.org/Person" itemscope = "" >
                    //    < a href = "/name/nm1785339?ref_=tt_ov_st_sm" itemprop = "url" >
                    //        < span class="itemprop" itemprop="name">Rami Malek</span>
                    //    </a>
                    //</span>

                    HtmlNode documentNode = detailDocument.DocumentNode;
                    var      title        = GetMovieTitle(documentNode);
                    movieParams.Title = title;

                    var date = GetMovieDate(documentNode);
                    movieParams.Year = date;

                    var originalTitle = GetMovieOriginalTitle(documentNode);
                    movieParams.OriginalTitle = originalTitle;

                    movieParams.Status   = Status.Active;
                    movieParams.UserType = UserTypes.Dashboard;


                    var creditNodes = documentNode.SelectNodes(".//div[@class='credit_summary_item']");
                    var stars       = new List <string>();

                    if (creditNodes != null)
                    {
                        stars = creditNodes.SelectMany(x => x.Descendants("span")
                                                       .Where(y => y.GetAttributeValue("class", "") == "itemprop" && y.GetAttributeValue("itemprop", "") == "name")
                                                       .Select(z => z.InnerText)).ToList();
                    }


                    string rating;
                    var    ratingNode = documentNode.SelectSingleNode(".//span[@itemprop='ratingValue']");

                    if (ratingNode == null)
                    {
                        continue;
                    }

                    rating = ratingNode.InnerText;

                    movieParams.Rating = Double.Parse(rating.Replace(".", ","));

                    var ratingCount = documentNode.SelectSingleNode(".//span[@itemprop='ratingCount']")?.InnerText;
                    movieParams.NumberOfVotes = Int32.Parse(ratingCount?.Replace(",", ""));

                    var country = GetCountry(documentNode);
                    movieParams.Country = country;

                    var titleWrapper = documentNode.SelectSingleNode("//div[@class='title_wrapper']");

                    var typeAnchor = titleWrapper.SelectSingleNode("div/a[last()]");

                    if (typeAnchor != null)
                    {
                        movieParams.MovieType = typeAnchor.InnerText
                                                .Contains(MovieType.MiniSeries.GetEnumDescription <DisplayAttribute>().Name) ?
                                                MovieType.MiniSeries : typeAnchor.InnerText
                                                .Contains(MovieType.Series.GetEnumDescription <DisplayAttribute>().Name) ?
                                                MovieType.Series : typeAnchor.InnerText
                                                .Contains(MovieType.TvMovie.GetEnumDescription <DisplayAttribute>().Name) ? MovieType.TvMovie : MovieType.Movie;
                    }

                    var genreList = GetMovieCategories(documentNode)?.Select(x => x.Name).ToList();

                    var crewHref = baseUrl + documentNode.SelectSingleNode("//a[@class='quicklink']").GetAttributeValue("href", "404");

                    var crewNameCharacterPairs = GetCrewNamesOfMovie(crewHref, htmlWeb, stars);
                    var directors = GetDirectors(crewHref, htmlWeb);

                    movieParams.Director = directors;
                    _movieService.CreateOrUpdate(movieParams);

                    if (genreList != null)
                    {
                        _genreService.CreateGenres(genreList, movieParams.BaseEntityId);
                    }

                    if (crewNameCharacterPairs != null)
                    {
                        _actorService.CreateActors(crewNameCharacterPairs, movieParams.BaseEntityId);
                    }
                }
                page = page + 1;
            }
        }