在给定视频 ID 后,如何使用 YouTube Java 客户端 API 获取视频的评论?
How do you get the comments of a video using the YouTube Java Client API when given the video ID?
我正在寻找将视频 ID 作为输入并检索对相应视频的评论的代码。这是 link to the API docs。我试过这段代码
String videoId = "id";
YouTube.Comments.List list2 = youtube.comments().list(Arrays.asList("snippet"));
list2.setId(Arrays.asList(videoId));
list2.setKey(apiKey);
Comment c = list2.execute().getItems().get(0);
但我在最后一行得到一个 IndexOutOfBoundsException
,因为 getItems
返回一个空的 List
。我将 videoId
设置为有效的 YouTube 视频 ID(我已经成功地从中获取视频数据,如观看次数、标题等),我认为这可行,但显然我错了。除非我遗漏了什么,否则我在 Video
class 的文档中找不到任何关于获取评论数据的内容,所以这就是我再次向 SO 寻求帮助的原因。
编辑:根据 stvar 的评论,我尝试将上面代码的第二行更改为
YouTube.CommentThreads.List list2 = youtube.commentThreads().list(Arrays.asList("snippet"));
并且当然将 c
的类型更改为 CommentThread
。
这是我应该使用的 CommentThreads
API ,对吧?无论哪种方式,这也会返回一个空列表...
这是完整的 Java 代码,用于检索任何给定视频的所有评论(顶级评论和回复):
List<Comment> get_comment_replies(
YouTube youtube, String apiKey, String commentId)
{
YouTube.Comments.List request = youtube.comments()
.list(Arrays.asList("id", "snippet"))
.setParentId(commentId)
.setMaxResults(100)
.setKey(apiKey);
List<Comment> replies = new ArrayList<Comment>();
String pageToken = "";
do {
CommentListResponse response = request
.setPageToken(pageToken)
.execute();
replies.addAll(response.getItems());
pageToken = response.getNextPageToken();
} while (pageToken != null);
return replies;
}
List<CommentThread> get_video_comments(
YouTube youtube, String apiKey, String videoId)
{
YouTube.CommentThreads.List request = youtube.commentThreads()
.list(Arrays.asList("id", "snippet", "replies"))
.setVideoId(videoId)
.setMaxResults(100)
.setKey(apiKey);
List<CommentThread> comments = new ArrayList<CommentThread>();
String pageToken = "";
do {
CommentThreadListResponse response = request
.setPageToken(pageToken)
.execute();
for (CommentThread comment : respose.getItems()) {
CommentThreadReplies replies = comment.getReplies();
if (replies != null &&
replies.getComments().size() !=
comment.getSnippet().getTotalReplyCount())
replies.setComments(get_comment_replies(
youtube, apiKey, comment.getId()));
}
comments.addAll(response.getItems());
pageToken = response.getNextPageToken();
} while (pageToken != null);
return comments;
}
您必须调用 get_video_comments
,将您感兴趣的视频的 ID 传递给它。返回的列表包含该视频的所有顶级评论;每个顶级评论都有其 replies
属性,其中包含所有关联的评论回复。
我正在寻找将视频 ID 作为输入并检索对相应视频的评论的代码。这是 link to the API docs。我试过这段代码
String videoId = "id";
YouTube.Comments.List list2 = youtube.comments().list(Arrays.asList("snippet"));
list2.setId(Arrays.asList(videoId));
list2.setKey(apiKey);
Comment c = list2.execute().getItems().get(0);
但我在最后一行得到一个 IndexOutOfBoundsException
,因为 getItems
返回一个空的 List
。我将 videoId
设置为有效的 YouTube 视频 ID(我已经成功地从中获取视频数据,如观看次数、标题等),我认为这可行,但显然我错了。除非我遗漏了什么,否则我在 Video
class 的文档中找不到任何关于获取评论数据的内容,所以这就是我再次向 SO 寻求帮助的原因。
编辑:根据 stvar 的评论,我尝试将上面代码的第二行更改为
YouTube.CommentThreads.List list2 = youtube.commentThreads().list(Arrays.asList("snippet"));
并且当然将 c
的类型更改为 CommentThread
。
这是我应该使用的 CommentThreads
API ,对吧?无论哪种方式,这也会返回一个空列表...
这是完整的 Java 代码,用于检索任何给定视频的所有评论(顶级评论和回复):
List<Comment> get_comment_replies(
YouTube youtube, String apiKey, String commentId)
{
YouTube.Comments.List request = youtube.comments()
.list(Arrays.asList("id", "snippet"))
.setParentId(commentId)
.setMaxResults(100)
.setKey(apiKey);
List<Comment> replies = new ArrayList<Comment>();
String pageToken = "";
do {
CommentListResponse response = request
.setPageToken(pageToken)
.execute();
replies.addAll(response.getItems());
pageToken = response.getNextPageToken();
} while (pageToken != null);
return replies;
}
List<CommentThread> get_video_comments(
YouTube youtube, String apiKey, String videoId)
{
YouTube.CommentThreads.List request = youtube.commentThreads()
.list(Arrays.asList("id", "snippet", "replies"))
.setVideoId(videoId)
.setMaxResults(100)
.setKey(apiKey);
List<CommentThread> comments = new ArrayList<CommentThread>();
String pageToken = "";
do {
CommentThreadListResponse response = request
.setPageToken(pageToken)
.execute();
for (CommentThread comment : respose.getItems()) {
CommentThreadReplies replies = comment.getReplies();
if (replies != null &&
replies.getComments().size() !=
comment.getSnippet().getTotalReplyCount())
replies.setComments(get_comment_replies(
youtube, apiKey, comment.getId()));
}
comments.addAll(response.getItems());
pageToken = response.getNextPageToken();
} while (pageToken != null);
return comments;
}
您必须调用 get_video_comments
,将您感兴趣的视频的 ID 传递给它。返回的列表包含该视频的所有顶级评论;每个顶级评论都有其 replies
属性,其中包含所有关联的评论回复。