2020年8月30日日曜日

Blogger サイトマップ設置 ページを更新

技術的に可能か否か?、
可能だとして、採否は?。
Blogger のサイトマップに関して、
以上の2点、悩んで仕舞います。  兎も角、再出発!。  ;)


長らく、項目のみ残してあって、実質、実行不可能扱いだった、
当 Blog の サイトマップ 。
これは便利だ! と採用を決め、暫く、利用可能だった訳ですが、
諸般の事情から、利用停止 が続いていたのでした。


この度、再開 しました!。
Blog のサイトマップ。


再開して、少し、時間が流れたのですが、
その辺りの事情を書いて置きます。

技術的に可能か否か?、
可能だとして、採否は?。


先ずは、
動かなくなっていた Javascript を 別のもの で探しました。
参考にしたのは、以下のサイト。  感謝!。
   https://jumiaafrica.blogspot.com/2020/03/how-to-create-html-sitemap-page-in.html
   Wonder Lorlorny, Thanks!
その結果、動く様になったのですが、
投稿数の上限が、以前の 500 から 150 に変わっている様で、(2015 年末 位から)、
この上限を突破する事も考えなければなりません。
そう、工夫せずに採用すると、投稿 150 個分を取得するに留まります。

結果、
自分で、コードを書き換え、150 個毎に取得し 累積 する事、 つまり、全数取得、も可能にしました。
変更ポイントは ローカル変数 と グローバル変数、そして、配列のインデックスの累積。
文末に、参考用コードを記載 します。  ( Javascript / html 中に記載する前提 / 限定条件あり )


ですが、
ハタっと悩んでしまったのです。
可能だけれど、全数取得が、宜しいのか?、 とね。


以前のスクリプトが動いていた頃、数が減っていそうだとは気付いていました。
500 から 150 へ、がフィード取得の上限に変更されていたのですね。  2015 年末辺りの事。
それを更に上回る数で 全数取得 させたい ... 。
出来ないとなると、何とかして、回避したいのが、 人の性。
でも、実際に出来て仕舞い 且つ その結果をページ上で眺めていると、思うのです。

この、似た様な項目が 長く長く ずら~と並んだ 文字情報だけのペ-ジ。
時間潰しには良いかも知れませんが、 果たして、喜んで見る方が どれだけ いるのか?。

例えば、です。
1投稿に平均で2ラベル付与だとして、150 投稿なら 300 項目が列挙されます。
全数取得を叶えた場合、
1年ほぼ毎日の様にブログを更新する方なら、2年で 700 投稿 1400 項目、5年で 1750 投稿 3500 項目。
この Blog ですら、既に、1000 投稿を超えていますので、項目数も 推して知るべし ... です。
これが、文字情報で1項目1行で並んだら、あなたは 見る気しますか?。
私は、... 、厭かも。

更に、かつて、上限数が減らされた 事実。
運用情報を分析しての結果だと思いますので、数が多ければ良いと言うものでも無い事を示唆します。
勿論、提供側の理論ですから、所要時間短縮とかのポイントが効いている可能性もありますが。

何れにしても、無条件での 全数取得 は ... 大人げない 方向性 なのかも知れませんね。

出来ても しない! を選択するのも、ひとつの解 かも。
或いは、
全数で無く、 1年分 若しくは 数年分 をカバーし得る数値にして置く のが 宜しい かと。



さて、
お約束の 全数取得可能なコード (javascript for html body)
   400 投稿 取得時の例
            決して綺麗なコードでは無く、スパゲッティ状態ですが、ご勘弁を。

   最後の your_blog_url を全て変更して下さい。
   取得数に合わせて、 <script src="https: ... ブロック を追加・削除・編集して下さい。  数値変更 2箇所 有り。
   背景色や文字色に対応するべく、日付 と NEW との 表示色 を検討下さい。


<script type='text/javascript'>
    var postTitle = new Array();
    var postUrl = new Array();
    var postPublished = new Array();
    var postDate = new Array();
    var postLabels = new Array();
    var postRecent = new Array();
    var countfeed = 0;
    var ii = 0;
</script>
<script type='text/javascript'>
    var sortBy = "titleasc";
    var numberfeed = 0;
    function bloggersitemap(a) {
        function b() {
            if ("entry" in a.feed) {
                var d = a.feed.entry.length;
                numberfeed = d;
                /* ii = 0; */
                for (var h = 0; h < d; h++) {
                    var n = a.feed.entry[h];
                    var e = n.title.$t;
                    var m = n.published.$t.substring(0, 10);
                    var j;
                    for (var g = 0; g < n.link.length; g++) {
                        if (n.link[g].rel == "alternate") {
                            j = n.link[g].href;
                            break
                        }
                    }
                    var o = "";
                    for (var g = 0; g < n.link.length; g++) {
                        if (n.link[g].rel == "enclosure") {
                            o = n.link[g].href;
                            break
                        }
                    }
                    var c = "";
                    if ("category" in n) {
                        for (var g = 0; g < n.category.length; g++) {
                            c = n.category[g].term;
                            var f = c.lastIndexOf(";");
                            if (f != -1) {
                                c = c.substring(0, f)
                            }
                            postLabels[ii] = c;
                            postTitle[ii] = e;
                            postDate[ii] = m;
                            postUrl[ii] = j;
                            postPublished[ii] = o;
                            if (countfeed == 0 && h < 10) {
                                postRecent[ii] = true
                            } else {
                                postRecent[ii] = false
                            }
                            ii = ii + 1
                        }
                    }
                }
            }
        }
        b();
        countfeed++;
        /*
        sortBy = "titledesc";
        sortPosts(sortBy);
        sortlabel();
        displayToc();
        */
    }
    function DispResults() {
        sortBy = "titledesc";
        sortPosts(sortBy);
        sortlabel();
        displayToc();
    }
    function sortPosts(d) {
        function c(e, g) {
            var f = postTitle[e];
            postTitle[e] = postTitle[g];
            postTitle[g] = f;
            var f = postDate[e];
            postDate[e] = postDate[g];
            postDate[g] = f;
            var f = postUrl[e];
            postUrl[e] = postUrl[g];
            postUrl[g] = f;
            var f = postLabels[e];
            postLabels[e] = postLabels[g];
            postLabels[g] = f;
            var f = postPublished[e];
            postPublished[e] = postPublished[g];
            postPublished[g] = f;
            var f = postRecent[e];
            postRecent[e] = postRecent[g];
            postRecent[g] = f
        }
        for (var b = 0; b < postTitle.length - 1; b++) {
            for (var a = b + 1; a < postTitle.length; a++) {
                if (d == "titleasc") {
                    if (postTitle[b] > postTitle[a]) {
                        c(b, a)
                    }
                }
                if (d == "titledesc") {
                    if (postTitle[b] < postTitle[a]) {
                        c(b, a)
                    }
                }
                if (d == "dateoldest") {
                    if (postDate[b] > postDate[a]) {
                        c(b, a)
                    }
                }
                if (d == "datenewest") {
                    if (postDate[b] < postDate[a]) {
                        c(b, a)
                    }
                }
                if (d == "orderlabel") {
                    if (postLabels[b] > postLabels[a]) {
                        c(b, a)
                    }
                }
            }
        }
    }
    function sortlabel() {
        sortBy = "orderlabel";
        sortPosts(sortBy);
        var a = 0;
        var b = 0;
        while (b < postTitle.length) {
            temp1 = postLabels[b];
            firsti = a;
            do {
                a = a + 1
            } while (postLabels[a] == temp1);
            b = a;
            sortPosts2(firsti, a);
            if (b > postTitle.length) {
                break
            }
        }
    }
    function sortPosts2(d, c) {
        function e(f, h) {
            var g = postTitle[f];
            postTitle[f] = postTitle[h];
            postTitle[h] = g;
            var g = postDate[f];
            postDate[f] = postDate[h];
            postDate[h] = g;
            var g = postUrl[f];
            postUrl[f] = postUrl[h];
            postUrl[h] = g;
            var g = postLabels[f];
            postLabels[f] = postLabels[h];
            postLabels[h] = g;
            var g = postPublished[f];
            postPublished[f] = postPublished[h];
            postPublished[h] = g;
            var g = postRecent[f];
            postRecent[f] = postRecent[h];
            postRecent[h] = g
        }
        for (var b = d; b < c - 1; b++) {
            for (var a = b + 1; a < c; a++) {
                if (postTitle[b] > postTitle[a]) {
                    e(b, a)
                }
            }
        }
    }


    function displayToc() {
        var a = 0;
        var b = 0;
        while (b < postTitle.length) {
            temp1 = postLabels[b];
            document.write("");
            document.write('<div class="post-archive"><h4>' + temp1 + '</h4><div class="ct-columns">');
            firsti = a;
            do {
                document.write("<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
                document.write('<a " href="' + postUrl[a] + '">' + postTitle[a] +
                               "</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
                               '<span style="color: #888888;">[' + postDate[a] +']</span>');
                if (postRecent[a] == true) {
                    document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <strong><span style="color: #FF0000;">New!</span></strong>')
                }
                document.write("</p>");
                a = a + 1
            } while (postLabels[a] == temp1);
            b = a;
            document.write("</div></div>");
            sortPosts2(firsti, a);
            if (b > postTitle.length) {
                break
            }
        }
    }
    </script>

    <script src="https://your_blog_name.blogspot.com/feeds/posts/summary?alt=json-in-script&max-results=150&callback=bloggersitemap" type="text/javascript"></script>
    <script src="https://your_blog_name.blogspot.com/feeds/posts/summary?alt=json-in-script&max-results=150&start-index=151&callback=bloggersitemap" type="text/javascript"></script>
    <script src="https://your_blog_name.blogspot.com/feeds/posts/summary?alt=json-in-script&max-results=100&start-index=301&callback=bloggersitemap" type="text/javascript"></script>

<script type="text/javascript">
DispResults();
</script>


上記コードを編集し、ページ等に貼り付けて下さい。  編集モードは html モード( html ビュー )で、 です。
編集対象以外は弄らない様にして下さいね。  動かなくなると思いますので。



尚、周知と言う意味では無く、個人的な利用の観点から、全数取得は 意義がある場合もあります。
それは、Blog 投稿の管理の意味合いから、利用する手です。
ラベルの付け間違いや、タイトルの表記のずれ、等をチェックするには便利かも知れません。
非公開のページとすれば良いのですが、ページにしなく共、html として別途用意して置けば良い事になりますね。
そう、 Blog 上では無く、 ローカルに、其のファイルを置いて置けば、十分でしょう。




2 件のコメント:

  1. メッセージありがとうございました。
    自分のページのサイトマップが全件表示できなくなっていた事に気づきませんでした。
    確かに全件表示するか否かは難しいところですね。
    記事中のコードも機会があったら利用させていただきます。

    返信削除
    返信
    1. なんぶ電子 さま コメントありがとうございます。

      先ずは、こちらから突然変なコメントをお送りした事をお詫び致します。
      また、折り返し、コメント戴けて感謝しています。

      サイトマップは設置しても正常に動いているか否かの判断が難しいです。
      エラーでも起こさない限り、表示していれば、安心して仕舞いますから。
      feeds からデータ取得する以上、母艦の意向次第で波を被りますから、今後共、そこは 要注意 かも。

      コードの件、どうぞ、使ってあげて下さいませ。

      削除