我正在使用 YouTube API 来获取带有参数化查询的视频的评论,如下所示:
http://gdata.youtube.com/feeds/api/videos/theVideoID/comments?v=2&alt=json
这样做的问题是每个查询可以获得的最大结果数是 50。我想获得每条评论。我目前正在使用start-index
andmax-results
参数来解决这个问题。一次进行 50 次迭代时我遇到了一些麻烦,因为有时迭代的起始索引会高于评论数,而我无法弄清楚,所以我只是尝试一次解决一个。一次做 50 个可能会更好,所以让我知道这是否是更好的解决方案。目前:
我正在使用 PHP 来获取评论数量:
<?php
$video_ID = 'gT2HYxOdxUk';
$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/{$video_ID}?v=2&alt=json");
$JSON_Data = json_decode($JSON);
$commentCount = $JSON_Data->{'entry'}->{'gd$comments'}->{'gd$feedLink'}->{'countHint'};
?>
然后我调用一个 JavaScript/jQuery 函数将所有注释加载到一个数组中。为了进行测试,它将它们打印到一个 div 中。对于初学者,这是我调用该函数的方式:
<body onLoad="loadComments('<?php echo $commentCount; ?>', '<?php echo $video_ID; ?>')">
接下来,实际功能:
function loadComments(count, videoID) {
for(i = 1; i <= count; i++) {
$.ajax({
url: "http://gdata.youtube.com/feeds/api/videos/" + videoID + "/comments?v=2&alt=json&max-results=1" + "&start-index=" + i,
dataType: "jsonp",
success: function(data){
$.each(data.feed.entry, function(key, val) {
comments.push(val.content.$t);
$('#commentOutput').append(val.content.$t + '<br>'); //Just for testing purposes.
});
}
});
}
}
问题是它真的很不确定。当我count
像这样使用变量作为 for 循环的终止部分时,它总是变得像,例如,211 条评论中有 45 条。如果我手动输入 211,它将达到 195 左右。如果我输入一个较低的数字,比如 1-15,它几乎总是会得到所有这些。20+,永远不对。
我需要弄清楚如何通过利用max-results
和start-index
参数来始终如一地获得给定视频的所有评论。谢谢!