Beispiel #1
0
        /// <summary>
        /// Gets a list of aliases for a show.
        /// </summary>
        /// <param name="showId"></param>
        /// <returns>A list of aliases for a show</returns>
        public async Task <IEnumerable <Alias> > GetShowAliasesAsync(int showId)
        {
            const string relativeUrl = "/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            uriBuilder.AppendPathSegments(showId.ToString(), "akas");

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var aliases = DomainObjectFactory.CreateAliases(response);

            return(aliases);
        }
Beispiel #2
0
        /// <summary>
        /// Gets a list of all shows in TvMaze database with all primary information included.
        /// List is paginated with a maximus of 250 results per call.
        /// The pagination is based on show ID, e.g. page 0 will contain
        /// shows with IDs between 0 and 250. This means a single page
        /// might contain less than 250 results in case of deletions.
        /// End of list is reachd when you receive a HTTP 404 response code.
        /// </summary>
        /// <param name="pageNumber"></param>
        /// <returns>A list of all shows</returns>
        public async Task <IEnumerable <Show> > GetAllShowsAsync(int pageNumber = 0)
        {
            if (pageNumber < 0)
            {
                throw new ArgumentException(nameof(pageNumber));
            }

            const string relativeUrl = "/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            if (pageNumber > 0)
            {
                uriBuilder.BuildQueryString(new { page = pageNumber.ToString() });
            }

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var shows = DomainObjectFactory.CreateShows(response);

            return(shows);
        }
Beispiel #3
0
        /// <summary>
        /// Retreive all episodes from particular show that have aired on a specific date.
        /// </summary>
        /// <param name="showId">Show id</param>
        /// <param name="airDate">Air date</param>
        /// <returns>List of epiodes of particular show</returns>
        public async Task <IEnumerable <Episode> > GetShowEpisodesAsync(int showId, DateTime airDate)
        {
            const string relativeUrl = "/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            uriBuilder.AppendPathSegments(showId.ToString(), "episodesbydate");
            uriBuilder.BuildQueryString(new { date = airDate.ToString(DATE_ISO_8601, CultureInfo.InvariantCulture) });

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var episodes = DomainObjectFactory.CreateEpisodes(response);

            return(episodes);
        }
Beispiel #4
0
        /// <summary>
        /// Retreive all primary information for a given person with
        /// possible embedding of additional information
        /// </summary>
        /// <param name="personId">Person id</param>
        /// <param name="embed">Embedded additional information</param>
        /// <returns>All primary information for a given person with possible embedding of additional information</returns>
        public async Task <Person> GetPersonInfoAsync(int personId, EmbedType?embed = null)
        {
            const string relativeUrl = "/people";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            uriBuilder.AppendPathSegment(personId.ToString());

            if (embed != null)
            {
                uriBuilder.BuildQueryString(new { embed = embed.Value.GetEnumDisplayName() });
            }

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            Person person = DomainObjectFactory.CreatePerson(response);

            return(person);
        }
Beispiel #5
0
        /// <summary>
        /// Gets a complete list of episodes for the given show.
        /// Episodes are returned in their airing order and include
        /// full episode information.
        ///
        /// By default, specials are not included in the list.
        /// </summary>
        /// <param name="showId">Show id</param>
        /// <param name="includeSpecials">True to include special episodes, otherwise false. Default is true.</param>
        /// <returns>Epiodes list</returns>
        public async Task <IEnumerable <Episode> > GetShowEpisodeListAsync(int showId, bool includeSpecials = true)
        {
            const string relativeUrl = "/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            uriBuilder.AppendPathSegments(showId.ToString(), "episodes");

            if (includeSpecials)
            {
                uriBuilder.BuildQueryString(new { specials = "1" });
            }

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var episodes = DomainObjectFactory.CreateEpisodes(response);

            return(episodes);
        }
Beispiel #6
0
        /// <summary>
        /// Retreive one specific episode from particular show given
        /// its season and episode number.
        /// </summary>
        /// <param name="showId">Show id</param>
        /// <param name="season">Season number</param>
        /// <param name="episodeNumber">Episode number</param>
        /// <returns>Specific episode</returns>
        public async Task <Episode> GetShowEpisodeAsync(int showId, int season, int episodeNumber)
        {
            const string relativeUrl = "/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            uriBuilder.AppendPathSegments(showId.ToString(), "episodebynumber");
            uriBuilder.BuildQueryString(new { season, number = episodeNumber });

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var episode = DomainObjectFactory.CreateEpisode(response);

            return(episode);
        }
Beispiel #7
0
        /// <summary>
        /// Search through all the people in TvMaze database.
        /// </summary>
        /// <param name="query">Search query</param>
        /// <returns>Person search result</returns>
        public async Task <IEnumerable <SearchResult <Person> > > PeopleSearchAsync(string query)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException(nameof(query));
            }

            const string relativeUrl = "/search/people";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };


            uriBuilder.BuildQueryString(new { q = query });

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            IEnumerable <SearchResult <Person> > peopleSearchResults = DomainObjectFactory.CreatePeopleSearchResults(response);

            return(peopleSearchResults);
        }
Beispiel #8
0
        /// <summary>
        /// Find a tv show by providing ID from external tv show providers
        /// </summary>
        /// <param name="showId">External provider's show id</param>
        /// <param name="externalTvShowProvider">External tv show provider</param>
        public async Task <Show> ShowLookupAsync(string showId, ExternalTvShowProvider externalTvShowProvider)
        {
            // lookup/shows?tvrage=24493
            const string relativeUrl = "/lookup/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            NameValueCollection queryParams = new NameValueCollection {
                { externalTvShowProvider.GetEnumDisplayName(), showId.ToString() }
            };

            uriBuilder.BuildQueryString(queryParams);

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            Show show = DomainObjectFactory.CreateShow(response);

            return(show);
        }
Beispiel #9
0
        /// <summary>
        /// Gets the full schedule - a list of all future episodes know to TvMaze,
        /// regardless of their country.
        /// </summary>
        /// <example>http://api.tvmaze.com/schedule/full</example>
        /// <returns>Full schedule</returns>
        /// <exception cref="HttpRequestExtException">HttpRequest exception with included HttpStatusCode</exception>
        public async Task <Schedule> GetFullScheduleAsync()
        {
            const string relativeUrl = "/schedule/full";
            //var response = await httpClient.GetStringAsync(new Uri(baseApiUrl, relativeUrl));

            var httpResponse = await httpClient.GetAsync(new Uri(baseApiUrl, relativeUrl));

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            Schedule schedule = DomainObjectFactory.CreateSchedule(response);

            return(schedule);
        }
Beispiel #10
0
        /// <summary>
        /// Search the single tv show in TvMaze database by show's name.
        /// </summary>
        /// <param name="query">Search query - show's name</param>
        /// <param name="embed">Embedded additional information</param>
        /// <returns>Returns exactly one result, or no result at all.</returns>
        public async Task <Show> ShowSingleSearchAsync(string query, EmbedType?embed = null)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException(nameof(query));
            }

            const string relativeUrl = "/singlesearch/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };


            NameValueCollection queryParams = new NameValueCollection {
                { "q", query }
            };

            if (embed != null)
            {
                queryParams["embed"] = embed.Value.GetEnumDisplayName();
            }

            uriBuilder.BuildQueryString(queryParams);

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            Show show = DomainObjectFactory.CreateShow(response);

            return(show);
        }
Beispiel #11
0
        /// <summary>
        /// Gets schedule that air in a given country on a given date.
        /// Episodes are returned in the order in which they are aired, and full information about
        /// the episode and the corresponding show is included
        /// </summary>
        /// <example>
        /// http://api.tvmaze.com/schedule?country=US&date=2014-12-01
        /// http://api.tvmaze.com/schedule
        /// </example>
        /// <param name="countryCode">Country for which schedule is requestd. An ISO 3166-1 code of the country; defaults to US</param>
        /// <param name="date">Date for which schedule is requested. Defaults to the current day</param>
        /// <returns>Schedule</returns>
        /// <exception cref="HttpRequestExtException">HttpRequest exception with included HttpStatusCode</exception>
        public async Task <Schedule> GetScheduleAsync(string countryCode = null, DateTime?date = null)
        {
            const string relativeUrl = "/schedule";
            var          uriBuilder  = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            var queryParams = new NameValueCollection();

            // (optional) countrycode: an ISO 3166-1 code of the country; defaults to US
            if (countryCode != null)
            {
                queryParams["country"] = countryCode;
            }

            // (optional) date: an ISO 8601 formatted date; defaults to the current day
            if (date != null)
            {
                queryParams["date"] = date.Value.ToString(DATE_ISO_8601, CultureInfo.InvariantCulture);
            }

            uriBuilder.BuildQueryString(queryParams);

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            Schedule schedule = DomainObjectFactory.CreateSchedule(response);

            return(schedule);
        }
Beispiel #12
0
        /// <summary>
        /// Gets a list of all shows in the TvMaze database and the timestap when they
        /// were last updated.
        /// </summary>
        /// <returns>List of all updated shows</returns>
        public async Task <IEnumerable <ShowUpdate> > GetShowUpdatesAsync()
        {
            const string relativeUrl = "/updates/shows";

            var uriBuilder = new UriBuilder(baseApiUrl)
            {
                Path = relativeUrl
            };

            //var response = await httpClient.GetStringAsync(uriBuilder.Uri);
            var httpResponse = await httpClient.GetAsync(uriBuilder.Uri);

            try {
                httpResponse.EnsureSuccessStatusCode();
            } catch (HttpRequestException ex) {
                throw new HttpRequestExtException(httpResponse.StatusCode, ex.Message, ex);
            }

            var response = await httpResponse.Content.ReadAsStringAsync();

            var showUpdates = DomainObjectFactory.CreateShowUpdates(response);

            return(showUpdates);
        }