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)); }
public async Task Assert_GetRequest_is_correct() { string url = "https://google.com"; YoutubeResponse response = await youtubeApi.GetRequest(url); Assert.IsNotNull(response.Content); }
// 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)); }
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)); }