namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FW: Re: 表示順序・NEW



山本と申します。

From: Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx>
Subject: [namazu:01930] Re: FW: [namazu:01919] Re: 表示順序・NEW
Date: Wed, 27 Jan 1999 12:43:05 +0900

:> 古川と申します。
:> 
:> >> On Tue, 26 Jan 1999 12:03:09 +0900, "Tetsuji Kataoka" <kata@xxxxxxxxxxxxxx> said:
:> >> ●個々のID毎に”NEW"などの属性を付けて
:> >>  結果に表示することは可能でしょうか?
:>   >> 
:>   >> (?_?)
:>   >> 
:>   > すみません。これもサーチエンジンなどで検索結果に”NEW"などの
:>   > イメージが付いているのをみてそのようなコントロールが登録日
:>   > などによって制御できるかな?と思ったもので。
:>   > ご回答によればtime stampを持つということなので、
:>   > cgiなどで登録された日付がいつ以降であれば、”この情報は
:>   > 新しいですよ”といったことを”NEW"などのイメージを付加して
:>   > 検索結果に表示できたらと思って質問させていただきました。
:> 
:> 日付をチェックして、データベースに "now" とかを付加できるようなスクリ
:> プトを書いてみました。
:> 

現実逃避で wrapper にしてみました。
最後に更新時とその一つ前の更新時の間のタイムスタンプのファイルに new を
付加します。(山本は、毎週末に cron で叩いているので、他の方には約に立た
ないかもしれません。)

ちゃんとデバッグしていないのは、古川さんと同じ。。。
#! /usr/local/bin/perl

my $NAMAZU = "/usr/local/etc/httpd/cgi-bin/real_namazu.cgi";  # namazu の場所
my $NMZ_LOG ="/usr/local/etc/httpd/namazu/index/NMZ.log"; # log file の場所
my $NKF = "/usr/local/bin/nkf";        # nkf の場所
my $dir = "/usr/local/etc/httpd/htdocs";
my $new_icon = "<img src=\"\/icons\/new.gif\" alt=\"\">";
my %months = ('Jan', '01',
	      'Feb', '02',
	      'Mar', '03',
	      'Apr', '04',
	      'May', '05',
	      'Jun', '06',
	      'Jul', '07',
	      'Aug', '08',
	      'Sep', '09',
	      'Oct', '10',
	      'Nov', '11',
	      'Dec', '12');
my(@content,@tmp);
my $d_flag = 1;
my(@tmp1, @log_data, @u_date, $tmp_d);

if($d_flag) {
    open (D_FILE, ">/tmp/d_file");
}    
# wwwmgr@e1hs01<17> more NMZ.log

# [Base]
# Date: Sat Jan  9 21:41:35 1999
# Added   Files: 8,402 files
# [Append]
# Date: Sat Jan  9 23:54:36 1999
# Added   Files: 0 files

# 検索結果は、
# <DD><STRONG>Date</STRONG>:<EM>Wed, 12 Aug 1998 17:46:37</EM><BR>.....

open(LOG, $NMZ_LOG) || die "log file open error";
@log_data = <LOG>;
close(LOG);
for($loop = 0; $loop < ($#log_data + 1) ; $loop++) {
    if($log_data[$loop] =~ /Base|Append/) {
	push (@u_date, $log_data[$loop + 1]);
    }
}
if($d_flag) {
    foreach (@u_date) {
	print D_FILE $_;
    }
    print D_FILE "No of index: $#u_date\n";
}

if($#u_date == 0){
    $date_str = "0"; # Base しかなかった dummy を設定
} else {
# 最終更新の一個まえの更新からのを新規とするので 1 を引く
    @tmp1 = split(/ +/, $u_date[$#u_date - 1]);
# Date: Sat Jan  9 23:54:36 1999
#    ↓
# 19990109235436 の形式に直す
    chop($tmp1[5]); # 西暦の後にある改行を削る
    $tmp1[4] =~ s/://g; # 23:54:36 -> 235436
    if($tmp1[3] < 10) {
	$date_str = join("",$tmp1[5], $months[$tmp1[2]], "0", $tmp1[3], $tmp1[4]);
    } else {
	$date_str = join("",$tmp1[5], $months[$tmp1[2]], $tmp1[3], $tmp1[4]);
    }
}
if($d_flag) {
    print D_FILE $u_date[$#u_date - 1];
    print D_FILE "$date_str\n";
}

# 検索結果を euc-jp で読み込む
open(IN, "$NAMAZU| $NKF -e|") || die "namazu error";
@content = <IN>;
close(IN);

# iso-2022-jp で出力する
open(STDOUT, "|$NKF");

foreach(@content) {
    # Namazu の結果から日付の行を探す
    # <DD><STRONG>Date</STRONG>:<EM>Wed, 12 Aug 1998 17:46:37</EM><BR>.....
    if(/<DD><STRONG>Date<\/STRONG>/) {
	@tmp = split(/EM>/, $_);
	$tmp[1] =~ s/<\///;
	$tmp[1] =~ s/ //;
	$tmp[1] =~ s/:/ /g;
	@tmp1 = split(/ /, $tmp[1]);
	if($tmp1[1] < 10) {
	    $tmp_d = join("", $tmp1[3], $months[$tmp1[2]], "0", $tmp1[1],
			  $tmp1[4], $tmp1[5], $tmp1[6],);
	} else {
	    $tmp_d = join("", $tmp1[3], $months[$tmp1[2]], $tmp1[1],
			  $tmp1[4], $tmp1[5], $tmp1[6],);
	}		
	if($d_flag) {
	    print D_FILE "$tmp_d\n";
	}
	if( $date_str < $tmp_d){
	    s/<DD><STRONG>/<DD>$new_icon<STRONG>/;
	    print $_;
	} else {
	    print $_;
	}
    } else {
	print $_;
    }
}
if($d_flag) {
    close(D_FILE);
}