/// <summary> /// Looks for videos matching a query /// </summary> /// <param name="apiKey">API key unique to the user</param> /// <param name="query">What to search for</param> /// <param name="pageNumber">Which page of results to view</param> /// <returns></returns> public static async Task <VideosResponse> GetVideoSearchResultsAsync(string apiKey, string query, int pageNumber) { VideosResponse response = null; string pageNumberParameter = string.Empty; if (pageNumber > 1) { pageNumberParameter = "&page=" + pageNumber; } try { var uri = new Uri("https://www.giantbomb.com/api/search/?format=json&api_key=" + apiKey + "&query=" + query + "&resources=video" + pageNumberParameter); response = await Utilities.HttpRequestAgent.GetDeserializedResponseAsync <VideosResponse>(uri); response = RemoveInvalidVideos(response); } catch (Exception e) { Serilog.Log.Error(e, "Error finding search results for query " + query + " and page number " + pageNumber); } return(response); }
/// <summary> /// Removes all items where there's no video URL or name /// </summary> /// <param name="videos"></param> /// <returns></returns> public static VideosResponse RemoveInvalidVideos(VideosResponse videos) { if ((videos != null) && (videos.Results != null) && (videos.Results.Count > 0)) { videos.Results.RemoveAll(item => ( String.IsNullOrWhiteSpace(item.HdUrl + item.HighUrl + item.LowUrl) || String.IsNullOrWhiteSpace(item.Name))); } return(videos); }
/// <summary> /// Maps the videos to videos response. /// </summary> /// <param name="videos">The videos.</param> /// <returns></returns> private VideosResponse MapVideosToVideosResponse(IEnumerable <VideoDatabaseResposne> videos) { var videosResponse = new VideosResponse(); videosResponse.Videos = from video in videos select new Video { Title = video.Title, Url = video.Url }; return(videosResponse); }
private async Task CrawlPortion(string channelId, string continuationToken) { SearchResponse searchResults = await GetSearchResults(channelId, continuationToken); VideosResponse videosDetails = await GetVideosDetails(searchResults); foreach (var vidDet in videosDetails.items) { CollectVideo(searchResults, vidDet); } if (!string.IsNullOrEmpty(searchResults.nextPageToken)) { await CrawlPortion(channelId, searchResults.nextPageToken); } }
/// <summary> /// Pulls a list of videos from Giant Bomb /// </summary> /// <param name="apiKey">API key unique to the user</param> /// <param name="videoGroupingId">Numerical ID of which grouping to query</param> /// <param name="grouping">Whether the group is a category or a show</param> /// <param name="offset">If viewing multiple pages of videos, how many videos to skip in the query</param> /// <returns></returns> public static async Task <VideosResponse> GetVideosAsync(string apiKey, int offset, string videoGroupingId, GroupingType grouping) { VideosResponse response = null; try { string categoryParameter = string.Empty; if (!String.IsNullOrWhiteSpace(videoGroupingId)) { switch (grouping) { case GroupingType.Category: categoryParameter = "&filter=video_categories:" + videoGroupingId; break; case GroupingType.Show: categoryParameter = "&filter=video_show:" + videoGroupingId; break; case GroupingType.None: break; } } string offsetParameter = string.Empty; if (offset > 0) { offsetParameter = "&offset=" + offset; } var uri = new Uri("https://www.giantbomb.com/api/videos/?format=json&api_key=" + apiKey + categoryParameter + offsetParameter); response = await Utilities.HttpRequestAgent.GetDeserializedResponseAsync <VideosResponse>(uri); response = RemoveInvalidVideos(response); } catch (Exception e) { Serilog.Log.Error(e, "Error pulling videos with category ID " + videoGroupingId + " and offset " + offset); } return(response); }
public void CkickOnVideosResponse() { VideosResponse.Click(); }
public async Task LoadVideosAsync(bool isFirstTimeLoadingVideos) { try { if (isFirstTimeLoadingVideos) { IsLoading = true; FoundVideos = false; _numberOfVideosCurrentlyShown = 0; _videos.Clear(); _subHeaderVideos.Clear(); _headerVideos.Clear(); _liveBroadcasts.Clear(); } else { AreAdditionalResultsBeingLoaded = true; } AdditionalVideosFound = false; VideosResponse response = null; bool isGroupPage = false; if ((this.Group == null) || (String.IsNullOrWhiteSpace(this.Group.Id))) { await CheckForLiveStreamAsync(); response = await GiantBombApi.Services.VideoRetrievalAgent.GetVideosAsync(_apiKey, _numberOfVideosCurrentlyShown); } else { isGroupPage = true; GroupTitle = Group.Title; GroupDescription = Group.Deck; response = await GiantBombApi.Services.VideoRetrievalAgent.GetVideosAsync(_apiKey, _numberOfVideosCurrentlyShown, Group.Id, Group.GroupingType); } if ((response != null) && (response.Status == StatusCode.OK) && (response.Results != null) && ((response.Results.Count() > 0))) { FoundVideos = true; _numberOfVideosCurrentlyShown += response.Results.Count(); if (response.NumberOfTotalResults > _numberOfVideosCurrentlyShown) { AdditionalVideosFound = true; } else { AdditionalVideosFound = false; } foreach (var video in response.Results) { int percentComplete = GiantBombApi.Services.VideoPlaybackPositionAgent.GetPlaybackPercentageComplete(video); var viewModel = new VideoViewModel() { Id = video.Id, Title = video.Name, Description = video.Deck, Source = video, PercentageComplete = percentComplete }; if (video.Image != null) { if (!String.IsNullOrWhiteSpace(video.Image.SuperUrl)) { viewModel.ImageLocation = new Uri(video.Image.SuperUrl); } else if (!String.IsNullOrWhiteSpace(video.Image.MediumUrl)) { viewModel.ImageLocation = new Uri(video.Image.MediumUrl); } else if (!String.IsNullOrWhiteSpace(video.Image.SmallUrl)) { viewModel.ImageLocation = new Uri(video.Image.SmallUrl); } } _videos.Add(viewModel); } } // Add in the header and subheader view models if (isFirstTimeLoadingVideos) { if (isGroupPage) { // Group page style, no header. Don't show anything unless we have a full // second row (3 wide) of videos. if (_videos.Count > (NumberOfSubHeadersOnGroupPage + 3)) { var subHeaderViewModels = _videos.Take(NumberOfSubHeadersOnGroupPage); foreach (var video in subHeaderViewModels) { _subHeaderVideos.Add(video); } for (int i = 0; i < NumberOfSubHeadersOnGroupPage; i++) { _videos.RemoveAt(0); } } } else { // Main page style, includes header. Don't show anything unless we have a full // third row (3 wide) of videos. if (_videos.Count > (NumberOfSubHeadersOnMainPage + 4)) { if ((LiveBroadcasts == null) || (LiveBroadcasts.Count == 0)) { _headerVideos.Add(_videos.First()); _videos.RemoveAt(0); } var subHeaderViewModels = _videos.Take(NumberOfSubHeadersOnMainPage); foreach (var video in subHeaderViewModels) { _subHeaderVideos.Add(video); } for (int i = 0; i < NumberOfSubHeadersOnMainPage; i++) { _videos.RemoveAt(0); } } } } } catch (Exception e) { Serilog.Log.Information(e, "Error loading videos"); } AreAdditionalResultsBeingLoaded = false; IsLoading = false; }