イントロダクション
Blogger へ投稿した記事の数を表示できると便利ですよね。というわけで、Blogger へ投稿した全投稿数を表示する JavaScript を作成してみました。
原理
Blogger へ投稿した全投稿数をカウントするために、ブログアーカイブを参照します。ブログアーカイブの各年ごとの投稿数をカウントして、全投稿数を計算します。
計算した全投稿数を id="total_archives" の要素に挿入します。
ソースコード
全投稿数を表示したい場所に埋め込む HTML
<span id="total_archives"></span>
bodyタグ内の最後に埋め込む JavaScript
最適化前
<script type='text/javascript'>
//<![CDATA[
<!--
// --- Util ---
/*
タグ名から子要素のみを選択して取得する
*/
function getChildElementsByTagName(obj, tagName) {
var items = new Array();
for (var i = 0; i < obj.childNodes.length; i++) {
if (obj.childNodes[i].tagName !== void 0) // undefined でなければ処理
{
if (obj.childNodes[i].tagName.toLowerCase() == tagName.toLowerCase()) {
items.push(obj.childNodes[i]);
}
}
}
return items;
}
// --- Main ---
/*
ブログアーカイブの総数をカウントして、返却する
id_archive : ブログアーカイブの id
戻り値:ブログアーカイブの総数
*/
function getAllArchivesCount(id_archive) {
var obj_archive = document.getElementById(id_archive); // ブログアーカイブ取得
var obj_year_archives = getChildElementsByTagName(obj_archive, "ul"); // 年毎の ul を取得
// 年毎のアーカイブを合計する
var sum = 0;
for (var i = 0; i < obj_year_archives.length; i++) {
var obj_year_archive_childs = getChildElementsByTagName(obj_year_archives[i], "li"); // 直下の li 取得
var obj_year_archive_counts = getChildElementsByTagName(obj_year_archive_childs[0], "span"); // カウント数が納められている span 取得
var splitCountText = obj_year_archive_counts[0].innerHTML.match(/(\([^\d]*)(\d+)([^\d]*\))/m); // カウント数のテキスト解析
var year_archive_count = Number(splitCountText[2]); // カウント数取得
sum += year_archive_count;
}
return sum;
}
/*
ブログアーカイブの総数をカウントして、表示する
id_insert : カウントした総数を表示する要素の id
id_archive : ブログアーカイブの id
*/
function insertArchivesCount(id_insert, id_archive) {
// 全アーカイブの数を取得
var count = getAllArchivesCount(id_archive);
// 全アーカイブの数を表示
var obj_insert = document.getElementById(id_insert);
obj_insert.innerHTML = "" + count + " Archives in this.";
}
// --- 実行 ---
insertArchivesCount('total_archives', 'BlogArchive1_ArchiveList');
//-->
//]]>
</script>
最適化後
上記コードを、Closure Compiler(Googleが提供しているコード圧縮・最適化ツール)にて最適化しました。
上記コードを変更せずにそのまま使う場合には、以下のコードをそのまま使用できます。
<script type='text/javascript'>
//<![CDATA[
<!--
function getChildElementsByTagName(a,d){for(var c=[],b=0;b<a.childNodes.length;b++)void 0!==a.childNodes[b].tagName&&a.childNodes[b].tagName.toLowerCase()==d.toLowerCase()&&c.push(a.childNodes[b]);return c}function getAllArchivesCount(a){a=document.getElementById(a);a=getChildElementsByTagName(a,"ul");for(var d=0,c=0;c<a.length;c++)var b=getChildElementsByTagName(a[c],"li"),b=getChildElementsByTagName(b[0],"span")[0].innerHTML.match(/(\([^\d]*)(\d+)([^\d]*\))/m),d=d+Number(b[2]);return d}
function insertArchivesCount(a,d){var c=getAllArchivesCount(d);document.getElementById(a).innerHTML=""+c+" Archives in this."}insertArchivesCount("total_archives","BlogArchive1_ArchiveList");
//-->
//]]>
</script>
結果
以下のように全投稿数をカウントできました。
実行結果
全投稿数が見える化されることで、読者はもっとほかのページも見てみようと思ったりするかもしれません。

コメントを投稿 (ここをクリックしてコメント投稿フォームを表示)
コメント投稿機能について