为啥 Youtube/Google API 不返回超过 5 个回复?

Posted

技术标签:

【中文标题】为啥 Youtube/Google API 不返回超过 5 个回复?【英文标题】:Why does the Youtube/Google API not return more than 5 replies?为什么 Youtube/Google API 不返回超过 5 个回复? 【发布时间】:2020-09-26 21:12:59 【问题描述】:

几天以来,我一直在使用 Youtube 的(Google 的)API 3.0(.NET Google API 库) 一切都很顺利,直到我偶然发现了一个问题。我尝试了很多方法来弄清楚为什么我从结果中得到的信息量很少。

我在下面的代码中尝试的是请求对视频的第一条评论。 然后使用第一个评论 (CommentThread),我试图检索对此评论做出反应的用户的所有回复。

我之前尝试过获取信息,效果很好。我可以加载整个评论部分。除了每个评论线程超过 5 条回复。 (CommentThread 基本上是视频下的评论,有的有回复。)

这是我的代码,我已经修改了很多次,但从它的外观来看。这个应该可以的。

        private static void searchReplies()
        
            int count = 0;
            YouTubeService youtube = new YouTubeService(new BaseClientService.Initializer()  ApiKey = Youtube.API.KEY );
            List<string[]> comments = new List<string[]>();


            var commentThreadsListRequest = youtube.CommentThreads.List("snippet,replies");
            commentThreadsListRequest.VideoId = Youtube.Video.ID;
            commentThreadsListRequest.Order = CommentThreadsResource.ListRequest.OrderEnum.Relevance;
            commentThreadsListRequest.MaxResults = 1;
            var commentThreadsListResult = commentThreadsListRequest.Execute();
            foreach (var CommentThread in commentThreadsListResult.Items)
            
                var commentListRequest = youtube.Comments.List("snippet");
                commentListRequest.Id = CommentThread.Id;
                var commentListResult = commentListRequest.Execute();


                foreach (var Item in commentListResult.Items)
                
                    CommentThreadIDs.Add(Item.Id);
                
                MessageBox.Show("COUNT:" + CommentThread.Replies.Comments.Count);
                foreach (var Reply in CommentThread.Replies.Comments)
                
                    CommentThreadIDs.Add(Reply.Id);
                
            
        

我检查了我的 API 和视频 ID。他们都很好,因为我可以要求很多其他信息。 我已经用几个视频对此进行了测试,但是第一条评论超过 5 条回复的所有视频都无法全部回复。

我得到的结果(带有“计数:”的消息框)(我在CommentThread.Replies.Comments 中得到的回复数量是 5。无论我做什么。使用令牌转到下一页也无法正常工作空。

有谁知道为什么它只返回 5 个 cmets 而不是更多?

【问题讨论】:

commentThreadsListRequest.MaxResults = 1; 这是做什么的? @mjwills 来自我选择的视频的所有评论线程,由于commentThreadsListRequest.Order = CommentThreadsResource.ListRequest.OrderEnum.Relevance;,它只会返回一个结果(即顶部评论) 如果您解决了问题,请等待一天左右,然后单击答案左上角的绿色复选标记。这标志着您的问题在 UI 中已解决。在标题中添加“已解决”并不会将其标记为已解决。 maxResults 参数指定结果集中应返回的最大项目数。您真的应该将其保留为默认值 20 【参考方案1】:

我在某人的帮助下找到了答案。 问题是我将commentThread 的ID 设置为评论ID。 相反,我必须将 commentThread ID 设置为父 ID。

如果有人需要,以下代码将完全替换我的旧代码。

YouTubeService yts = new YouTubeService(new BaseClientService.Initializer()  ApiKey = "12345" );

var commentThreadsListRequest = yts.CommentThreads.List("snippet,replies");
commentThreadsListRequest.VideoId = "uywOqrvxsUo";
commentThreadsListRequest.Order = CommentThreadsResource.ListRequest.OrderEnum.Relevance;
commentThreadsListRequest.MaxResults = 1;
var commentThreadResult = commentThreadsListRequest.Execute().Items.First();

var commentListRequest = yts.Comments.List("snippet");
commentListRequest.Id = commentThreadResult.Id;
commentListRequest.MaxResults = 100;

var commentListResult = commentListRequest.Execute();
var comments = commentListResult.Items.Select(x => x.Snippet.TextOriginal).ToList();

【讨论】:

以上是关于为啥 Youtube/Google API 不返回超过 5 个回复?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Graph API 不返回位置,为啥?

使用 Wikipedia API 获取图像 URL,但有些图像不返回 URL,为啥?

为啥我的 ASP.Net Core Web API 控制器不返回 XML?

为啥我的 API 在使用 JWT 后不再工作?

为啥刷新令牌过期不返回?

php设计api,只能以echo的形式返回给调用者吗?为啥用return就不能返回数据呢?