Esempio n. 1
0
        /// <summary>
        /// Retrieve information for the current season.
        /// This information also includes data for the next two seasons
        /// </summary>
        /// <returns>Collection containing season data for the next three seasons</returns>
        public async Task <RetrievalWrapper <SeasonShowCollection> > RetrieveCurrentSeason()
        {
            var currentDate   = DateTime.Now;
            var seasonWrapper = new SeasonShowCollection();
            var currentSeason = currentDate.CalculateCurrentSeason();
            var year          = currentDate.Year;

            if (currentSeason == Seasons.Winter && currentDate.Month == 12)
            {
                year++;
            }

            for (var r = 0; r < 3; r++)
            {
                var seasonData = await GetSeasonData(year, currentSeason);

                seasonWrapper.SeasonShows.AddRange(seasonData.ResponseData.SeasonShows);

                //Get info for the next season
                year          = currentSeason.NextSeasonYear(year);
                currentSeason = currentSeason.GetNextSeason();
            }

            return(new RetrievalWrapper <SeasonShowCollection>(HttpStatusCode.OK, true, seasonWrapper));
        }
Esempio n. 2
0
        /// <summary>
        /// Retrieve information about shows in a specific season
        /// </summary>
        /// <param name="year">Year for which season data should be retrieved</param>
        /// <param name="season">Season for which data should be retrieved</param>
        /// <returns>Collection of show for the selected season</returns>
        public async Task <RetrievalWrapper <SeasonShowCollection> > GetSeasonData(int year, Seasons season)
        {
            var collectionWrapper = new SeasonShowCollection();

            try
            {
                var doc = await _pageRetriever.RetrieveHtmlPageAsync(MalRouteBuilder.SeasonUrl(year, season));

                if (doc.ResponseStatusCode == null)
                {
                    throw doc.Exception;
                }

                var links = doc.Document.DocumentNode
                            .SelectNodes("//a[@class='link-title']");

                foreach (var link in links)
                {
                    var url      = link.Attributes["href"].Value;
                    var idString = url.Split('/')[4];
                    int id;
                    int.TryParse(idString, out id);

                    var title = link.InnerHtml;

                    var tmpData = new SeasonData
                    {
                        Id    = id,
                        Title = title
                    };
                    collectionWrapper.SeasonShows.Add(tmpData);
                }
                return(new RetrievalWrapper <SeasonShowCollection>(doc.ResponseStatusCode.Value, doc.Success,
                                                                   collectionWrapper));
            }
            catch (Exception exception)
            {
                return(new RetrievalWrapper <SeasonShowCollection>(exception, collectionWrapper));
            }
        }