示例#1
0
        public async Task <IHttpActionResult> SearchAsync(String queryStr)
        {
            var youtubeResponse = new YoutubeResponse
            {
                BaseUrl               = "https://www.youtube.com/embed",
                ThumbnailUrl          = "https://img.youtube.com/vi",
                ThumbnailDefaultImage = "mqdefault.jpg"
            };

            try
            {
                var youtubeDataSearchResult = await new YoutubeData().Run(queryStr);
                youtubeResponse.Videos = youtubeDataSearchResult.YoutubeVideos;

                var youtubeSearchLog = new YoutubeSearchLog
                {
                    SearchDateTime     = DateTime.Now,
                    SearchedKeyword    = queryStr,
                    SearchTotalResults = youtubeDataSearchResult.TotalResults
                };

                _youtubeSearchService.AddLog(youtubeSearchLog);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            return(Ok(youtubeResponse));
        }
示例#2
0
        public async Task Assert_GetRequest_is_correct()
        {
            string          url      = "https://google.com";
            YoutubeResponse response = await youtubeApi.GetRequest(url);

            Assert.IsNotNull(response.Content);
        }
示例#3
0
        // http://codemobiles.com/adhoc/youtubes/index_new.php?username=admin&password=password&type=foods
        public static async Task <YoutubeResponse> GetData(User userBean, String type = "superhero")
        {
            using (var client = new HttpClient())
            {
                try
                {
                    // step1
                    const string baseUrl = "http://codemobiles.com";
                    // step 2 path
                    string function = "/adhoc/youtubes/index_new.php" +
                                      $"?username={userBean.UserName}&password={userBean.Password}&type={type}";

                    client.BaseAddress = new Uri(baseUrl);

                    //step 3
                    var response = await client.GetAsync(function);  // Get http method

                    response.EnsureSuccessStatusCode();

                    var stringResponse = await response.Content.ReadAsStringAsync();

                    //step 4
                    YoutubeResponse result = JsonConvert.DeserializeObject <YoutubeResponse>(stringResponse);

                    return(result);
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"Request exception: {e.Message}");
                }
            }
            return(null);
        }
        public async Task <ActionResult> FetchYoutubeVideosAsync()
        {
            if (dateTimeRateLimited == DateTime.Now.Date)
            {
                return(BadRequest("rate-limited"));
            }

            int totalVideosAdded = 0;

            foreach (string country in Constants.TRENDING_COUNTRY_CODES)
            {
                // Finds and adds all the trending videos
                List <YoutubeVideo> trendingVideos = new List <YoutubeVideo>();
                string nextPageToken = null;
                do
                {
                    string          url      = YoutubeApiStrings.GetTrendingVideo(country, Constants.YOUTUBE_API_KEY, pageToken: nextPageToken);
                    YoutubeResponse response = await youtubeApi.GetRequest(url);

                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        dateTimeRateLimited = DateTime.Now.Date;
                        YoutubeError error = parser.ParseYoutubeError(response.Content);
                        return(BadRequest(error));
                    }
                    nextPageToken = parser.ParseTokenAndVideoCount(response.Content, out int videoCount);
                    trendingVideos.AddRange(parser.ParseYoutubeVideosFromTrending(response.Content, videoCount));
                } while (nextPageToken != null);

                await AddYoutubeVideosDatabaseAsync(trendingVideos);
                await SaveChangesDbAsync();

                totalVideosAdded += trendingVideos.Count;

                // Find and adds all videos related to the trending videos
                List <YoutubeVideo> relatedVideos = new List <YoutubeVideo>();
                foreach (YoutubeVideo video in trendingVideos)
                {
                    string          url      = YoutubeApiStrings.GetVideoRelatedToVideoId(video.VideoId, Constants.YOUTUBE_API_KEY, maxResults: 50);
                    YoutubeResponse response = await youtubeApi.GetRequest(url);

                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        dateTimeRateLimited = DateTime.Now.Date;
                        YoutubeError error = parser.ParseYoutubeError(response.Content);
                        return(BadRequest(error));
                    }
                    relatedVideos.AddRange(parser.ParseYoutubeVideosFromSearch(response.Content, 50));
                }

                await AddYoutubeVideosDatabaseAsync(relatedVideos);
                await SaveChangesDbAsync();

                totalVideosAdded += relatedVideos.Count;
            }

            return(Ok(totalVideosAdded));
        }
        public async Task <ActionResult> GetFillerVideos()
        {
            if (dateTimeRateLimited == DateTime.Now.Date)
            {
                return(BadRequest("rate-limited"));
            }

            int totalVideosAdded = 0;

            // Fetch all videos by search, while not rate limited
            while (dateTimeRateLimited != DateTime.Now.Date)
            {
                string          url      = YoutubeApiStrings.GetVideoBySearch(RandomString(3), Constants.YOUTUBE_API_KEY, maxResults: 50);
                YoutubeResponse response = await youtubeApi.GetRequest(url);

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    dateTimeRateLimited = DateTime.Now.Date;
                    // TODO: Fetch and log this YoutubeError message
                    YoutubeError error = parser.ParseYoutubeError(response.Content);
                    return(BadRequest(error));
                }
                parser.ParseTokenAndVideoCount(response.Content, out int videoCount);
                List <YoutubeVideo> videos = parser.ParseYoutubeVideosFromSearch(response.Content, videoCount);

                for (int i = 0; i < videos.Count; i++)
                {
                    string urlStats  = YoutubeApiStrings.GetVideoStatistics(videos[i].VideoId, Constants.YOUTUBE_API_KEY);
                    long   viewCount = await GetYoutubeVideoViewCountFromApiAsync(urlStats);

                    if (viewCount == -1)
                    {
                        break;
                    }
                    videos[i].ViewCount = viewCount;
                }
                List <YoutubeVideo> validVideos = videos.Where(yt => yt.ViewCount != -1).ToList();

                totalVideosAdded += validVideos.Count;
                await AddYoutubeVideosDatabaseAsync(validVideos);
                await SaveChangesDbAsync();
            }
            return(Ok(totalVideosAdded));
        }
示例#6
0
        public async Task <IHttpActionResult> SearchAsyncPost(YoutubeSearchRequest searchRequest)
        {
            var youtubeResponse = new YoutubeResponse
            {
                BaseUrl               = "https://www.youtube.com/embed",
                ThumbnailUrl          = "https://img.youtube.com/vi",
                ThumbnailDefaultImage = "mqdefault.jpg"
            };

            try
            {
                var youtubeDataSearchResult = await new YoutubeData().Run(searchRequest.Keyword);
                youtubeResponse.Videos = youtubeDataSearchResult.YoutubeVideos;

                var youtubeSearchLog = new YoutubeSearchLog
                {
                    SearchDateTime     = DateTime.Now,
                    SearchedKeyword    = searchRequest.Keyword,
                    SearchTotalResults = youtubeDataSearchResult.TotalResults
                };

                var assembly = Assembly.Load(searchRequest.NamespaceName);
                var type     = assembly.GetType(searchRequest.NamespaceName + "." + searchRequest.ClassName);

                var constructor = type.GetConstructor(new Type[] { typeof(YoutubeSearchLogRepository) });
                var classObject = constructor.Invoke(new Object[] { this._youtubeSearchRepository });

                var method = type.GetMethod(searchRequest.MethodName);
                method.Invoke(classObject, new Object[] { youtubeSearchLog });
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            return(Ok(youtubeResponse));
        }
        private async Task <long> GetYoutubeVideoViewCountFromApiAsync(string apiUrl)
        {
            YoutubeResponse response = await youtubeApi.GetRequest(apiUrl);

            return(parser.ParseYoutubeVideoViewCount(response.Content));
        }