【问题标题】:Get Youtube comments with jQuery使用 jQuery 获取 Youtube 评论
【发布时间】:2012-01-31 11:19:56
【问题描述】:

我有一个客户项目,它将使用 YouTube 评论流作为一种“聊天”。我正在使用带有 Zend 框架的 GData API 对 YouTube 进行经过身份验证的调用。我正在寻找一种运行脚本的方法,该脚本将使用刷新按钮提取评论流,以便用户不必刷新页面即可查看他们的评论或出现的任何新 cmets。我相信这可以用 JQuery 来完成,但是经过一番搜索后,我还没有真正找到一个很好的解释。以下是我的代码的一些简短片段,让您对我正在查看的内容有所了解:

$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
$_SESSION['yt'] = serialize($yt);

/***************** Adds a comment if applicable *****************/

if(isset($_POST['btn_submit']))
{
$videoEntry = $yt->getVideoEntry('QQoFLrZ5C3M');

$newComment = $yt->newCommentEntry();
$newComment->content = $yt->newContent()->setText($_POST['comment']);

// post the comment to the comments feed URL for the video
$commentFeedPostUrl = $videoEntry->getVideoCommentFeedUrl();
$updatedVideoEntry = $yt->insertEntry($newComment, $commentFeedPostUrl,
'Zend_Gdata_YouTube_CommentEntry');
}

                        /****************************************************************/


<div id="coments">

$commentFeed = $yt->getVideoCommentFeed('QQoFLrZ5C3M');

echo '<div id="refresh"><a href="#" style="margin-right: 15px; border: 0;"><img src="../common/img/refresh.png" alt="refresh" border="0" /></a></div>';

foreach ($commentFeed as $commentEntry) {
echo '<div class="comment">';
echo  '<a href="http://youtube.com/user/' . utf8_decode(utf8_encode($commentEntry->author[0]->name->text)) . '" target="_blank" class="youtube_user">' . utf8_decode(utf8_encode($commentEntry->author[0]->name->text)) . '</a><br />';

echo  '<span style="font-size: 14px;">' . utf8_decode(utf8_encode($commentEntry->content->text)) . '</span><br />';

// Format time
$timeAgoObject = new convertToAgo;
$ts = strtotime($commentEntry->updated->text);
$timestamp = ($timeAgoObject -> makeAgo($ts)); // Then convert to ago time

echo  '<div class="yt_timestamp">' . $timestamp  . '</div>';
echo '</div>';
}
?>
</div>

请注意,youtube 类并不总是新的(因此序列化为会话变量)我只是去掉了 if 语句以便于阅读。

【问题讨论】:

  • 请更加努力地解释您要解决的确切问题。例如。修正标题并解释问题与代码示例之间的关系。这将使问题及其答案对未来的读者更有用。

标签: php jquery ajax zend-framework youtube-api


【解决方案1】:

这是基本的想法:

  1. 向用户展示评论表单
  2. 使用 jQuery 挂钩表单的提交事件。 (docs)
  3. 通过 AJAX 将表单提交到您的后端脚本。 (docs)
  4. 照常将记录插入数据库。
  5. 为新评论回显 HTML。
  6. 请求完成后,jQuery 将返回您回显的任何 HTML。剩下的就是在您的评论列表中添加/添加新的 HTML。 (docs)

【讨论】:

  • 非常感谢您提供的文档,这对您有很大帮助。
【解决方案2】:

我创建了一个示例供您使用。它使用了 Youtube JSON API,这里有些详细说明:http://code.google.com/apis/youtube/2.0/reference.html#Comments_Feeds

在 XML 中,我使用的是 JSON。

要使用 JSON 获取视频的“数据”,请使用 http://gdata.youtube.com/feeds/api/videos/YOURVIDEOID/comments

示例: http://jsfiddle.net/A32H2/2/

//"The Dark Knight Rises trailer, sweded" comments
//http://www.youtube.com/watch?v=KrmEyPkgDf8

    <div id="comments"></div>

    $.ajax({
        url: "http://gdata.youtube.com/feeds/api/videos/KrmEyPkgDf8/comments?v=2&alt=json&max-results=50",  
        //gets the max first 50 results.  To get the 'next' 50, use &start-index=50
        dataType: "jsonp",
        success: function(data){
            $.each(data.feed.entry, function(key, val) {

                comment = $("<div class='comment'></div>");

                author = $("<a target='_blank' class='youtube_user'></a>");
                author.attr("href", "http://youtube.com/user/" + val.author[0].name.$t);
                author.html(val.author[0].name.$t);

                content = $("<div style='font-size: 14px;' class='content'></div>");
                content.html(val.content.$t);

                comment.append(author).append(content);
                $('#comments').append(comment);
            });
        }
    });

另外,我建议您将问题的标题更改为更具描述性的名称,例如“使用 jQuery 获取 Youtube cmets”

【讨论】:

  • 嗯,关于更改问题标题,我也计划使用 JQuery 发布 cmets,我希望如果阅读我的问题的人不熟悉 GData API,他们也许仍然可以用 JQuery 为我指明正确的方向。感谢您的帮助!
  • 另外 - 请原谅我在这里的无知,但我怎么能将它绑定到刷新按钮?我假设这将是一个 onclick 函数,但老实说,我真的不精通 PHP 以外的任何东西。你介意再握一下我的手吗?
  • 有道理!您也可以使用 javascript API 发布 cmets。在此处查看“添加评论”部分。您将 POST 到与上述相同的 url,内容描述为:code.google.com/apis/youtube/2.0/…
  • $("#refreshbutton").click(function(){ //ajax 脚本放在这里});
  • 考虑到此代码使用gdata(如果我错了请纠正我),是否返回视频的所有cmets(甚至数千个)?谢谢!
猜你喜欢
  • 2016-09-07
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2021-05-07
  • 2014-07-30
  • 2017-08-13
  • 1970-01-01
相关资源
最近更新 更多