private void SaveYouTubeSearchResults(YouTubeSearchRequest searchRequest) //================================================================================================================ // Save the given YouTube search results to the session and database // // Parameters // searchRequest: YouTube search request data populated with results //================================================================================================================ { // Save the results locally in the session Session[searchRequest.SessionKey] = searchRequest.SearchResults; SSCasino_DBContext dbCasino = null; try { // Connect to the database dbCasino = new SSCasino_DBContext(); // If the results are is NOT in the database, save them if (!dbCasino.YouTubeSearchResults.Any(e => e.SessionKey == searchRequest.SessionKey)) { // Save the results to the database dbCasino.YouTubeSearchResults.AddRange(searchRequest.SearchResults); dbCasino.SaveChanges(); } } finally { if (dbCasino != null) { dbCasino.Dispose(); } } }
private void ParseYouTubeSearchResults(YouTubeSearchRequest searchRequest, SearchListResponse searchResults) //================================================================================================================ // Parse the given YouTube search results into a search results list // // Parameters // searchRequest: YouTube search request data // searchResults: YouTube search results data // // Outputs // The SearchResults list in the searchRequest object is populated //================================================================================================================ { int resultCount = 0; foreach (SearchResult searchResult in searchResults.Items) { // Bump the result count resultCount++; // Create and initialize a new YouTube search result YouTubeSearchResult item = new YouTubeSearchResult { SessionKey = searchRequest.SessionKey, ResultNo = resultCount, YouTubeVideoId = searchResult.Id.VideoId, Title = searchResult.Snippet.Title, Description = searchResult.Snippet.Description, ThumbnailURL = searchResult.Snippet.Thumbnails.Default__.Url, YouTubeURL = string.Format(YOU_TUBE_LINK, searchResult.Id.VideoId) }; // Add this result to the collection searchRequest.SearchResults.Add(item); } }
private bool SearchYouTube(YouTubeSearchRequest searchRequest) //================================================================================================================ // Search YouTube based on the given search request and populate the request with search results // // Parameters // searchRequest: YouTube search request data // // Retruns // True/False, has the YouTube data limit been exceeded //================================================================================================================ { bool dataLimitReached = false; string googleAPIKey = RetrieveGoogleAPIKey(); try { // Create and initialize the YouTube API YouTubeService youTube = new YouTubeService( new BaseClientService.Initializer() { ApiKey = googleAPIKey, ApplicationName = this.GetType().ToString() }); // Build a search request for the selected category SearchResource.ListRequest youtubeRequest = youTube.Search.List("snippet"); youtubeRequest.Q = searchRequest.SearchPhrase; youtubeRequest.Type = "video"; youtubeRequest.MaxResults = searchRequest.MaxResults; // Search YouTube and parse the results SearchListResponse searchResults = youtubeRequest.Execute(); ParseYouTubeSearchResults(searchRequest, searchResults); SaveYouTubeSearchResults(searchRequest); } catch (Exception runError) { if (runError.Source == GOOGLE_ERROR_SOURCE) { dataLimitReached = true; } } return(dataLimitReached); }
private bool GetSerachResultsFromDatabase(YouTubeSearchRequest searchRequest) //================================================================================================================ // Retrieve search results from the database based on the given search request // // Parameters // searchRequest: YouTube search request data // // Outputs // The SearchResults list in the searchRequest object is populated // // Retruns // True/False, has the YouTube data limit been exceeded //================================================================================================================ { bool dataAvailable = false; // Populate the model SSCasino_DBContext dbCasino = null; try { // Connect the the database dbCasino = new SSCasino_DBContext(); // Retrieve results frokm the database searchRequest.SearchResults = dbCasino.YouTubeSearchResults.Where(e => e.SessionKey == searchRequest.SessionKey).ToList(); dataAvailable = (searchRequest.SearchResults.Count != 0); } finally { if (dbCasino != null) { dbCasino.Dispose(); } } return(dataAvailable); }
private bool GetSerachResults(YouTubeAPI youTubeAPI, string categoryName, YouTubeSearchRequest searchRequest) //================================================================================================================ // Retrieve search results based on the given search request // // Parameters // youTubeAPI: YouTube API options // categoryName: Category being searched // searchRequest: YouTube search request data // // Retruns // True/False, has the YouTube data limit been exceeded // // Outputs // The SearchResults list in the searchRequest object is populated // // Developer Notes // To avoid exceeding the YouTube data limits, search results are chached locally in the session and also // written to the database. Retrieval priority is as follows... // 1) Results are taken from the local cache, if available // 2) Results are retrieved from YouTube // 3) Results are retrieved from the database, If the data limit has been exceeded // // NOTE: A data limnit exceeded flag is also stored in the session. This value is checked first, before // connecting to YouTube to avoid unnecessary data limit exceeded errors. //================================================================================================================ { bool dataLimitExceeded = false; // Results are loaded from the database... // If the developer flag UseDatabaseFirst is set // -- OR -- // If our YouTube API data limit has been exceeded and the local cache is empty if ((youTubeAPI.UseDatabaseFirst) || ((youTubeAPI.DataLimitExceeded) && (Session[searchRequest.SessionKey] == null))) { dataLimitExceeded = (GetSerachResultsFromDatabase(searchRequest) == false); } else { // Results are taken from the local cache, if available if (Session[searchRequest.SessionKey] != null) { searchRequest.SearchResults = (List <YouTubeSearchResult>)Session[searchRequest.SessionKey]; } else { // If the YouTube data limit has not been exceeded, Results are retrieved from YouTube // Otherwise, results are retrieved from the database dataLimitExceeded = (Session[YT_LIMIT_EXCEEDED] != null); if (!dataLimitExceeded) { // If the data limit has been exceeded, results are retrieved from the database, if available dataLimitExceeded = SearchYouTube(searchRequest); if (dataLimitExceeded) { dataLimitExceeded = (GetSerachResultsFromDatabase(searchRequest) == false); Session[YT_LIMIT_EXCEEDED] = true; } } } } // Select the default video if (!dataLimitExceeded) { youTubeAPI.SelectedCategory = String.Format(Properties.Resources.PokerTopTen, categoryName); youTubeAPI.SelectedVideoURL = searchRequest.SearchResults[0].YouTubeURL; youTubeAPI.SelectedVideoResultNo = searchRequest.SearchResults[0].ResultNo; } return(dataLimitExceeded); }