Beispiel #1
0
        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));
        }
Beispiel #2
0
        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;
                }
            }
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        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");
 }
Beispiel #7
0
 private void GetChannelsCallback(ChannelListResponse clr)
 {
     if (clr.ok)
     {
         Console.WriteLine("Got channels.");
     }
     else
     {
         Console.WriteLine(clr.error);
     }
 }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        /// <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);
        }
Beispiel #11
0
        // 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()));
            }
        }
Beispiel #13
0
        public ChannelListResponse GetChannelList()
        {
            ChannelListResponse list = null;

            Connect();
            Slack.GetChannelList((listResponse) =>
            {
                list = listResponse;
                ClientReady.Set();
            });
            ClientReady.Wait();
            ClientReady.Reset();
            return(list);
        }
Beispiel #14
0
 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);
        }
Beispiel #16
0
        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();
        }
Beispiel #17
0
        /// <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;
            }));
        }
Beispiel #18
0
        /// <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;
            }));
        }
Beispiel #19
0
        /// <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);
        }
Beispiel #20
0
        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);
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        /// <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);
            }
        }
Beispiel #23
0
        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;
            }
        }
Beispiel #25
0
 protected abstract Task OnChannelStatisticsReceived(string context, ChannelListResponse channelData);
Beispiel #26
0
        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;
            }
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
 protected override async Task OnChannelStatisticsReceived(string context, ChannelListResponse channelData)
 {
     var subscriberCount = channelData.Items[0].Statistics.ViewCount;
     await Manager.SetTitleAsync(context, subscriberCount.ToString());
 }
Beispiel #29
0
        /// <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);
        }
Beispiel #30
0
        /// <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);
        }