我正在尝试使用Java程序获取YouTube视频的所有评论。我不能得到它们,因为它有“显示更多”而不是所有的评论。我正在寻找一种方法来获取我可以通过的所有评论或评论页面。我有一个视频ID和东西,只需要评论。
我尝试过all_comments而不是在网址中观看,但它仍未显示所有评论,并重定向再次观看。
我也查看过YouTube api,只能找到如何使用他们的ID获取评论,但我需要从视频ID中获取所有评论。
如果有人知道该怎么做,请告诉我。
我为那些能给我一个好答案的人添加了50个代表奖金。
答案 0 :(得分:5)
您需要获取视频的评论主题列表请求,然后使用上一个响应中的下一页标记向前滚动:
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。
<强>更新强>
你无法得到所有评论的情况也可能由quota limits引起(至少我遇到过):
这不是java,python,js或任何特定于语言的规则。如果您想超过配额,则无法尝试apply for higher quota。不过,我会从控制吞吐量开始。很容易超过 100秒/用户配额。
答案 1 :(得分:3)
试试这个它可以下载我测试的给定视频的所有评论。
https://github.com/egbertbouman/youtube-comment-downloader
{
"text": "+Tony Northrup many thanks for the prompt reply - I'll try that.",
"time": "1 day ago",
"cid": "z13nfbog0ovqyntk322txzjamuensvpch.1455717946638546"
}
输出采用JSON格式:
http