/// <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> /// Retreive all primary information for a given hsow /// with possible embedding of additional information. /// </summary> /// <param name="showId">Show id</param> /// <param name="embed">Embedded additional information</param> /// <returns>Show info</returns> public async Task <Show> GetShowAsync(int showId, EmbedType?embed = null) { const string relativeUrl = "/shows"; var uriBuilder = new UriBuilder(baseApiUrl) { Path = relativeUrl }; uriBuilder.AppendPathSegment(showId.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(); Show show = DomainObjectFactory.CreateShow(response); return(show); }
/// <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); }