ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 使用YouTube API从带有JSON Feed的视频中获取所有评论

2019-05-30 09:23:24  阅读:192  来源: 互联网

标签:json javascript youtube youtube-api


我正在使用YouTube API来获取带有参数化查询的视频评论,如下所示:

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

这个问题是每个查询可以获得的最大结果数是50.我想得到每条评论.我目前正在使用start-index和max-results参数来解决这个问题.我一次做50次迭代时遇到了一些麻烦,因为有时候迭代会有一个高于注释数量的start-index而且我无法弄清楚,所以我只想尝试一次一个.最好一次做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 onl oad="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参数来持续获取给定视频的所有注释.谢谢!

解决方法:

我刚刚遇到这个问题而且我注意到这个问题已经过了很长一段时间.但既然没有人回答,我想我应该这样做.

理想情况下,使用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,而不是回显所有注释.

它不使用max-results或start-index,但没有它们就可以很好地完成工作.

标签:json,javascript,youtube,youtube-api
来源: https://codeday.me/bug/20190530/1182945.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有