/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }