查看 YouTube 视频的所有评论

Posted

技术标签:

【中文标题】查看 YouTube 视频的所有评论【英文标题】:View all comments on a YouTube video 【发布时间】:2016-05-28 05:39:42 【问题描述】:

我正在尝试使用 Java 程序获取 YouTube 视频中的所有 cmets。我无法得到它们,因为它有“显示更多”而不是所有的 cmets。我正在寻找一种方法来获取我可以通过的所有 cmets 或 cmets 页面。我有视频 ID 和东西,只需要 cmets。

我尝试了 all_cmets 而不是在 URL 中观看,但它仍然没有显示所有 cmets 并重定向到再次观看。

我还查看了 YouTube api,只能找到如何使用他们的 id 获取 cmets,但我需要从视频 id 获取所有 cmets。

如果有人知道怎么做,请告诉我。

我已经增加了 50 代表的赏金,谁可以给我一个好的答案。

【问题讨论】:

有趣的我也期待答案 嗯。如果 6 小时内没有得到答复,我将悬赏。 我不介意,只要有人回答,我关心的就是。 赏金现已添加! developers.google.com/youtube/v3/docs/comments/list 检查总页数。编写循环并进行增量调用 【参考方案1】:

您需要为您的视频获取评论线程列表请求,然后使用上次响应中的下一页令牌向前滚动:

private static int counter = 0;
private static YouTube youtube;

public static void main(String[] args) throws Exception 
    // For Auth details consider:
    // https://github.com/youtube/api-samples/blob/master/java/src/main/java/com/google/api/services/samples/youtube/cmdline/Auth.java
    // Also don't forget secrets https://github.com/youtube/api-samples/blob/master/java/src/main/resources/client_secrets.json
    List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.force-ssl");
    Credential credential = Auth.authorize(scopes, "commentthreads");
    youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).build();

    String videoId = "video_id";

    // Get video comments threads
    CommentThreadListResponse commentsPage = prepareListRequest(videoId).execute();

    while (true) 
        handleCommentsThreads(commentsPage.getItems());

        String nextPageToken = commentsPage.getNextPageToken();
        if (nextPageToken == null)
            break;

        // Get next page of video comments threads
        commentsPage = prepareListRequest(videoId).setPageToken(nextPageToken).execute();
    

    System.out.println("Total: " + counter);


private static YouTube.CommentThreads.List prepareListRequest(String videoId) throws Exception 

    return youtube.commentThreads()
                  .list("snippet,replies")
                  .setVideoId(videoId)
                  .setMaxResults(100L)
                  .setModerationStatus("published")
                  .setTextFormat("plainText");


private static void handleCommentsThreads(List<CommentThread> commentThreads) 

    for (CommentThread commentThread : commentThreads) 
        List<Comment> comments = Lists.newArrayList();
        comments.add(commentThread.getSnippet().getTopLevelComment());

        CommentThreadReplies replies = commentThread.getReplies();
        if (replies != null)
            comments.addAll(replies.getComments());

        System.out.println("Found " + comments.size() + " comments.");

        // Do your comments logic here
        counter += comments.size();
    

如果您需要示例骨架项目,请考虑 api-samples。


更新

无法获得所有cmets的情况也可能是quota limits造成的(至少我遇到过):

单位/ 50,000,000 单位/100 秒/用户 300,000

这不是 java、python、js 或任何语言特定的规则。如果你想超过配额,你不能尝试apply for higher quota。不过,我将从控制您的吞吐量开始。超过 100 秒/用户 配额非常容易。

【讨论】:

使用这种方法可以抓取的 cmets 数量没有限制吗?我怀疑 您可以使用“.setMaxResults()”限制页面大小。这是他们 api 的一部分,所以你也可以在 python 客户端中使用它。 我的意思是如果一个视频有 100 万个 cmets,这可以全部下载吗?我看到某处 api 不支持这个 它使用与您相同的 api,但来自 java。我认为这些限制是由配额引起的。我会把它添加到我的答案中。 谢谢,这正是我所需要的,谢谢,但要详细说明限制以及如何申请更高的限制。非常感激。你得到了赏金:)【参考方案2】:

试试这个,它可以下载我测试过的给定视频的所有 cmets。

https://github.com/egbertbouman/youtube-comment-downloader

python downloader.py --youtubeid YcZkCnPs45s --output OUT 
Downloading Youtube comments for video: YcZkCnPs45s 
Downloaded 1170 comment(s) 
Done!

输出为 JSON 格式:


  "text": "+Tony Northrup many thanks for the prompt reply - I'll try that.",
  "time": "1 day ago",
  "cid": "z13nfbog0ovqyntk322txzjamuensvpch.1455717946638546"

【讨论】:

是的,一个工作!而且也没有 YouTube API 凭据和配额限制 :-) 虽然我得到这样的德语元值有点有趣:"text": "Mega Madness\ufeff", "time": "vor 1 Woche" , "作者": "Jessica Fischer", "cid": "z135hboyasa2j1rgy04cgdrwxmunhdvajqg0k" 但是随着要下载的 cmets 数量的增加,这个脚本变得非常慢。 YT API 更快。 @samsamara 如果可能的话,我希望你能用java重写它,或者给我一些建议,以便我用java重新创建它。 @VũĐạt 我不是那个脚本的作者。随着 cmets 数量的增加,它变得超级慢。你有什么理由不能使用 YT API?我已经求助于使用 YT API,因为这个脚本太慢了

以上是关于查看 YouTube 视频的所有评论的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 youtube 视频的评论

如何获得特定的 YouTube 评论?

使用 YouTube API 从带有 JSON 提要的视频中获取所有评论

YouTube 数据 API v3 评论列表

如何抓取 YouTube 视频评论?

Youtube视频评论检索