Получить комментарии Youtube с jQuery - PullRequest
0 голосов
/ 01 января 2012

У меня есть проект для клиента, который будет использовать поток комментариев YouTube в качестве типа "чата".Я делаю аутентифицированный звонок на YouTube, используя API GData с Zend Framework.Я ищу способ запустить скрипт, который будет тянуть поток комментариев с помощью кнопки обновления, чтобы пользователям не приходилось обновлять страницу, чтобы увидеть свой комментарий или какие-либо новые комментарии, которые появляются.Я полагаю, что это может быть достигнуто с 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 для удобства чтения.

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Вот основная идея:

  1. Предоставить пользователю форму комментария
  2. Используйте jQuery, чтобы перехватить событие отправки формы. ( документы )
  3. Отправьте форму через AJAX в ваш серверный скрипт. (* 1 010 * * документы 1011 *)
  4. Вставьте запись в вашу базу данных как обычно.
  5. Отобразите HTML для нового комментария.
  6. После того, как запрос будет выполнен, jQuery вернет любой HTML-код, который вы указали. Осталось только добавить / добавить новый HTML-код в список комментариев. ( 1019 * документы *)
1 голос
/ 02 января 2012

Я создал пример для вас, чтобы использовать. Здесь используется JSON API Youtube, подробно описанный здесь: 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);
            });
        }
    });

Также я бы порекомендовал изменить название вашего вопроса на что-то более наглядное, например, «Получить комментарии Youtube с помощью jQuery»

...