Example #1
0
        /// <summary>
        /// 返信コメントをとる
        /// </summary>
        /// <param name="param_videoId"></param>
        /// <param name="youtubeService"></param>
        /// <param name="nextPageToken"></param>
        /// <returns></returns>
        public async Task ReplyCommentSearch(string param_videoId, YouTubeService youtubeService, string parentId, List <LiveChatModel> instantList)
        {
            string nextPageToken = "";

            // コメントを入れるmodelリスト
            LiveChatModelList commentListModel = new LiveChatModelList();

            // 一時的なリスト
            List <Google.Apis.YouTube.v3.Data.Comment> itemList = new List <Google.Apis.YouTube.v3.Data.Comment>();

            // 動画コメントをリクエストする
            var request = youtubeService.Comments.List("snippet");

            while (true)
            {
                request.TextFormat = CommentsResource.ListRequest.TextFormatEnum.PlainText;
                request.MaxResults = 100;
                request.ParentId   = parentId;
                request.PageToken  = nextPageToken;

                var response = await request.ExecuteAsync();

                itemList.AddRange(response.Items.ToList());

                nextPageToken = response.NextPageToken;

                if (nextPageToken == null)
                {
                    itemList.Reverse();

                    foreach (var item in itemList)
                    {
                        LiveChatModel model = new LiveChatModel();

                        model.DspName         = item.Snippet.AuthorDisplayName;
                        model.DspMessage      = item.Snippet.TextDisplay;
                        model.ChannelUrl      = item.Snippet.AuthorChannelUrl;
                        model.ProfileImageUrl = item.Snippet.AuthorProfileImageUrl;
                        model.LikeCount       = item.Snippet.LikeCount;
                        model.Id       = item.Id;
                        model.ParentId = parentId;
                        model.IsChild  = true;
                        string a = item.Snippet.ViewerRating;
                        model.CommentDateRaw = DateTime.Parse(item.Snippet.PublishedAtRaw);
                        model.ChatDateTime   = item.Snippet.PublishedAt;

                        instantList.Add(model);
                    }

                    break;
                }
            }
        }
        /// <summary>
        /// 動画コメントを取得する
        /// </summary>
        /// <param name="liveChatId"></param>
        /// <param name="youtubeService"></param>
        /// <param name="nextPageToken"></param>
        /// <returns></returns>
        static public async Task <LiveChatModelList> GetLiveChatMessage(string liveChatId, YouTubeService youtubeService, string nextPageToken)
        {
            List <string> liveMessagesList = new List <string>();

            var liveChatRequest = youtubeService.LiveChatMessages.List(liveChatId, "snippet,authorDetails");

            liveChatRequest.PageToken = nextPageToken;

            Google.Apis.YouTube.v3.Data.LiveChatMessageListResponse liveChatResponse = liveChatRequest.Execute();


            LiveChatModelList list = new LiveChatModelList();

            List <LiveChatModel> instantList = new List <LiveChatModel>();

            // ループ処理をして文字列型リストに格納
            foreach (var liveChat in liveChatResponse.Items)
            {
                //Console.WriteLine($"{liveChat.Snippet.DisplayMessage},{liveChat.AuthorDetails.DisplayName}");
                try
                {
                    LiveChatModel lcInfo = new LiveChatModel();
                    lcInfo.DspMessage = liveChat.Snippet.DisplayMessage;
                    lcInfo.DspName    = liveChat.AuthorDetails.DisplayName;

                    instantList.Add(lcInfo);
                }
                catch (Exception ext)
                {
                    // 例外処理
                    string errMessage = ext.Message;
                    Console.Write(errMessage);
                }
            }
            list.ChatList = instantList;
            await Task.Delay((int)liveChatResponse.PollingIntervalMillis);

            return(list);
        }
Example #3
0
        /// <summary>
        /// Youtubeの投稿動画コメを取得する
        /// </summary>
        /// <returns></returns>
        public async Task <LiveChatModelList> CommentSearch(string param_videoId, YouTubeService youtubeService, string nextPageToken)
        {
            // IDのあるないを初期化
            isExistChannelId = false;

            // コメントを入れるmodelリスト
            LiveChatModelList commentListModel = new LiveChatModelList();

            //// 返信コメントを入れるmodelリスト
            LiveChatModelList replyCommentListModel = new LiveChatModelList();

            //// 返信コメント一時退避リスト
            List <LiveChatModel> instantReply = new List <LiveChatModel>();

            // 一時的なリスト
            List <LiveChatModel> instantList = new List <LiveChatModel>();

            // 動画コメントをリクエストする
            var request = youtubeService.CommentThreads.List("snippet");

            // コメント数をカウントする
            while (true)
            {
                request.VideoId    = param_videoId;
                request.TextFormat = CommentThreadsResource.ListRequest.TextFormatEnum.PlainText;
                request.MaxResults = 100;
                request.PageToken  = nextPageToken;

                var response = await request.ExecuteAsync();

                // レスポンスがない場合はここからは処理通らない
                isExistChannelId = true;

                foreach (var item in response.Items)
                {
                    LiveChatModel model = new LiveChatModel();

                    model.DspName         = item.Snippet.TopLevelComment.Snippet.AuthorDisplayName;
                    model.DspMessage      = item.Snippet.TopLevelComment.Snippet.TextDisplay;
                    model.ChannelUrl      = item.Snippet.TopLevelComment.Snippet.AuthorChannelUrl;
                    model.ProfileImageUrl = item.Snippet.TopLevelComment.Snippet.AuthorProfileImageUrl;
                    model.LikeCount       = item.Snippet.TopLevelComment.Snippet.LikeCount;
                    model.Id             = item.Snippet.TopLevelComment.Id;
                    model.IsChild        = false;
                    model.CommentDateRaw = DateTime.Parse(item.Snippet.TopLevelComment.Snippet.PublishedAtRaw);
                    model.ChatDateTime   = item.Snippet.TopLevelComment.Snippet.PublishedAt;

                    instantList.Add(model);

                    if (item.Snippet.TotalReplyCount > 0)
                    {
                        await ReplyCommentSearch(param_videoId, youtubeService, model.Id, instantList);
                    }
                }
                commentListModel.ChatList = instantList;

                nextPageToken = response.NextPageToken;

                if (nextPageToken == null)
                {
                    break;
                }
            }

            return(commentListModel);
        }
Example #4
0
        /// <summary>
        /// 動画コメントを取得する
        /// </summary>
        /// <param name="liveChatId"></param>
        /// <param name="youtubeService"></param>
        /// <param name="nextPageToken"></param>
        /// <returns></returns>
        static public async Task <LiveChatModelList> GetLiveChatMessage(string liveChatId, YouTubeService youtubeService, string nextPageToken_, string quantity)
        {
            // 結果を入れるリスト
            LiveChatModelList list = new LiveChatModelList();

            // 一時的なリスト
            List <LiveChatModel> instantList = new List <LiveChatModel>();

            // レスポンスリスト
            Google.Apis.YouTube.v3.Data.LiveChatMessageListResponse liveChatResponse;

            // LiveChatMessageトークンを取得する
            var liveChatRequest = youtubeService.LiveChatMessages.List(liveChatId, "snippet,authorDetails");

            // IDのリクエストがとれなかったら処理を終了する
            if (liveChatRequest.LiveChatId == null)
            {
                // チャンネルIDはなし
                isExistChannelId = false;

                return(list);
            }
            else
            {
                isExistChannelId = true;
            }

            maxCountCreatePageToken = int.Parse(quantity) / 75;

            // 最終ページトークンまで再帰的な取得をする
            for (int i = 0; i < maxCountCreatePageToken; i++)
            {
                // 次回ページトークン
                liveChatRequest.PageToken = nextPageToken_;

                // リクエストする
                liveChatResponse = liveChatRequest.Execute();

                if (liveChatResponse.Items.Count == 0)
                {
                    break;
                }

                // 再帰的にチャットを取得
                foreach (var liveChat in liveChatResponse.Items)
                {
                    try
                    {
                        LiveChatModel lcInfo = new LiveChatModel();
                        lcInfo.DspMessage      = liveChat.Snippet.DisplayMessage;
                        lcInfo.DspName         = liveChat.AuthorDetails.DisplayName;
                        lcInfo.ChannelUrl      = liveChat.AuthorDetails.ChannelUrl;
                        lcInfo.ChatDateTime    = liveChat.Snippet.PublishedAt;
                        lcInfo.ProfileImageUrl = liveChat.AuthorDetails.ProfileImageUrl;

                        instantList.Add(lcInfo);
                    }
                    catch (Exception ext)
                    {
                        string errMessage = ext.Message;
                        Console.Write(errMessage);
                    }
                }

                list.ChatList = instantList;

                // YouTubeのサービスから反応が返ってくるまで待ち
                await Task.Delay((int)liveChatResponse.PollingIntervalMillis);

                // ページトークンを確保する(初回はnull)
                nextPageToken_ = liveChatResponse.NextPageToken;
            }
            return(list);
        }