为什么 Youtube/Google API 没有 return 超过 5 个回复?
Why does the Youtube/Google API not return more than 5 replies?
这几天我一直在使用 Youtube 的 (Google's) API 3.0 (.NET Google API 库)
一切都很顺利,直到我偶然发现了一个问题。我尝试了很多方法来弄清楚为什么我从结果中得到的信息很少。
我在下面的代码中尝试的是请求对视频的第一条评论。
然后使用第一条评论 (CommentThread),我试图检索对此评论做出反应的所有用户回复。
我之前尝试过获取信息,效果很好。我可以加载整个评论部分。每个 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 个回复的视频,都无法全部回复。
我得到的结果(带有 "Count:" 的消息框)(我在 CommentThread.Replies.Comments
中得到的回复数量是 5。无论我做什么。使用令牌转到下一页不会要么在它为空时工作。
有谁知道为什么只有 returns 5 条评论而不是更多?
我在某人的帮助下找到了答案。
问题是我将 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's) API 3.0 (.NET Google API 库) 一切都很顺利,直到我偶然发现了一个问题。我尝试了很多方法来弄清楚为什么我从结果中得到的信息很少。
我在下面的代码中尝试的是请求对视频的第一条评论。 然后使用第一条评论 (CommentThread),我试图检索对此评论做出反应的所有用户回复。
我之前尝试过获取信息,效果很好。我可以加载整个评论部分。每个 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 个回复的视频,都无法全部回复。
我得到的结果(带有 "Count:" 的消息框)(我在 CommentThread.Replies.Comments
中得到的回复数量是 5。无论我做什么。使用令牌转到下一页不会要么在它为空时工作。
有谁知道为什么只有 returns 5 条评论而不是更多?
我在某人的帮助下找到了答案。 问题是我将 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();