使用YouTube API从与JSON提要视频所有评论(Using YouTube API to g

2019-06-25 07:26发布

我使用YouTube API获得评论与类似下面的参数化查询的视频:

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

这里的问题是,你可以每次查询得到的结果的最大数量为50。我想每一个评论。 我目前使用的start-indexmax-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变量的像这样循环端接部分,它总是得到像,例如,45个的211个注释。 如果我手动输入211,它会去各地的195如果我把在低数量,像1-15,它几乎总是让他们所有。 20+,这是从来没有的权利。

我需要弄清楚如何得到这个通过采取优势持续得到一个给定的视频的所有意见max-resultsstart-index参数。 谢谢!

Answer 1:

我只是碰到这个问题,我注意到,它一直当这个被要求相当长的一段时间。 但是,因为没有人回答它,我想我应该做的。

你应该做的理想是,使用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 />";
}

这里的关键要素是retrieveAllEntriesForFeed()方法。

取而代之的回声荷兰国际集团所有的评论,你可以构造一个JSON,并将其发送回等待的JavaScript。

它不使用最大结果 或开始索引 ,但做这项工作良好,没有他们。



Answer 2:

使用API​​的“排序依据”参数,并将其设置为“已发布”检索几乎所有的评论。

https://gdata.youtube.com/feeds/api/videos/<videoID>/comments?max-results=50&alt=json&orderby=published

您还可以通过评论使用start-index参数循环,但它是不是一个好主意。

从文档:API响应使用标签来识别条目的原有和/或下一页在饲料分页链接。 为了避免分页的问题,我们建议您使用这些链接以使用户链接到API不同的结果页。

如果饲料中含有结果的前一页,API响应将包含以前的rel属性值的标签。 如果饲料中含有结果的翻页,API响应将包含未来的rel属性值的标签。

https://developers.google.com/youtube/2.0/reference#Paging_through_Results

这样你不会得到任何嵌套的饲料。 要获得下一组结果简单地使用结果的前页上给出的链接! 希望这可以帮助。 它为我工作!



文章来源: Using YouTube API to get all comments from a video with the JSON feed