当给定视频id时,如何使用youtube java客户端api获取视频的评论?

ajsxfq5m  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(283)

我期待着写代码,采取一个视频id作为输入,并检索相应的视频评论。这里是api文档的链接。我试过这个密码

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 关于获取评论数据,这就是为什么我再次向so寻求帮助。
编辑:根据stvar的注解,我尝试将上面代码的第二行改为

YouTube.CommentThreads.List list2 = youtube.commentThreads().list(Arrays.asList("snippet"));

当然也改变了 cCommentThread . 它是 CommentThreads 我应该用的api,对吗?不管怎样,这也会返回一个空列表。。。

hyrbngr7

hyrbngr71#

以下是检索任何给定视频的所有注解(顶级和回复)的完整java代码:

List<Comment> get_comment_replies(YouTube youtube, String commentId)
{
    YouTube.Comments.List request = youtube.comments()
        .list(Arrays.asList("id", "snippet"))
        .setParentId(commentId)
        .setMaxResults(50);
    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 videoId)
{
    YouTube.CommentThreads.List request = youtube.commentThreads()
        .list(Arrays.asList("id", "snippet", "replies"))
        .setVideoId(videoId)
        .setMaxResults(50);
    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, comment.getId()));
        }

        comments.addAll(response.getItems());

        pageToken = response.getNextPageToken();
    } while (pageToken != null);

    return comments;
}

你必须调用 get_video_comments ,将您感兴趣的视频的id传递给它。返回的列表包含该视频的所有顶级评论;每个顶级评论都有其独特的功能 replies 属性,该属性包含所有关联的注解答复。

相关问题