~ モバイル版(スマートフォン)の操作 ~
左右にスワイプすると、前後の投稿へ移動します。
← 前の投稿 | 次の投稿 →
日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2014年6月5日木曜日

Blogger:ラベル一覧を CSV として保存


スポンサーリンク

イントロダクション

Blogger の投稿に付与したラベルの一覧を CSV として保存できるように、

ラベル名,件数

という形式で新しいウィンドウに出力するブックマークレットを作成してみました。




なお、本ブックマークレットはクラウド形式でラベルを表示している Blogger のブログに対して有効です。リスト形式でラベルを表示しているものに対しては使えません。


追記:

初版で公開したコードでは getChildElementsByTagName メソッドが抜けていたため、正常に動作しませんでした。
getChildElementsByTagName メソッドを追加したコードを以下に追加しました。

なお、Chrome と Firefox で動作することを確認しましたが、Internet Explorer の場合、ブックマークの URL の文字数制限により実行することができません。


コード

元となる JavaScript コードは以下のものです。

// Blogger のラベル一覧を CSV として新しいウィンドウで表示

(function () {

    // --- 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;
    }

    var obj_label_widget = document.getElementById("Label1");
    var csv_text = "ラベル名,件数\n";

    // label ウィジェット内の、ラベル名と投稿数のペアーが収められている<span>要素の上位要素を取得
    var obj_label_widget_labels_tops = getChildElementsByTagName(obj_label_widget, "div");
    if (obj_label_widget_labels_tops.length == 1) {

        // ラベル名と投稿数のペアーが収められている<span>要素取得
        var obj_label_widget_labels_spans = getChildElementsByTagName(obj_label_widget_labels_tops[0], "span");

        for (var i = 0; i < obj_label_widget_labels_spans.length; i++) {
            if (obj_label_widget_labels_spans[i].className.match(/^label-size label-size/)) {

                var labelName;      // ラベル名
                var count;          // カウント

                // ラベル名の a タグが入っていることを確認
                // カウント数の span タグがなかったら、count は空白とする
                var obj_a_Tags = getChildElementsByTagName(obj_label_widget_labels_spans[i], "a");
                if (obj_a_Tags.length != 1) {
                    continue;
                }
                labelName = obj_a_Tags[0].innerHTML.replace(/^\s*(.*)\s*$/g, "$1");

                var obj_span_Tags = getChildElementsByTagName(obj_label_widget_labels_spans[i], "span");
                if (obj_span_Tags.length != 1) {
                    count = "";
                } else {
                    count = obj_span_Tags[0].innerHTML.replace(/[()]|\s/g, "");
                }

                csv_text += labelName + "," + count + "\n";
            }
        }
    }

    // 新しいウィンドウに csv のデータを出力
    var win = window.open();
    win.document.write("<html><head><title>Bloggerのラベル一覧</title></head><body></body></html>");
    win.document.body.innerHTML = "<textarea cols=\"100\" rows=\"30\">" + csv_text + "</textarea>";
})();


3 行目にて、

var obj_label_widget = document.getElementById("Label1");

として、ラベルウィジットの id を指定しています。
環境によってはラベルウィジットの id が異なる可能性があるため、ラベルウィジットの id を確認して、異なる id の場合はその id を指定するようブックマークレットのコードを修正してください。


ブックマークレット

以上のコードをブックマークレット化したものが以下のものになります。

javascript:(function(){function e(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}var a=document.getElementById("Label1"),f="ラベル名,件数\n",a=e(a,"div");if(1==a.length)for(var a=e(a[0],"span"),d=0;d<a.length;d++)if(a[d].className.match(/^label-size label-size/)){var c,b;c=e(a[d],"a");1==c.length&&(c=c[0].innerHTML.replace(/^\s*(.*)\s*$/g,"$1"),b=e(a[d],"span"),b=1!=b.length?"":b[0].innerHTML.replace(/[()]|\s/g,
""),f+=c+","+b+"\n")}a=window.open();a.document.write("<html><head><title>Bloggerのラベル一覧</title></head><body></body></html>");a.document.body.innerHTML='<textarea cols="100" rows="30">'+f+"</textarea>"})();


このブックマークレットをブラウザのブックマークに登録します。


結果

このブログにてブックマークレットを実行してみると、結果は次のようになりました。

このブログのラベル一覧



生成されたラベル一覧の csv形式のデータ


あとはこのデータをテキストエディタに張り付けて、.csv の拡張子で保存すると、Excel などで表として読み込むことができます。

Excel に取り込んだラベル一覧のデータ


※ 現在、このブログのラベルウィジットは独自の改造を施したため、このコードでラベル一覧を取得することができません。

このコードは、以下の Blogger ブログで試すことができます。

Dr.ウーパの日常2 http://upa-life.blogspot.jp/



スポンサーリンク

コメントを投稿

コメント投稿機能について