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

Javascript 使用YouTube API从带有JSON提要的视频中获取所有评论,javascript,json,youtube,youtube-api,Javascript,Json,Youtube,Youtube Api,我使用YouTube API获取视频的评论,并使用参数化查询,如下所示: http://gdata.youtube.com/feeds/api/videos/theVideoID/comments?v=2&alt=json 问题是,每个查询最多可以得到50个结果。我想得到每一条评论。我目前正在使用start index和max results参数来解决这个问题。我一次迭代50次有点困难,因为有时迭代的开始索引会高于评论数,我无法理解,所以我只是试着一次计算一个。一次做50次可能更好,所以请告诉我

我使用YouTube API获取视频的评论,并使用参数化查询,如下所示:

http://gdata.youtube.com/feeds/api/videos/theVideoID/comments?v=2&alt=json

问题是,每个查询最多可以得到50个结果。我想得到每一条评论。我目前正在使用
start index
max 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.
                });
            }

        });
    }
}

我刚刚遇到了这个问题,我注意到有人问这个问题已经很久了。但既然还没有人回答,我想我应该这么做

理想情况下,您应该使用Youtube的PHP API(使用Zend_GData)并在PHP中使用以下代码:

<?php

    require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');

$yt = new Zend_Gdata_YouTube();
$yt->setMajorProtocolVersion(2);
$video = parse_url("http://www.youtube.com/watch?v=K-ob8sr9ZX0");
parse_str(urldecode($video['query']), $query);
$videoId = $query['v'];

$commentFeed = $yt->retrieveAllEntriesForFeed($yt->getVideoCommentFeed($videoId));

foreach ($commentFeed as $commentEntry) {
    echo "Full text: " . $commentEntry->content->text . "<br />";
}

使用api的'orderby'参数并将其设置为'published'以检索几乎所有的注释

https://gdata.youtube.com/feeds/api/videos/<videoID>/comments?max-results=50&alt=json&orderby=published
https://gdata.youtube.com/feeds/api/videos//comments?max-结果=50&alt=json&orderby=published
您仍然可以使用start index参数循环浏览注释,但这不是一个好主意

从文件中: API响应使用标记来标识提要中上一页和/或下一页条目的分页链接。为了避免分页问题,我们建议您使用这些链接使用户能够链接到API结果的不同页面

如果提要包含前一页的结果,则API响应将包含一个rel属性值为previous的标记。 如果提要包含下一页结果,则API响应将包含一个rel属性值为next的标记


这样就不会得到任何嵌套提要。要获得下一组结果,只需使用上一页结果中给出的链接!希望这有帮助。这对我有用

我还没有测试过这个,但我想我可能发现它很有用。正如您所说,我使用
max results
start index
参数进行了一个小循环,效果很好。这花了一些时间,我不得不在一定程度上切断它,因为如果它尝试循环太多次,会使我的浏览器崩溃。我将把这个作为答案,因为对于任何遇到这个问题的人来说,都是非常即时的。如果你发布了解决方案,社区将会受益匪浅,请考虑回馈社区。谢谢因为我不清楚,这段代码是否会返回所有注释(甚至一千条)?谢谢