Загружаем последние комментарии из Disqus используя jquery/javascript

Как я уже писал, недавно я переехал с Wordpress на статический генератор блогов Pelican. Так как обработку комментариев на стороне сервера сделать нельзя, я перенес все комментарии в disqus. На старом блоге в боковом меню у меня отображались последние комментарии, и я хотел чтобы после переезда на новую блог платформу они сохранились. К счастью, у disqus есть API с помощью которого можно это реализовать.

Получаем API ключ

Для начала нам необходимо получить API ключ на сайте disqus. Заходим на специальную страницу на сайте disqus, и регистрируем новое приложение.

Заполняем поля и нажимаем Register my application:

После создания нового приложения, сохраняем Public key. Он нам нужен будет для запросов к API disqus:

HTML

Как таковой особой разметки нам не понадобится. В месте, где планируется отображать комментарии добавим div с уникальным идентификатором, который будет служить контейнером для комментариев:

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

В данном случае добавлять комментарии будем к div с идентификатором latest-comments.

Немного стилизуем:

#latest-comments {
  margin: 50px;
  width: 500px;
  height: 300px;
}
.panel-body ul {
  list-style-type: none;
  padding: 0;
}
.panel-body ul li {
  margin: 10px 0;
}

Javascript

У disqus есть лимиты на обращения к API. Для того, чтобы в случае если мы привысили лимит у нас не висел контейнер без комментариев - все необходимые элементы будем добавлять после их загрузки и средствами javascript.

Использовать будем API функцию listPosts.

Вот, собственно, весь нужный нам код:

$(function() {
    function load_latest_comments() {
        var append_to = $("#latest-comments");

        $.ajax({
            type: 'GET',
            url: "https://disqus.com/api/3.0/forums/listPosts.jsonp",
            data: {
              // Необходимо подставить ваш API ключ
              api_key: '{{ API_KEY }}',
              // Имя сайта в disqus
              forum : '{{ SITENAME }}',
              // Количество последних комментариев
              limit: {{ COUNT }},
              related: 'thread'
            },
            cache: false,
            dataType: 'jsonp',
            success: function (data) {
                var result = "";
                result += '<div class="panel panel-primary">';
                result += '<div class="panel-heading">Последние комментарии</div>';
                result += '<div class="panel-body"><ul>';
                for(var i=0, len=data.response.length; i<len; i++) {
                    var post = data.response[i];
                    var html = "<li>";

                    // Текст комментария
                    message = post.raw_message.substr(0, 100);
                    // Ссылка на комментарий
                    link = post.url;
                    // Автор комментария
                    author = post.author.name;
                    // Название статьи, к которой оставлен комментарий
                    post_title = post.thread.title;

                    html += "<strong>" + author + "</strong>:";
                    html += '<span>' + message + '</span>... <br />';
                    html += "<i>к статье:</i> <a href='"+ link + "'>" + post_title + "</a>";
                    html += "</li>";

                    result+=html;
                }
                result += '</ul></div></div>';
                append_to.html(result);
            },
            error: function(data) {
                console.log("Error while loading latest comments from disqus. API limit reached?");
            }
        });

    }

    // Загружаем комментарии с задержкой в несколько секунд.
    setTimeout(load_latest_comments, 1000);
});

В листинге выше необходимо вместо:

  • {{ API_KEY }} - публичный API ключ, которые мы получили на первом шаге;
  • {{ SITENAME }} - название сайта, он же shortname в терминологии disqus;
  • {{ COUNT }} - количество загружаемых комментариев;

Выглядет это будет так:


Понравилась статья? Поделись с друзьями!




Комментарии на этом сайте требуют включенного Javascript в вашем браузере. Вероятно, ваш браузер не поддерживает Javascript, или он был отключен по каким-то причинам. Если вы хотите прокомментировать пост, или просто почитать комментарии, то пожалуйста, включите Javascript или попробуйте открыть эту страницу другим браузером.