/// <summary> /// Retrieves trending media items (tv, movie, or people) for the day or week. /// </summary> /// <param name="inTrendingAllowedMediaTypes">Trending media to retrieve, (all, movie, tv, or people.</param> /// <param name="inTrendingTimeWindow">Trending time scale, (day or week)</param> public static async Task <Trending> retrieveTrendingAsync(TrendingAllowedMediaTypesEnum inTrendingAllowedMediaTypes, TrendingTimeWindowEnum inTrendingTimeWindow) { // Written, 01.12.2019 string address = String.Format("{0}/{1}/{2}?api_key={3}", ApplicationInfomation.TRENDING_ADDRESS, inTrendingAllowedMediaTypes, inTrendingTimeWindow, ApplicationInfomation.API_KEY); JObject jObject = await WebResponse.toJObject(await WebResponse.sendRequestAsync(new Uri(address))); JArray results = jObject["results"].ToObject <JArray>(); List <IdResultObject> _results = new List <IdResultObject>(); for (int i = 0; i < results.Count; i++) { JToken jToken = results[i]; switch (jToken.ToObject <IdResultObjectWithMediaType>().mediaType) { case MediaTypeEnum.movie: _results.Add(jToken.ToObject <MovieSearchResult>()); break; case MediaTypeEnum.tv: _results.Add(jToken.ToObject <TvSearchResult>()); break; case MediaTypeEnum.person: _results.Add(jToken.ToObject <PeopleSearchResult>()); break; } } return(new Trending { trendingResults = _results.ToArray() }); }
// Written, 02.12.2019 static async Task Main(string[] args) { // Written, 02.12.2019 Console.WriteLine("The Library v1.1 Trending Test\nEnter either, 'all', 'movie', 'tv' or 'person' to get trending items"); string mediaTypeInput = Console.ReadLine(); bool vaildTrendingMediaType = true; TrendingAllowedMediaTypesEnum trendMediaType = TrendingAllowedMediaTypesEnum.all; switch (mediaTypeInput) { case "all": trendMediaType = TrendingAllowedMediaTypesEnum.all; break; case "movie": trendMediaType = TrendingAllowedMediaTypesEnum.movie; break; case "tv": trendMediaType = TrendingAllowedMediaTypesEnum.tv; break; case "person": trendMediaType = TrendingAllowedMediaTypesEnum.person; break; default: vaildTrendingMediaType = false; break; } if (vaildTrendingMediaType) { Console.WriteLine("Enter either, 'day' or 'week' to get daily or weekly trending items."); string timeWindowInput = Console.ReadLine(); bool vaildTimeWindowInput = true; TrendingTimeWindowEnum trendingTimeWindow = TrendingTimeWindowEnum.day; switch (timeWindowInput) { case "day": trendingTimeWindow = TrendingTimeWindowEnum.day; break; case "week": trendingTimeWindow = TrendingTimeWindowEnum.week; break; default: vaildTimeWindowInput = false; break; } if (vaildTimeWindowInput) { Trending trending = await Trending.retrieveTrendingAsync(trendMediaType, trendingTimeWindow); for (int i = 0; i < trending.trendingResults.GetLength(0); i++) { IdResultObject idResult = trending.trendingResults[i]; Console.Write("{0}.) [{1}]", i + 1, idResult.GetType().Name); if (idResult is MediaSearchResult) { MediaSearchResult media = idResult as MediaSearchResult; Console.Write(" | {0} ({1})", media.name, media.release_date); } else { if (idResult is PeopleSearchResult) { PersonResult person = await PersonResult.retrieveDetailsAsync(idResult.id); Console.Write(" | {0} ({1})", person.name, person.birthday); } } Console.WriteLine(); } } else { Console.WriteLine("Error: Invaild time window input, '{0}'. Expecting either: 'day' or 'week'.", timeWindowInput); } } else { Console.WriteLine("Error: Invaild trend media type, '{0}'. Expecting one of: 'all', 'movie', 'tv' or 'person'.", mediaTypeInput); } Console.WriteLine("\n\nPress R to restart or press any key to exit"); if (Console.ReadKey().Key == ConsoleKey.R) { Console.Clear(); await Main(null); } }