diff kuttukibbs-1.0rc2-dom/kuttukibbs.cgi kuttukibbs-1.0rc2-rss/kuttukibbs.cgi
*** kuttukibbs-1.0rc2-dom/kuttukibbs.cgi Sat Nov 27 03:49:52 2004
--- kuttukibbs-1.0rc2-rss/kuttukibbs.cgi Sat Nov 27 07:15:12 2004
***************
*** 18,23 ****
--- 18,33 ----
my $page_template_edit;
my $charset = "EUC-JP"; # 文字コード
+ # RSS 関連変数
+ my $rdf_file; # 出力する RSS のファイル名
+ my $rdf_content;
+ my $rdf_dcdate;
+ my $rdf_url;
+ my $rdf_id;
+ my $rdf_all_template;
+ my $rdf_seq_template;
+ my $rdf_item_template;
+
### グローバル変数
my $latest_id = -1; # 最新のコメントの ID
my %com_hash; # コメントを格納するハッシュ
***************
*** 94,99 ****
--- 104,110 ----
read_file($fn, \$all);
set_comment_hash(\%com_hash, \$all);
write_to_jsfile($fn_pref.".js"); # JavaScript Feed ファイル
+ write_to_rssfile(); # RSS ファイル
%com_hash = ();
} else {
print "wrong password!\n";
***************
*** 131,136 ****
--- 142,148 ----
write_to_logfile(); # ログファイルへの書き込み
write_to_jsfile($fn_pref.".js"); # JavaScript Feed ファイルへの書き込み
+ write_to_rssfile(); # RSS ファイルへの書き込み
write_to_adminlogfile(); # 管理者用ログファイルへの書き込み
}
}
***************
*** 316,323 ****
}
! ### 最近投稿されたコメントを表示
! sub output_latest {
my @fl = <$log_dir/*.log>;
my @lalist;
foreach my $f (@fl) {
--- 328,335 ----
}
! ### 最近投稿されたコメントを得る
! sub get_latest {
my @fl = <$log_dir/*.log>;
my @lalist;
foreach my $f (@fl) {
***************
*** 336,348 ****
@lalist)[0..($latest_comment_display_num - 1)];
}
foreach my $i (@lalist) {
! last if $i eq "";
$comments .= make_comment_html($i, 0);
}
$cgi_url .= "?mode=latest";
eval qq(\$page_html = << "FFF"\n$page_template_latest\nFFF\n);
print $page_html;
exit;
}
--- 348,416 ----
@lalist)[0..($latest_comment_display_num - 1)];
}
foreach my $i (@lalist) {
! last if ($i eq "" || $$i{'i'} eq "");
$comments .= make_comment_html($i, 0);
}
+ return @lalist;
+ }
+ ### 最近投稿されたコメントを表示
+ sub output_latest {
+ my @lalist = get_latest();
+
$cgi_url .= "?mode=latest";
eval qq(\$page_html = << "FFF"\n$page_template_latest\nFFF\n);
print $page_html;
exit;
}
+
+ ### RSS で出力
+ sub write_to_rssfile {
+ my @lalist = get_latest();
+ my $rdf_seq;
+ my $rdf_item;
+
+ foreach my $i (@lalist) {
+ last if ($i eq "" || $$i{'i'} eq "");
+ my $date = $$i{'d'};
+ my $id = $$i{'i'};
+ my $url = id2url($id);
+ my $desc = $$i{'n'} . " [" . $$i{'m'}. "]";
+ my $seqtmp;
+ my $itemtmp;
+
+ $date =~ s/(\d\d\d\d)-(\d\d)-(\d\d)\s(\d\d):(\d\d):(\d\d)/$1-$2-$3T$4:$5:$6+09:00/;
+
+ my $cont_max_len = 300;
+ if (length($desc) > $cont_max_len) {
+ $desc =~ s/^(.{$cont_max_len}).*$/$1/sm;
+ $desc =~ s/\n[^\n]*$//;
+ $desc .= "...";
+ }
+
+ $desc =~ s|<[^<>]+?>||gosm;
+ $desc =~ s/&/&/go;
+ $desc =~ s/>/>/go;
+ $desc =~ s/</go;
+ $desc =~ s/"/"/go; # ";
+ $desc =~ s/\t//g;
+
+ $rdf_content = $desc;
+ $rdf_dcdate = $date;
+ $rdf_url = $url;
+ $rdf_id = $id;
+
+ eval qq(\$seqtmp = << "FFF"\n$rdf_seq_template\nFFF\n);
+ eval qq(\$itemtmp = << "FFF"\n$rdf_item_template\nFFF\n);
+
+ $rdf_seq .= $seqtmp;
+ $rdf_item .= $itemtmp;
+ }
+ $rdf_dcdate = strftime "%Y-%m-%dT%H:%M:%S+09:00", localtime;
+ my $rdf;
+ eval qq(\$rdf = << "FFF"\n$rdf_all_template\nFFF\n);
+
+ save_file($rdf_file, \$rdf);
+ }
+
diff kuttukibbs-1.0rc2-dom/kuttukibbs.conf kuttukibbs-1.0rc2-rss/kuttukibbs.conf
*** kuttukibbs-1.0rc2-dom/kuttukibbs.conf Thu Apr 8 22:27:02 2004
--- kuttukibbs-1.0rc2-rss/kuttukibbs.conf Sat Nov 27 07:16:07 2004
***************
*** 9,14 ****
--- 9,18 ----
$admin_log_file = "kblog/log.txt";
# --------------------------------------------------------------------
+ # RSS ファイル名
+ $rdf_file = "kblog/bbs.rdf";
+
+ # --------------------------------------------------------------------
# 管理者用パスワード: 空だと編集・削除ができません。
$passwd = "";
***************
*** 148,153 ****
--- 152,198 ----
EDIT
;
+ # --------------------------------------------------------------------
+ # RSS のテンプレート
+ #
+ ## rdf:Seq のテンプレート
+ $rdf_seq_template = << 'RDFSEQ'
+
+ RDFSEQ
+ ;
+
+ $rdf_item_template = << 'RDFITEM'
+ -
+ $rdf_id へのつっこみ
+ http://quasiquote.org/bbs/?id=$rdf_id
+ $rdf_content
+ $rdf_dcdate
+
+ RDFITEM
+ ;
+
+ $rdf_all_template = << 'RDFALL'
+
+
+
+ Misc Change Log
+ http://quasiquote.org/log/
+ `OpenBSD で scheme のアプリ開発' みたいなことをやってます。
+ $rdf_dcdate
+
+
+ $rdf_seq
+
+
+
+ $rdf_item
+
+ RDFALL
+ ;
# --------------------------------------------------------------------
# ID を URL に変換する