public async Task <IReadOnlyCollection <YouTubeChannel> > GetChannelDetails( IReadOnlyCollection <string> channelIds, bool includingStatistics = false ) { if (channelIds.Count() > 50) { throw new ArgumentOutOfRangeException("channelIds must contain max. 50 entries"); } string part = "snippet"; if (includingStatistics == true) { part += ",statistics"; } // prepare request to get channel snippets by id var listRequest = _ytService.Channels.List(part); listRequest.Id = string.Join(',', channelIds); listRequest.MaxResults = channelIds.Count(); // query youtube api ChannelListResponse listResponse = await listRequest.ExecuteAsync(); return(_mapper.Map <List <YouTubeChannel> >(listResponse?.Items)); }
private async Task Run() { UserCredential credential; string clientSecretsPath = CredentialsManager.GetClientSecretsLocation(); using (FileStream stream = new FileStream(clientSecretsPath, FileMode.Open, FileAccess.Read)) { // This OAuth 2.0 access scope allows for read-only access to the authenticated // user's account, but not other types of account access. credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, new[] { YouTubeService.Scope.YoutubeReadonly }, "user", CancellationToken.None, new FileDataStore(GetType().ToString()) ); } BaseClientService.Initializer baseClientServiceInitializer = new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = GetType().ToString() }; YouTubeService youtubeService = new YouTubeService(baseClientServiceInitializer); ChannelsResource.ListRequest channelsListRequest = youtubeService.Channels.List("contentDetails"); channelsListRequest.Mine = true; // Retrieve the contentDetails part of the channel resource for the authenticated user's channel. ChannelListResponse channelsListResponse = await channelsListRequest.ExecuteAsync(); foreach (Channel channel in channelsListResponse.Items) { // From the API response, extract the playlist ID that identifies the list // of videos uploaded to the authenticated user's channel. string uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads; Console.WriteLine("Videos in list {0}", uploadsListId); string nextPageToken = ""; while (nextPageToken != null) { PlaylistItemsResource.ListRequest playlistItemsListRequest = youtubeService.PlaylistItems.List("snippet"); playlistItemsListRequest.PlaylistId = uploadsListId; playlistItemsListRequest.MaxResults = 50; playlistItemsListRequest.PageToken = nextPageToken; // Retrieve the list of videos uploaded to the authenticated user's channel. PlaylistItemListResponse playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync(); foreach (PlaylistItem playlistItem in playlistItemsListResponse.Items) { // Print information about each video. Console.WriteLine("{0} ({1})", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId); } nextPageToken = playlistItemsListResponse.NextPageToken; } } }
/// <summary> /// Return a complete Channel object from the youtube id of the channel /// </summary> /// <param name="channelID"></param> /// <returns></returns> public async static Task <Channel> GetChannel(string channelID) { try { ChannelsResource.ListRequest request = YoutubeManager.YoutubeService.Channels.List("snippet"); request.Id = channelID; ChannelListResponse response = await request.ExecuteAsync(); if (response.Items.Count > 0) { var result = response.Items[0]; return(new Channel(result.Snippet.Title, channelID, result.Snippet.Thumbnails.High.Url)); } else { return(null); } } catch { MainActivity.instance.UnknowError(ErrorCode.CG1); return(null); } }
public async Task <SearchResponse> GetResults() { SearchResponse response = new SearchResponse(); List <SearchResult> result = await LoadItems(); List <string> videosId = new List <string>(); List <string> channelsId = new List <string>(); List <string> playlistsId = new List <string>(); result.ForEach(item => { switch (item.Id.Kind) { case "youtube#video": videosId.Add(item.Id.VideoId); break; case "youtube#channel": channelsId.Add(item.Id.ChannelId); break; case "youtube#playlist": playlistsId.Add(item.Id.PlaylistId); break; } }); VideoQuery videoQuery = new VideoQuery { Part = "snippet,contentDetails", Id = string.Join(",", videosId), MaxResults = this.Query.MaxResults }; VideoListResponse videoResponse = await service.GetVideoInfo(videoQuery); response.Videos.AddRange(videoResponse.Items); ChannelQuery channelQuery = new ChannelQuery { Part = "snippet,statistics", Id = string.Join(",", channelsId), MaxResults = this.Query.MaxResults }; ChannelListResponse channelResponse = await service.GetChannelInfo(channelQuery); response.Channels.AddRange(channelResponse.Items); PlaylistQuery playlistQuery = new PlaylistQuery { Part = "snippet,status,contentDetails", Id = string.Join(",", playlistsId), MaxResults = this.Query.MaxResults }; PlaylistListResponse playlistResponse = await service.GetPlaylistInfo(playlistQuery); response.Playlists.AddRange(playlistResponse.Items); return(response); }
public string GetChannelPlaylist(string channelName) { // Load the 'uploaded' playlist ChannelsResource.ListRequest channelPlaylistIDReq = YouTubeService.Channels.List("contentDetails"); channelPlaylistIDReq.ForUsername = channelName; ChannelListResponse channelPlaylistIDResp = channelPlaylistIDReq.Execute(); return(channelPlaylistIDResp.Items[0].ContentDetails.RelatedPlaylists.Uploads); }
public static void ClassInitialize(TestContext context) { OkChannelResponse = JsonLoader.LoadJson <ChannelResponse>(@"Channels/Data/channel_info.json"); OkBaseResponse = JsonLoader.LoadJson <BaseResponse>(@"Data/base.json"); OkMessagesResponse = JsonLoader.LoadJson <MessagesResponse>(@"Data/messages.json"); OkChannelLeaveResponse = JsonLoader.LoadJson <ChannelLeaveResponse>(@"Channels/Data/channel_leave.json"); OkChannelListResponse = JsonLoader.LoadJson <ChannelListResponse>(@"Channels/Data/channel_list.json"); OkChannelSetPurposeResponse = JsonLoader.LoadJson <ChannelSetPurposeResponse>(@"Channels/Data/channel_setPurpose.json"); OkChannelSetTopicResponse = JsonLoader.LoadJson <ChannelSetTopicResponse>(@"Channels/Data/channel_setTopic.json"); }
private void GetChannelsCallback(ChannelListResponse clr) { if (clr.ok) { Console.WriteLine("Got channels."); } else { Console.WriteLine(clr.error); } }
/// <summary> /// Return the channelid of a YouTube username /// </summary> /// <param name="userName"></param> /// <returns></returns> public async Task <string> GetChannelIdFromUsername(string userName) { var channelRequest = _ytService.Channels.List("id"); channelRequest.ForUsername = userName; // query youtube api ChannelListResponse channelResponse = await channelRequest.ExecuteAsync(); return(channelResponse?.Items?.FirstOrDefault()?.Id); }
/// <summary> /// Gets the channels associated with the specified IDs. /// </summary> /// <param name="ids">The IDs to search for</param> /// <returns>The channel information</returns> public async Task <IEnumerable <Channel> > GetChannelsByID(IEnumerable <string> ids) { Validator.ValidateList(ids, "ids"); return(await this.YouTubeServiceWrapper(async() => { ChannelsResource.ListRequest search = this.connection.GoogleYouTubeService.Channels.List("snippet,statistics,contentDetails"); search.Id = string.Join(",", ids); search.MaxResults = ids.Count(); ChannelListResponse response = await search.ExecuteAsync(); return response.Items; })); }
public static string GetChannelUploadsPlaylistId(Subscription sub) { ChannelsResource.ListRequest listRequest = Service.Channels.List("contentDetails"); listRequest.Id = sub.ChannelId; ChannelListResponse response = listRequest.Execute(); if (response.Items.Count <= 0) { return(null); } return(response.Items.FirstOrDefault().ContentDetails.RelatedPlaylists.Uploads); }
// Youtube 에서 제공하는 API, 영상 제목, 영상 정보, 영상 길이, 영상 조회수, 영상 설명, 영상 좋아요,싫어요 수, 댓글 수 게시자 채널명, 해당 채널 구독자 수, async void YoutubeAPi() { //비동기, 동기 //비동기 : 해결 속도 동기 보다 느림, 대신 이 명령어 하고 있을 때 다른 일을 동시에 해결 할 수 있음 //동기 : 비동기보다 빠르고 대신 이 명령어를 하는 동안 다른 명령어를 수행못함 // viewCount,likecount, dislikecount, commentcount VideosResource.ListRequest count_like_dislike_view = youtube.Videos.List("statistics");//Videos statistics 연결 count_like_dislike_view.Id = $"{this.Id}"; VideoListResponse countview_res = await count_like_dislike_view.ExecuteAsync(); viewCount.Text = Convert.ToString(countview_res.Items[0].Statistics.ViewCount);// likeCount.Text = Convert.ToString(countview_res.Items[0].Statistics.LikeCount); dislikeCount.Text = Convert.ToString(countview_res.Items[0].Statistics.DislikeCount); commentCount.Text = Convert.ToString(countview_res.Items[0].Statistics.CommentCount); // title, description, channelId, chnnelTitle, publichedAt VideosResource.ListRequest snippet = youtube.Videos.List("snippet");//Videos statistics 연결 snippet.Id = $"{this.Id}"; VideoListResponse snippet_res = await snippet.ExecuteAsync(); this.stitle = Convert.ToString(snippet_res.Items[0].Snippet.Title); title.Text = this.stitle; descriptionBox.Text = "\n\n" + Convert.ToString(snippet_res.Items[0].Snippet.Description.Replace("\n", "\r\n")); ChannelsResource.ListRequest yChannnelId = youtube.Channels.List("statistics"); string channelId = snippet_res.Items[0].Snippet.ChannelId; yChannnelId.Id = channelId; ChannelListResponse yChnnelId_res = await yChannnelId.ExecuteAsync(); // 구독자 수 godog.Text = " 채널 구독자 수: " + Convert.ToString(yChnnelId_res.Items[0].Statistics.SubscriberCount) + " 명"; channelTitle.Text = Convert.ToString(snippet_res.Items[0].Snippet.ChannelTitle); this.channelUrl = "https://www.youtube.com/channel/" + channelId; // title, description, channelId, chnnelTitle, publichedAt VideosResource.ListRequest contentDetials = youtube.Videos.List("contentDetails");//Videos statistics 연결 contentDetials.Id = $"{this.Id}"; VideoListResponse contentDetails_res = await contentDetials.ExecuteAsync(); int timeSeconds = TimeSeconds(contentDetails_res.Items[0].ContentDetails.Duration); string timeString = TimeString(contentDetails_res.Items[0].ContentDetails.Duration); videoLength.Text = timeString; //status.embeddable 해야할것 trackBar1.Maximum = timeSeconds; }
public async Task <ActionResult <ChannelListResponse> > List([Required, FromQuery] AppChannelListRequest request) { YouTubeService service = await serviceAccessor.InitializeServiceAsync(); ChannelsResource.ListRequest requestActual = request.ToActualRequest(service); try { ChannelListResponse response = await requestActual.ExecuteAsync(); return(new ActionResult <ChannelListResponse>(response)); } catch (GoogleApiException ex) { return(StatusCode((int)ex.HttpStatusCode, ex.ToString())); } }
public ChannelListResponse GetChannelList() { ChannelListResponse list = null; Connect(); Slack.GetChannelList((listResponse) => { list = listResponse; ClientReady.Set(); }); ClientReady.Wait(); ClientReady.Reset(); return(list); }
private void AddChannels(ChannelListResponse response) { responseChannels.Clear(); foreach (var channel in response.channels) { responseChannels.Add(ResponseChannel.FromChannel(channel)); } ComboChannels.ItemsSource = null; responseChannels.Insert(0, ResponseChannel.GetAllChannel()); // insert the All Users user on top ComboChannels.ItemsSource = responseChannels; ComboChannels.Items.Refresh(); ComboChannels.SelectedIndex = 0; SetStatus($"Channellist received. ({responseChannels.Count-1} channels)"); }
/// <summary> /// 获取正在直播的管人的链接 /// </summary> /// <param name="idList">管人频道Id</param> /// <param name="service">YoutubeAPI</param> /// <returns></returns> private async Task <Dictionary <string, string> > GetLivingVtuberURLAsync(List <string> idList, YouTubeService service) { Dictionary <string, string> livingVtubers = new Dictionary <string, string>(); foreach (string channelId in idList) { string channelTitle = string.Empty; var channelList = service.Channels.List("snippet,contentDetails,statistics"); var channelActivity = service.Activities.List("snippet,contentDetails"); channelList.Id = channelId; ChannelListResponse channel = await channelList.ExecuteAsync(); //记录频道标题 if (null != channel.Items) { channelTitle = channel.Items[0].Snippet.Title; } //使用id获得直播活动情报 var searchListRequest = service.Search.List("snippet"); searchListRequest.ChannelId = channelId; searchListRequest.EventType = SearchResource.ListRequest.EventTypeEnum.Live; searchListRequest.Type = "video"; var searchListResponse = await searchListRequest.ExecuteAsync(); //如果直播已开始 if ((null != searchListResponse.Items) && (0 != searchListResponse.Items.Count)) { //将直播状态为直播中的直播间信息加入到键值里 SearchResult result = searchListResponse.Items[0]; livingVtubers.Add(channelTitle + "\n" + "正在直播:" + result.Snippet.Title, "\n" + "https://www.youtube.com/watch?v=" + result.Id.VideoId); } else { searchListRequest.EventType = SearchResource.ListRequest.EventTypeEnum.Upcoming; searchListResponse = await searchListRequest.ExecuteAsync(); if ((null != searchListResponse.Items) && (0 != searchListResponse.Items.Count)) { //将直播状态为即将开始的直播间信息加入到键值里 SearchResult result = searchListResponse.Items[0]; livingVtubers.Add(channelTitle + "\n" + "即将开始: " + result.Snippet.Title, "\n" + "https://www.youtube.com/watch?v=" + result.Id.VideoId); } } } return(livingVtubers); }
public MChannelList(ChannelListResponse channelListResponse) { if (channelListResponse == null) { return; } ETag = channelListResponse.ETag; EventId = channelListResponse.EventId; NextPageToken = channelListResponse.NextPageToken; PageInfo = new MPageInfo(channelListResponse.PageInfo); PrevPageToken = channelListResponse.PrevPageToken; //TokenPagination = new MTokenPagination(channelListResponse.TokenPagination); VisitorId = channelListResponse.VisitorId; Items = channelListResponse.Items.Select(channel => new MChannel(channel)).Cast <IChannel>().ToList(); }
/// <summary> /// Gets the channel associated with the account. /// </summary> /// <returns>The channel information</returns> public async Task <Channel> GetMyChannel() { return(await this.YouTubeServiceWrapper(async() => { ChannelsResource.ListRequest search = this.connection.GoogleYouTubeService.Channels.List("snippet,statistics,contentDetails"); search.Mine = true; search.MaxResults = 1; ChannelListResponse response = await search.ExecuteAsync(); if (response.Items.Count > 0) { return response.Items.First(); } return null; })); }
/// <summary> /// Gets the channel associated with the specified username. /// </summary> /// <param name="username">The username to search for</param> /// <returns>The channel information</returns> public async Task <Channel> GetChannelByUsername(string username) { Validator.ValidateString(username, "username"); return(await this.YouTubeServiceWrapper(async() => { ChannelsResource.ListRequest search = this.connection.GoogleYouTubeService.Channels.List("snippet,statistics"); search.ForUsername = username; search.MaxResults = 1; ChannelListResponse response = await search.ExecuteAsync(); if (response.Items.Count > 0) { return response.Items.First(); } return null; })); }
/// <summary> /// Retrieve the playlist id for channel uploads /// </summary> /// <param name="channelId"></param> /// <returns></returns> public async Task <string> GetUploadsPlaylistId(string channelId) { // prepare request to get channel content details by id var listRequest = _ytService.Channels.List("contentDetails"); listRequest.Id = channelId; // query youtube api ChannelListResponse listResponse = await listRequest.ExecuteAsync(); if (listResponse.Items?.Count > 0) { return(listResponse.Items.First() .ContentDetails.RelatedPlaylists.Uploads); } return(null); }
protected override async Task OnChannelStatisticsReceived(string context, ChannelListResponse channelData) { var subscriberCount = channelData.Items[0].Statistics.SubscriberCount; string subscriberCountStr; if (subscriberCount < 1000) { subscriberCountStr = subscriberCount.ToString(); } else if (subscriberCount == 1000) { subscriberCountStr = "1000"; } else if (subscriberCount < 10_000) { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 1) + "." + subscriberCount.Value.ToString().Substring(1, 2) + "K"; } else if (subscriberCount < 100_000) { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 2) + "." + subscriberCount.Value.ToString().Substring(2, 1) + "K"; } else if (subscriberCount < 1_000_000) { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 3) + "K"; } else if (subscriberCount < 10_000_000) { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 1) + "." + subscriberCount.Value.ToString().Substring(1, 2) + "M"; } else if (subscriberCount < 100_000_000) { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 2) + "." + subscriberCount.Value.ToString().Substring(2, 1) + "M"; } else { subscriberCountStr = subscriberCount.Value.ToString().Substring(0, 3) + "M"; } await Manager.SetTitleAsync(context, subscriberCountStr); }
public void List(Player player) { ObjectGuid guid = player.GetGUID(); if (!IsOn(guid)) { ChannelNameBuilder builder = new ChannelNameBuilder(this, new NotMemberAppend()); SendToOne(builder, guid); return; } string channelName = GetName(player.GetSession().GetSessionDbcLocale()); Log.outDebug(LogFilter.ChatSystem, "SMSG_CHANNEL_LIST {0} Channel: {1}", player.GetSession().GetPlayerInfo(), channelName); ChannelListResponse list = new ChannelListResponse(); list.Display = true; /// always true? list.Channel = channelName; list.ChannelFlags = GetFlags(); uint gmLevelInWhoList = WorldConfig.GetUIntValue(WorldCfg.GmLevelInWhoList); foreach (var pair in _playersStore) { Player member = Global.ObjAccessor.FindConnectedPlayer(pair.Key); // PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters // MODERATOR, GAME MASTER, ADMINISTRATOR can see all if (member && (player.GetSession().HasPermission(RBACPermissions.WhoSeeAllSecLevels) || member.GetSession().GetSecurity() <= (AccountTypes)gmLevelInWhoList) && member.IsVisibleGloballyFor(player)) { list.Members.Add(new ChannelListResponse.ChannelPlayer(pair.Key, Global.WorldMgr.GetVirtualRealmAddress(), pair.Value.GetFlags())); } } player.SendPacket(list); }
/// <summary> /// Return a list of complete Channel objects from the youtube ids of the channels /// </summary> /// <param name="channelID"></param> /// <returns></returns> public async static Task <IEnumerable <Channel> > GetChannels(IEnumerable <string> channelIDs) { ChannelsResource.ListRequest request = YoutubeManager.YoutubeService.Channels.List("snippet"); request.Id = string.Join(";", channelIDs); ChannelListResponse response = await request.ExecuteAsync(); if (response.Items.Count > 0) { List <Channel> channels = new List <Channel>(); foreach (var result in response.Items) { channels.Add(new Channel(result.Snippet.Title, result.Id, result.Snippet.Thumbnails.High.Url)); } return(channels); } else { return(null); } }
public async Task loadChannelStatistics() { String channelIds = ""; lock (channelLock) { if (Children.Count == 0) { return; } channelIds = (Children[0] as YoutubeChannelNode).ChannelId; for (int i = 1; i < Children.Count; i++) { channelIds += "," + (Children[i] as YoutubeChannelNode).ChannelId; } } Google.Apis.YouTube.v3.ChannelsResource.ListRequest listRequest = new ChannelsResource.ListRequest(YoutubeViewModel.Youtube, "statistics"); listRequest.Id = channelIds; ChannelListResponse response = await listRequest.ExecuteAsync(); lock (channelLock) { foreach (Channel item in response.Items) { YoutubeChannelNode node = getChannelWithId(item.Id); if (node != null) { node.updateStatistics(item.Statistics); } } } }
public YoutubeChannelNodeState(YoutubeChannelItem item) { Info = item.Info as SearchResult; if (item.Metadata != null) { ThumbString = System.Convert.ToBase64String(item.Metadata.Thumbnail.ImageData); } else { ThumbString = null; } ChannelsResource.ListRequest listRequest = new ChannelsResource.ListRequest(YoutubeViewModel.Youtube, "statistics"); listRequest.Id = item.ChannelId; ChannelListResponse response = listRequest.Execute(); if (response.Items.Count > 0) { Statistics = response.Items[0].Statistics; } }
protected abstract Task OnChannelStatisticsReceived(string context, ChannelListResponse channelData);
public void Process() { try { ChannelsResource.ListRequest channelListRequest = _youtube.Channels.List("id"); // Test if user put user name instead of channel id channelListRequest.ForUsername = _channelId; ChannelListResponse channelsListResponse = channelListRequest.Execute(); string channelId = "0"; if (channelsListResponse.Items.Count != 0) { channelId = channelsListResponse.Items[0].Id; } //User put correct channel ID SearchResource.ListRequest listRequest = _youtube.Search.List("snippet"); if (channelId == "0") // cant find channel id from user name { listRequest.ChannelId = _channelId; // } else // cand find channel id from user name { listRequest.ChannelId = channelId; } listRequest.MaxResults = 50; listRequest.Type = "video"; listRequest.PublishedAfter = _assessment.StartDate; listRequest.PublishedBefore = _assessment.EndDate; // Get all uploaded videos and store to uploadedVideos SearchListResponse resp = listRequest.Execute(); IList <SearchResult> uploadedVideos = resp.Items; string nextPageToken = resp.NextPageToken; while (nextPageToken != null) { listRequest.PageToken = nextPageToken; SearchListResponse respPage = listRequest.Execute(); var resultsPage = respPage.Items; foreach (SearchResult i in resultsPage) { uploadedVideos.Add(i); } nextPageToken = respPage.NextPageToken; if (uploadedVideos.Count == Int32.Parse(Properties.Resources._api_youtube_maximum_videos))// Prevent excessive use of API calls { break; } } // Aggregate data foreach (SearchResult video in uploadedVideos) { // video.Id VideosResource.ListRequest vidReq = _youtube.Videos.List("statistics"); vidReq.Id = video.Id.VideoId; VideoListResponse vidResp = vidReq.Execute(); Video item; if (vidResp.Items.Count != 0) { item = vidResp.Items[0]; if (item.Statistics.LikeCount != null) { _totalLikes += (ulong)item.Statistics.LikeCount; } if (item.Statistics.DislikeCount != null) { _totalDislikes += (ulong)item.Statistics.DislikeCount; } if (item.Statistics.ViewCount != null) { _totalViews += (ulong)item.Statistics.ViewCount; } } } _totalVideos += uploadedVideos.Count; // Grab number of subscribers ChannelsResource.ListRequest channelReq = _youtube.Channels.List("statistics"); channelReq.Id = channelId; ChannelListResponse channelResp = channelReq.Execute(); if (channelResp.Items.Count != 0) { if (channelResp.Items[0].Statistics.SubscriberCount != null) { _subscribers += (ulong)channelResp.Items[0].Statistics.SubscriberCount; } } // Save to Excel SaveToExcelPackage(); } catch (Exception ex) { Log.LogError(this.GetType().Name + " - " + System.Reflection.MethodBase.GetCurrentMethod().Name, ex); throw ex; } }
public async Task <List <Models.Video> > ListVideosByChannelsAsync() { List <Models.Video> videos = new List <Models.Video>(); while (_credential == null || _youtubeService == null) { Thread.Sleep(1000); } _logger.LogInformation(JsonSerializer.Serialize(_settings)); foreach (var channel in _settings.YoutubeChannels) { var request = _youtubeService.Channels.List("contentDetails"); request.Id = channel; ChannelListResponse response = null; try { _logger.LogInformation("_youtubeService.Channels.List"); response = await request.ExecuteAsync(); } catch (Exception e) { _logger.LogError(e.Message); if (e.Message.Contains("Request had insufficient authentication scope")) { await _credential.RevokeTokenAsync(CancellationToken.None); await Init(); _logger.LogInformation("_youtubeService.Channels.List"); response = await request.ExecuteAsync(); } } if (response == null) { continue; } foreach (var channelItem in response.Items) { string uploadsListId = channelItem.ContentDetails.RelatedPlaylists.Uploads; string nextPageToken = ""; while (nextPageToken != null) { var playlistItemsListRequest = _youtubeService.PlaylistItems.List("snippet"); playlistItemsListRequest.PlaylistId = uploadsListId; playlistItemsListRequest.MaxResults = 50; playlistItemsListRequest.PageToken = nextPageToken; _logger.LogInformation("playlistItemsListResponse"); var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync(); videos.AddRange(playlistItemsListResponse.Items.Select(video => new Models.Video { ListId = uploadsListId, Title = video.Snippet.Title, VideoId = video.Snippet.ResourceId.VideoId, ChannelId = video.Snippet.ChannelId })); nextPageToken = playlistItemsListResponse.NextPageToken; } } } return(videos); }
protected override async Task OnChannelStatisticsReceived(string context, ChannelListResponse channelData) { var subscriberCount = channelData.Items[0].Statistics.ViewCount; await Manager.SetTitleAsync(context, subscriberCount.ToString()); }
/// <summary> /// Test the time elapsed in different API operations, in order to evaluate performance. /// </summary> /// <param name="maxItemsQuantity"></param> /// <returns></returns> public TimeElapsedResult TestOperationsTimeElapsed(int maxItemsQuantity, string searchTerm) { // Counters TimeElapsedResult result = new TimeElapsedResult(); var youtube = new YouTubeService(new BaseClientService.Initializer()); SearchResource.ListRequest listRequest = youtube.Search.List("snippet"); listRequest.Fields = "items(id, snippet(title, description, publishedAt, thumbnails, channelId, channelTitle))"; listRequest.Key = API_KEY; listRequest.Type = ResourceTypes.Video; listRequest.MaxResults = MAX_RESULTS_PER_PAGE; if (!string.IsNullOrEmpty(LOCATION)) { listRequest.Location = LOCATION; } if (!string.IsNullOrEmpty(LOCATION_RADIUS)) { listRequest.LocationRadius = LOCATION_RADIUS; } listRequest.Q = searchTerm; listRequest.Order = SearchResource.ListRequest.OrderEnum.Date; var stopwatch = Stopwatch.StartNew(); SearchListResponse searchResponse = listRequest.Execute(); result.ElapsedSearch.Add(stopwatch.ElapsedMilliseconds); List <SearchResult> results = new List <SearchResult>(); List <string> videosIds = new List <string>(); List <string> channelIds = new List <string>(); int currentCounter = 0; while (searchResponse.Items.Count > 0 && currentCounter < maxItemsQuantity) { videosIds.AddRange(searchResponse.Items.Select(v => v.Id.VideoId)); channelIds.AddRange(searchResponse.Items.Select(v => v.Snippet.ChannelId)); results.AddRange(searchResponse.Items); // Gets oldest element var oldest = searchResponse.Items.OrderBy(i => i.Snippet.PublishedAt).FirstOrDefault(); // Avoids getting the oldest again listRequest.PublishedBefore = oldest.Snippet.PublishedAt.Value.AddSeconds(-1); currentCounter += searchResponse.Items.Count; if (currentCounter < maxItemsQuantity) { // Performs the search stopwatch = Stopwatch.StartNew(); searchResponse = listRequest.Execute(); result.ElapsedSearch.Add(stopwatch.ElapsedMilliseconds); } } // Retrieves videos recording details (location) List <string> videosToRetrieve = videosIds.Take(50).ToList(); videosIds = videosIds.Skip(50).ToList(); while (videosToRetrieve.Count > 0) { VideosResource.ListRequest videosRequest = youtube.Videos.List("recordingDetails"); videosRequest.Key = API_KEY; videosRequest.MaxResults = MAX_RESULTS_PER_PAGE; videosRequest.Id = string.Join(",", videosToRetrieve.ToArray()); stopwatch = Stopwatch.StartNew(); VideoListResponse videosResponse = videosRequest.Execute(); result.ElapsedVideo.Add(stopwatch.ElapsedMilliseconds); videosToRetrieve = videosIds.Take(50).ToList(); videosIds = videosIds.Skip(50).ToList(); } // Retrieves channels List <string> channelsToRetrieve = channelIds.Take(50).ToList(); channelIds = channelIds.Skip(50).ToList(); while (channelsToRetrieve.Count > 0) { ChannelsResource.ListRequest channelRequest = youtube.Channels.List("snippet"); channelRequest.Key = API_KEY; channelRequest.MaxResults = MAX_RESULTS_PER_PAGE; channelRequest.Id = string.Join(",", channelsToRetrieve.ToArray()); stopwatch = Stopwatch.StartNew(); ChannelListResponse channelsResponse = channelRequest.Execute(); result.ElapsedChannel.Add(stopwatch.ElapsedMilliseconds); channelsToRetrieve = channelIds.Take(50).ToList(); channelIds = channelIds.Skip(50).ToList(); } result.Results = results; return(result); }
/// <summary> /// Retrieves a certain quantity of videos using oldest publish date criteria. /// </summary> /// <param name="maxItemsQuantity"></param> /// <returns></returns> public List <SearchResult> RetrieveVideosWithoutAPIPaging(int maxItemsQuantity, string searchTerm) { var youtube = new YouTubeService(new BaseClientService.Initializer()); SearchResource.ListRequest listRequest = youtube.Search.List("snippet"); listRequest.Fields = "items(id, snippet(title, description, publishedAt, thumbnails, channelId, channelTitle))"; listRequest.Key = API_KEY; listRequest.Type = ResourceTypes.Video; listRequest.MaxResults = MAX_RESULTS_PER_PAGE; if (!string.IsNullOrEmpty(LOCATION)) { listRequest.Location = LOCATION; } if (!string.IsNullOrEmpty(LOCATION_RADIUS)) { listRequest.LocationRadius = LOCATION_RADIUS; } listRequest.Q = searchTerm; listRequest.Order = SearchResource.ListRequest.OrderEnum.Date; SearchListResponse searchResponse = listRequest.Execute(); List <SearchResult> results = new List <SearchResult>(); List <string> videosIds = new List <string>(); List <string> channelsWithoutName = new List <string>(); int amountWithoutChannelTitle = 0; int amountWithoutChannelId = 0; int currentCounter = 0; while (searchResponse.Items.Count > 0 && currentCounter < maxItemsQuantity) { foreach (var item in searchResponse.Items) { videosIds.Add(item.Id.VideoId); if (string.IsNullOrEmpty(item.Snippet.ChannelTitle)) { channelsWithoutName.Add(item.Snippet.ChannelId); amountWithoutChannelTitle++; } if (string.IsNullOrEmpty(item.Snippet.ChannelId)) { amountWithoutChannelId++; } } results.AddRange(searchResponse.Items); // Gets oldest element var oldest = searchResponse.Items.OrderBy(i => i.Snippet.PublishedAt).FirstOrDefault(); // Avoids getting the oldest again listRequest.PublishedBefore = oldest.Snippet.PublishedAt.Value.AddSeconds(-1); currentCounter += searchResponse.Items.Count; if (currentCounter < maxItemsQuantity) { // Performs the search searchResponse = listRequest.Execute(); } } // Retrieves videos recording details (location) VideosResource.ListRequest videosRequest = youtube.Videos.List("recordingDetails"); videosRequest.Key = API_KEY; videosRequest.MaxResults = MAX_RESULTS_PER_PAGE; videosRequest.Id = string.Join(",", videosIds.Take(50).ToArray()); VideoListResponse videosResponse = videosRequest.Execute(); // Retrieves channels that don't have name List <string> channelsToRetrieve = channelsWithoutName.Take(50).ToList(); channelsWithoutName = channelsWithoutName.Skip(50).ToList(); while (channelsToRetrieve.Count > 0) { ChannelsResource.ListRequest channelRequest = youtube.Channels.List("snippet"); channelRequest.Key = API_KEY; channelRequest.MaxResults = MAX_RESULTS_PER_PAGE; channelRequest.Id = string.Join(",", channelsToRetrieve.ToArray()); ChannelListResponse channelsResponse = channelRequest.Execute(); channelsToRetrieve = channelsWithoutName.Take(50).ToList(); channelsWithoutName = channelsWithoutName.Skip(50).ToList(); } return(results); }