*** tb_cgi.txt Sat Nov 20 10:40:56 2004 --- tb.cgi Sat Nov 20 10:39:02 2004 *************** *** 12,40 **** use CGI qw( :standard ); use CGI::Cookie; use File::Spec::Functions; ! use Encode; ! use Encode::Guess qw(euc-jp shiftjis 7bit-jis); use LWP::UserAgent; use Storable; ! our $VERSION = '1.02'; ! our $DataDir = "./tb_data"; #実際のディレクトリとは異なります ! our $RSSDir = "./tb_rss"; #同上 ! our $GenerateRSS = 0; ! our $Header = "./header.txt"; ! our $Footer = "./footer.txt"; ! our $Password = "foo"; # 実際のパスワードとは異なります ! our $Server = virtual_host() || server_name(); # 以下、最後の/は無しで設定 ! our $TB_URL = "http://$Server/itazuragaki/tb"; ! our $Blog_URL = "http://$Server/itazuragaki/id"; # 最新のTrackBackを別ファイルに記録する場合に設定 ! our $Recent_TB_ID = '_recent'; ! our $Recent_TB_Num = 5; ! our $mode = param('__mode'); unless ($mode) { my $tb_id = munge_tb_id(get_tb_id()); respond_exit("No TrackBack ID (tb_id)") unless $tb_id; --- 12,39 ---- use CGI qw( :standard ); use CGI::Cookie; use File::Spec::Functions; ! use Jcode; use LWP::UserAgent; use Storable; ! my $VERSION = '1.02'; ! my $DataDir = "./tb_data"; #実際のディレクトリとは異なります ! my $RSSDir = "./tb_rss"; #同上 ! my $GenerateRSS = 0; ! my $Header = "./header.txt"; ! my $Footer = "./footer.txt"; ! my $Password = "foo"; # 実際のパスワードとは異なります ! my $Server = virtual_host() || server_name(); # 以下、最後の/は無しで設定 ! my $TB_URL = "http://$Server/itazuragaki/tb"; ! my $Blog_URL = "http://$Server/itazuragaki/id"; # 最新のTrackBackを別ファイルに記録する場合に設定 ! my $Recent_TB_ID = '_recent'; ! my $Recent_TB_Num = 5; ! my $mode = param('__mode'); unless ($mode) { my $tb_id = munge_tb_id(get_tb_id()); respond_exit("No TrackBack ID (tb_id)") unless $tb_id; *************** *** 50,64 **** $i->{title} ||= $i->{url}; $i->{timestamp} = time; ! my $decoder = guess_encoding($i->{title} . $i->{blog_name} . $i->{excerpt}); my $incoming; if ($i->{charset}) { $incoming = $i->{charset}; } elsif (ref($decoder)) { $incoming = $decoder->name; } else { ! $incoming = "utf-8"; } $i->{title} = to_utf8($incoming, $i->{title}, 255); $i->{blog_name} = to_utf8($incoming, $i->{blog_name}, 255); $i->{excerpt} = to_utf8($incoming, $i->{excerpt}, 255); --- 49,64 ---- $i->{title} ||= $i->{url}; $i->{timestamp} = time; ! my $decoder = getcode($i->{title} . $i->{blog_name} . $i->{excerpt}); my $incoming; if ($i->{charset}) { $incoming = $i->{charset}; } elsif (ref($decoder)) { $incoming = $decoder->name; } else { ! $incoming = "utf8"; } + $incoming =~ s/^utf-8$/utf8/; # XXX: Jcode $i->{title} = to_utf8($incoming, $i->{title}, 255); $i->{blog_name} = to_utf8($incoming, $i->{blog_name}, 255); $i->{excerpt} = to_utf8($incoming, $i->{excerpt}, 255); *************** *** 79,90 **** pop @$recent_data if (@$recent_data > $Recent_TB_Num); store_data($Recent_TB_ID, $recent_data); } respond_exit(); } elsif ($mode eq 'list') { my $tb_id = munge_tb_id(get_tb_id()); die("No TrackBack ID (tb_id)") unless $tb_id; my $me = $TB_URL || url(); ! print header('text/html; charset=Shift_JIS'), <

TrackBack...

--- 79,94 ---- pop @$recent_data if (@$recent_data > $Recent_TB_Num); store_data($Recent_TB_ID, $recent_data); } + if (open(FH, ">" . catfile($DataDir, $tb_id . '.js'))) { + print FH "document.write('@{[scalar(grep {$_} @$data)]}');\n"; + close FH; + } respond_exit(); } elsif ($mode eq 'list') { my $tb_id = munge_tb_id(get_tb_id()); die("No TrackBack ID (tb_id)") unless $tb_id; my $me = $TB_URL || url(); ! print header('text/html; charset=EUC-JP'), from_file($Header), <

TrackBack...

*************** *** 94,109 **** URL my $data = load_data($tb_id); print "
    \n" if (@$data); ! my $tmpl = qq{
  1. %s %s %s%s
  2. \n}; my $i = 0; #require POSIX; my $logged_in = is_logged_in(); for my $item (@$data) { ! my $title = encode("shiftjis", decode("utf-8", $item->{title}), Encode::FB_HTMLCREF); ! my $blog_name = encode("shiftjis", decode("utf-8", $item->{blog_name}), Encode::FB_HTMLCREF); ! my $excerpt = encode("shiftjis", decode("utf-8", $item->{excerpt}), Encode::FB_HTMLCREF); $blog_name = " - $blog_name" if ($blog_name); ! $excerpt = qq{ title="$excerpt"} if ($excerpt); #my $ts = POSIX::strftime("%B %d, %Y %I:%M %p", # localtime $item->{timestamp}); # 日付は日本語表記にこだわってみました。 --- 98,113 ---- URL my $data = load_data($tb_id); print "
      \n" if (@$data); ! my $tmpl = qq{
    1. %s: %s %s %s%s
    2. \n}; my $i = 0; #require POSIX; my $logged_in = is_logged_in(); for my $item (@$data) { ! my $title = Jcode->new($item->{title}, "utf8")->euc; ! my $blog_name = Jcode->new($item->{blog_name}, "utf8")->euc; ! my $excerpt = Jcode->new($item->{excerpt}, "utf8")->euc; $blog_name = " - $blog_name" if ($blog_name); ! #$excerpt = qq{ title="$excerpt"} if ($excerpt); #my $ts = POSIX::strftime("%B %d, %Y %I:%M %p", # localtime $item->{timestamp}); # 日付は日本語表記にこだわってみました。 *************** *** 113,120 **** my $ts = "$year年$mon月$mday日 $hour時$min分$sec秒"; printf $tmpl, $item->{url}, ! $excerpt, $title, $blog_name || "", $ts, $logged_in ? qq([DELETE]) : ''; --- 117,125 ---- my $ts = "$year年$mon月$mday日 $hour時$min分$sec秒"; printf $tmpl, $item->{url}, ! #$excerpt, $title, + $excerpt, $blog_name || "", $ts, $logged_in ? qq([DELETE]) : ''; *************** *** 128,135 **** print qq{

      [Log out]

      \n}; } } ! print qq{\n\n
      \n}; ! #print from_file($Footer); } elsif ($mode eq 'delete') { die "You are not authorized" unless is_logged_in(); my $tb_id = munge_tb_id(get_tb_id()); --- 133,140 ---- print qq{

      [Log out]

      \n}; } } ! print qq{\n\n}; ! print from_file($Footer); } elsif ($mode eq 'delete') { die "You are not authorized" unless is_logged_in(); my $tb_id = munge_tb_id(get_tb_id()); *************** *** 319,325 **** sub to_utf8 { my ($charset, $str, $len) = @_; ! my $str = encode('utf8', decode($charset, $str)); if ($len && length($str) > $len) { $str = round_utf8(substr($str, 0, $len - 3)); $str .= '...'; --- 324,330 ---- sub to_utf8 { my ($charset, $str, $len) = @_; ! my $str = Jcode->new($str, $charset)->utf8; if ($len && length($str) > $len) { $str = round_utf8(substr($str, 0, $len - 3)); $str .= '...';