我正在尝试创建一个可以从youtube视频中检索所有评论的小应用。我正在使用Youtube Data API v3来尝试检索所有评论,但由于某种原因,它只给出了视频中的一小部分评论。
正在测试的视频的ID是ozpqv1mYLcE
这是我用来直接计算评论数量的代码。这使用了谷歌提供的示例代码中的Auth包。
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.services.samples.youtube.cmdline.Auth;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.CommentThread;
import com.google.api.services.youtube.model.CommentThreadListResponse;
import com.google.common.collect.Lists;
import java.util.List;
public class YoutubeTest {
public static void main(String args[]){
List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.force-ssl");
try{
Credential credential = Auth.authorize(scopes, "commentthreads");
YouTube youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential)
.setApplicationName("YoutubeTest").build();
String videoID = "ozpqv1mYLcE";
int count = 0;
String nextPage = null;
CommentThreadListResponse response = youtube.commentThreads().list("snippet,replies")
.setVideoId(videoID).setTextFormat("plainText").setMaxResults(100L).execute();
nextPage = response.getNextPageToken();
count += response.getItems().size();
for(CommentThread t : response.getItems()){
if(t.getReplies() != null)
count += t.getReplies().size();
}
int i = 0;
while(nextPage != null){
response = youtube.commentThreads().list("snippet,replies")
.setVideoId(videoID).setTextFormat("plainText").setMaxResults(100L).setPageToken(nextPage).execute();
nextPage = response.getNextPageToken();
count += response.getItems().size();
for(CommentThread t : response.getItems()){
if(t.getReplies() != null)
count += t.getReplies().size();
}
System.out.println(i++);
}
System.out.println("Total Number of Comments: " + count);
} catch (Exception e){
e.printStackTrace();
}
}
}
运行它的输出是:
0
1
Total Number of Comments: 313
然而,在发布此帖子时,该主题有5049条评论(可以在这里看到:https://www.youtube.com/all_comments?v=ozpqv1mYLcE)
我相信我的代码在我的代码中是正确的,并且计算来自线程的回复。这是youtube api的限制吗?或者我做错了什么我不知道的?非常感谢任何帮助解决这个问题