2 に答える
2014 年 11 月 3 日更新:
任意の要素でコメント カウントを使用する方法が用意されました。通常のcount.jsスクリプトは、次の場合に機能します。
- クラスを使用する
disqus-comment-count
AND data-disqus-url
ORdata-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 の制限により、理想的には、このサーバー側を実行し、カウントをキャッシュしてクライアントに提供します。ただし、非常に忙しいサイトでない限り、通常はクライアント側で実行しても問題ありません。アプリケーションで 1 時間あたり 1000 を超えるリクエストが必要な場合は、developers@disqus.com に電子メールを送信できます。
編集
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>');
}
}
});
});
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);});