CafeLogにタイトル一覧表示を追加(1)

CafeLogにタイトル一覧表示を追加(1)

今、このブログをパソコンでご覧の方は、画面の右側、プロフィールの上に「記事一覧」というリンクが登場したことに、気づかれたかもしれません(スマホの場合は記事が終わったあとのサイトの紹介部分に表示されます)。
「レコ芸難民のためのリンク集」の作成中に、CafeLogのソースコードを眺め、記事のタイトル一覧を作れないかなと考えました。
CafeLogの作者が公開しているLinkViewというリンク管理用のCGIを使って簡単に出来ましたので、何回かに分け、ご紹介します。

旧みみず工房では、タイトル一覧をRubyスクリプリトで自作したので、好きなように設定出来ました。

こんな感じですね。

CafeLogにはタイトル一覧を表示する機能はありません。
既成のスクリプトなので、CGIを改造し、機能追加する必要があります。

CafeLogの場合、html生成用の出力定義ファイル(index.dat、page.dat)を使い、プログラミングすれば、同じようなことが出来そうです。テンプレートファイルを用意し、定義ファイルからタイトル一覧htmlを自動生成することになります。
同様の処理をするCGIを捜せば、手抜きすることが出来ると考えました(^^;;;。kentさんのサイトを捜してみたら、LinkVisorというリンク集を作成するCGIがありました。

このCGIは、ご覧のように、画面上部のボックスに入力されたリンクデータを、自動的に、画面下部のリンク一覧として、作成(追加)するためものです。リンクデータはカテゴリ別に分類することが出来ます。
みみず工房のタイトル一覧としては入力側の機能は不要ですが、リンク一覧を作成する出力側の機能はそのまま使えそうです。
ご覧のように上部分を削除し、下部のみ残せばカテゴリ別のタイトル一覧となります。まさに手抜きの目的通りです。これは使えるかなと考え、早速、中身をチェック。

ListVisorのルートディクトリーです。
LinkVisorはCafeLogと同じようにデータファイルからテンプレートファイルを編集して、linlv.htmlとして出力し、表示させるという方式をとっています。この方式はhtmlが表示される度に、毎回CGIが走ることがないので、ホストの負荷を下げるには有効ですね。
admin.cgiとlinkv.cgiがテキストボックスからの入力を受け、リンクデータを編集し、画面下部に出力するためのcgiです。linkv.cgiは誰でもリンクを登録出来るようにするためのもので、設定を訪問者が登録可能とした場合のみ有効になります。初期時のフォームの設定は設定は次の通りでした。

<form action="./linkv.cgi" method="post">

では、管理者のみ指定した場合どうなるか。 admin.cgiが動くようです。リンク集リストの出力など共通の処理はinit.cgiにまとめられています。

admin.cgiの中を見てみました。分かりやすい作りとなっていて、リンクの編集はdata_addという関数で処理しているようです。log.cgi(リストデータです)を読み込んで、リンク用htmlを吐き出しているだけ。

ということは、このlog.cgiを作り出してやれば、ほとんどcgiを弄ることなしに処理出来そうです。

これは、CafeLog(ブログ用のCGI)のデータディレクトリーです。index.datとpage.datを使えば、100%、リンクを復元出来そうです。

00016 2023.09.08 14:32 『レコ芸』難民のためのリンク集 1 6 0 1
00014 2023.09.04 18:43 『レコ芸』難民のために 2 1 7 0 1
00013 2023.08.20 21:03 トゥーランドット 1 7 0 1
00012 2023.07.07 14:58 『レコ芸』難民(^^;;;のために 1 7 0 1
・・・・・

これがpage.dat。

00003 top:page-5.html cat:2-1.html day:20230402-1.html mon:202304-2.html
00005 top:page-4.html cat:7-2.html day:20230406-1.html mon:202304-1.html
00013 top:index.html cat:7-1.html day:20230820-1.html mon:202308-1.html
00009 top:page-3.html cat:6-1.html day:20230508-1.html mon:202305-1.html
・・・・・

これがindex.dat。

00003 top:page-5.html cat:2-1.html day:20230402-1.html mon:202304-2.html
00005 top:page-4.html cat:7-2.html day:20230406-1.html mon:202304-1.html
00013 top:index.html cat:7-1.html day:20230820-1.html mon:202308-1.html
00009 top:page-3.html cat:6-1.html day:20230508-1.html mon:202305-1.html
・・・・・

これがindex.dat。

変換後のlog.cgiはこんな形です。

00016<>admin<>15<>
00016<>1<>『レコ芸』難民のためのリンク集<>http://mimizukobo.atwebpages.com/archives/day/20230908-1.html<>2023.09.08<><><><>2023,09,08<>
00014<>0<>『レコ芸』難民のために 2<>http://mimizukobo.atwebpages.com/archives/day/20230904-1.html<>2023.09.04<><><><>2023,09,04<>
00013<>0<>トゥーランドット<>http://mimizukobo.atwebpages.com/archives/day/20230820-1.html<>2023.08.20<><><><>2023,08,20<>
00012<>0<>『レコ芸』難民(^^;;;のために<>http://mimizukobo.atwebpages.com/archives/day/20230707-1.html<>2023.07.07<><><><>2023,07,07<>

BingAIを利用したら、簡単に出来ました。

#!/usr/bin/perl

#!/usr/bin/perl
use strict;
use warnings;

# 入力データを一行読み込む
my $line = ;
chomp $line;

# タブで分割する
my @fields = split /\t/, $line;

# 番号0, 日時A, タイトルを取り出す
my ($num, $date_a, $title) = @fields[0, 1, 3];

# 日時Aを年.月.日の形式から年月日の形式に変換する
my $date_b = $date_a;
$date_b =~ s/\.//g;

# 日時Aを年.月.日の形式から年,月,日の形式に変換する
my $date_c = $date_a;
$date_c =~ s/\./,/g;

# 変換後のデータを出力する
print "$num<>admin<>$num\n";
print "$num<>0<>$title<>http://mimizukobo.atwebpages.com/archives/day/$date_b-1.html<>$date_a<><><><>$date_c<>\n"; 

そのままでは使えませんが、多少変更したら、上手く動くようになりました。動かすのに苦労したのは日本語の文字コードの取り扱いです。Perlプログラミング部分は楽をできました。『バカとAIは使いよう』ですね。

詳細は次回以降、ご紹介します。

PAGE TOP