Отображение количества комментариев Disqus в DIV или SPAN - нет <a href>

В настоящее время у нас есть количество комментариев в Disqus, отображаемое в каждом сообщении на нашей домашней странице в теге <a href>, и мы видим, что это обновляется с помощью некоторого javascript, который определяет наличие #disqus_thread в ссылке.

Как показать количество комментариев вне тега?

Это возможно?

Мы не заинтересованы в том, чтобы иметь прямую ссылку на комментарии, поэтому мы хотели бы удалить ссылку и просто показать счетчик.

Ответ 1

Обновление 03.11.2014:

Теперь у нас есть метод использования количества комментариев для любого элемента, который вы хотите. Стандартный скрипт count.js теперь будет работать, если вы:

  • Используйте класс disqus-comment-count И
  • Используйте атрибут data-disqus-url ИЛИ data-disqus-identifier

Так что теперь любой из этих элементов будет работать:

<span class="disqus-comment-count" data-disqus-url="http://example.com/path-to-thread/"> <!-- Count will be inserted here --> </span>

и

<span class="disqus-comment-count" data-disqus-identifier="your_disqus_identifier"> <!-- Count will be inserted here --> </span>

Старый ответ (не делайте этого больше)

Сценарий count.js довольно негибкий, когда речь идет о типах тегов, которые он ищет (это должен быть тег a), поэтому для этого вам потребуется использовать API.

Этот вызов API возвращает массив данных потока (вы ищете целое число "Posts") для любого количества потоков, которое вы укажете: http://disqus.com/api/docs/threads/set/

Из-за ограничений API вы в идеале должны запускать эту серверную часть и кэшировать счетчики для обслуживания клиентов. Однако, если у вас нет очень загруженного сайта, делать это на стороне клиента обычно хорошо. Вы можете написать по электронной почте [email protected], если вам нужно более 1000 запросов в час для вашего приложения.

EDIT

Вот краткий пример того, как вы могли бы сделать это с помощью jQuery. Это предполагает, что у вас есть несколько пустых div, которые выглядят так:

<div class="my-class" data-disqus-url="http://example.com/some-url-that-matches-disqus_url/"></div>

le javascript:

$(document).ready(function () {

        var disqusPublicKey = "YOUR_PUBLIC_KEY";
        var disqusShortname = "YOUR_SHORTNAME";
        var urlArray = [];

        $('.my-class').each(function () {
            var url = $(this).attr('data-disqus-url');
            urlArray.push('link:' + url);
        });


        $('#some-button').click(function () {
            $.ajax({
               type: 'GET',
               url: "https://disqus.com/api/3.0/threads/set.jsonp",
               data: { api_key: disqusPublicKey, forum : disqusShortname, thread : urlArray }, // URL method
               cache: false,
               dataType: 'jsonp',
               success: function (result) {

                    for (var i in result.response) {

                        var countText = " comments";
                        var count = result.response[i].posts;

                        if (count == 1)
                           countText = " comment";

                        $('div[data-disqus-url="' + result.response[i].link + '"]').html('<h4>' + count + countText + '</h4>');

                    }
                }
        });

});

Ответ 2

Нет решения jQuery:

var gettingCount = false;
var countCallerCallback = null;
function countCallback(data) // returns comment count or -1 if error
{
    var count = -1;
    try {
        var thread = data.response[0];
        count = thread === undefined ? "0" : thread.posts;  
    }
    catch (ex) {
        console.log("FAILED TO PARSE COMMENT COUNT");
        console.log(ex);
    }

    // always do this part
    var commentCountScript = document.getElementById("CommentCountScript");
    document.getElementsByTagName('head')[0].removeChild(commentCountScript);
    countCallerCallback(count);
    gettingCount = false;
    countCallerCallback = null; // if this got reset in the line above this would break something
}
function getCommentCount(callback) {
    if(gettingCount) {
        return;
    }
    gettingCount = true;

    var script = document.createElement('script');
    script.id = "CommentCountScript";
    var apiKey = "api_key=MY_COOL_API_KEY";
    var forum = "forum=MY_FORUM_SHORT_NAME"
    var thread = "thread=" + "link:" + window.location.href;
    script.src = 'https://disqus.com/api/3.0/threads/set.jsonp?callback=countCallback&' + apiKey + "&" + forum + "&" + thread;
    countCallerCallback = callback;
    document.getElementsByTagName('head')[0].appendChild(script);
}
getCommentCount(function(count){alert(count);});