Exemple #1
0
        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();
                }
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }