#!/usr/local/bin/perl #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ Ahhan! Search engine (Ahhan! BBS用) _/ my $version = '2.55b'; #15/Sep/2000/ - 15/Oct/2001 _/ #_/ by bunbun _/ #_/ Mail: mig-poco@kcn.ne.jp _/ #_/ Home: http://www1.kcn.ne.jp/~mig-poco/ (旧) _/ #_/ Home: http://www.kokobbs.com/ahhan/ (新) _/ #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ## ---[注意事項]------------------------------------------------------ ## 1. このスクリプトは、初心者が作ったフリーソフトです。 ## 2. このスクリプトを使用したいかなる損害に対しても作者は一切の責任を ##  負いません。 ## 3. 設置に関する質問はサポート掲示板にお願いいたします。 ## また、メールによる質問はご遠慮ください。 ## ------------------------------------------------------------------- require './jcode.pl'; require './pref.cgi'; require './proofing.pl'; my $design_file=$pref::design_file; my $top_p=$pref::top_p; my $sup_name=$pref::sup_name; my $sup_email=$pref::sup_email; my $script=$pref::script; my $log_dr=$pref::log_dr; my ($html_dr); if($pref::html_dr) { $html_dr = $pref::html_dr; } else { $html_dr = $log_dr; } my $cgi_only=$pref::cgi_only; my $index=$pref::index; my $boardname=$pref::boardname; my $boardmenu=$pref::boardmenu; my $extension=$pref::extension; my $search=$pref::search; my $kensaku=$pref::kensaku; my $thre_to=$pref::thre_to; require "./$design_file"; my $bakgr_url=$mbbslib::bakgr_url_a; my $bgcolor =$mbbslib::bgcolor; my $style=$mbbslib::style; my $bakgr=$mbbslib::bakgr; my $sitetitle2=$mbbslib::sitetitle2; my $in_bgcolor=$mbbslib::in_bgcolor; my $parce=$mbbslib::parce; my $parcekiji=$mbbslib::parcekiji; my $ti_li_fc=$mbbslib::ti_li_fc; my $space1=$mbbslib::space1; my $space2=$mbbslib::space2; my $space3=$mbbslib::space3; my $script_name = "Ahhan! Search"; my $kaiz = ''; if ($kensaku == 0){ &error; } &decode; print "Content-type: text/html; charset=Shift_JIS\n\n"; if ($mode eq 'search_in') { &search_in; } if ($mode eq 'search') { &search; } exit; sub decode { my %FORM ; if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 5000) { &error("投稿量が大きすぎます。","no"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } my @pairs = split(/&/,$buffer); foreach $pair (@pairs) { my ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/\"/"/g; $value =~ s//>/g; $FORM{$name} = $value; if($name eq 'word'){ }else{ $FORM{$name} =~ s/\W//g; } } $mode = $FORM{mo}; if($FORM{mo} eq '' && $FORM{mode}) { $mode = $FORM{mode}; } $folder= $FORM{fo}; if($FORM{fo} eq '' && $FORM{fol}) { $FORM{fo} = $FORM{fol}; } $cond = $FORM{cond}; $word = $FORM{word}; $word =~ s/ / /g; $word =~ s/\t/ /g; @pairs_b = split(/ /,$word); $no_a=0; if (open(BN,"$boardname")){ @boardname = ; close(BN); @select_board = 0; $select_board [$no_a]=(<<"EOF"); EOF }else{ $bbstitle=$folder; $tbgc_a ="#dddddd"; $bd_col ="#119191"; $tp_col ="#33b3b3"; $tb_col ="#008080"; $tb_colb ="#007070"; $tf_col ="#ffffe0"; } $no_a=0; $url_sf = "./"; $select_bd =(<<"EOF"); @select_board EOF } sub search_in { &pageheader; print <<"EOF";
[ 検索エンジンの説明 ]
  • この検索エンジンは、$bbstitle にあるログを検索します。
  • 複数のキーワードを一度に選ぶ場合は、ワードとワードの間に半角スペースを入れラジオボタンを選択してください。
    AND を選んだ場合==> 書き込まれた文字総てを含むログを探します。
    OR を選んだ場合  ==> 書き込まれた文字のいずれかが含まれるログを探します。
$space1 EOF &mbbslib'MekeFoot($sup_email,$sup_name,$script_name,$version,$kaiz,"out"); exit; } sub search { local @pairs_b = split(/ /,$word); &pageheader; if ($word) { @slog = &log_search($log_dr,$folder,$extension,$cond); }else{ print <<"EOF";

検索する文字を入力してください。

$space1 EOF &mbbslib'MekeFoot( $sup_email,$sup_name,$script_name,$version,$kaiz,"out" ); exit; } $total = @slog; if ($#pairs > 0) { if ($cond eq "and") { $a_com = "総て"; }else{ $a_com = "いずれか"; } }else{ $a_com = ""; } print <<"EOF";

EOF foreach $pair_b (@pairs_b) { print <<"EOF"; 「$pair_b」  EOF } if ($total == 0) { print <<"EOF"; の文字$a_comを含むレスは見つかりませんでした。

$space1 EOF &mbbslib'MekeFoot( $sup_email,$sup_name,$script_name,$version,$kaiz,"out" ); exit; } print <<"EOF"; の文字$a_comを含むレスのヒット数 : $total 件

EOF &mbbslib'SearchTable ( $bd_col,$tbgc_a ); $s_no = 0; foreach (@slog) { local($folder,$thre_no,$dater,$namer,$sub,$msg,$nor,$emailr) = split(/<>/,$_); $s_no++; print <<"EOF";   $s_no    $sub  $nor  $dater   EOF } print <<"EOF"; $space1 EOF &mbbslib'MekeFoot($sup_email,$sup_name,$script_name,$version,$kaiz,"out"); exit; } sub pageheader { $url_a = ''; if ($cgi_only) { $b_index =(<<"EOF"); EOF } else { $b_index =(<<"EOF"); EOF } if($mode eq 'search'){ $sul = "結果";} $menutitle =(<<"EOF");  ◆ ワード検索 $sul EOF $js_cookie = ""; $pageheader = &mbbslib'Pageheader( $mode,$sub,'',$bbstitle,$style, $bgcolor,$bakgr_url,$bakgr,$js_cookie ); if($top_p){ $p_top_p =(<<"EOF"); ■ HOME  EOF } $top_ground_b = &mbbslib'Top_ground_b ( $parce,$in_bgcolor,"",$sitetitle2,$tf_col, $bbstitle,$menutitle,$space1,$p_top_p ); print <<"EOF"; $pageheader $top_ground_b EOF &mbbslib'SearchForm ( $cate_link,$url_sf,$search,$folder,$select_bd, $b_index,$bbstitle,$space1 ); } sub log_search { my ( @lognew,$thre_no,$dat_a,$dat_b,@lines, $sflag,$slo,$sub,$sub_a,$no, $date,$name,$home_a,$email,$msg, $reto,$sato,$close,$updn,$sw_a, $sw_b,$sflag,@check_a,$line_a,$pair_b ); my $lognewfile = &mbbslib'File_Name ($_[0],$_[1],"","new",$_[2]); open(LOG,$lognewfile) ; @lognew = ; close(LOG); my $no = 0; my $nothr = 0; my @slog=(); foreach (@lognew) { $lognew[$nothr] =~ s/\n//g; $thre_no=$lognew[$nothr]; $dat_a = &mbbslib'File_Name ($_[0],$_[1],$thre_no,"a",$_[2]); $dat_b = &mbbslib'File_Name ($_[0],$_[1],$thre_no,"b",$_[2]); open(LOG,$dat_a); @lines = ; close(LOG); ($sub,$no,$date,$name,$home_a,$email,$msg,$reto,$sato,$close,$updn,$sw_a,$sw_b) = split(/<>/, $lines[0]); $sub_a=$sub; $sflag=0; @check_a = ($sub,$no,$date,$name,$home_a,$email,$msg,$reto,$sato,$close,$updn,$sw_a,$sw_b); foreach $line_a (@check_a) { if ($sflag eq 0) { foreach $pair_b (@pairs_b) { if (index($line_a,$pair_b) >= 0) { $sflag = 1; if ($_[3] eq 'or') { last; } } else { if ($_[3] eq 'and') { $sflag=0; last; } } } if ($sflag == 1) { $slo="$_[1]<>$thre_no<>$date<>$name<>$sub<>$msg<>$no<>$email\n"; push(@slog,$slo); } } } if(open(LOG,$dat_b)){ @b1st = ; close(LOG); foreach $data (@b1st) { $count++; chop($data); ($no,$date,$name,$home_a,$email,$msg,$sw_a,$sw_b) = split(/<>/, $data); $sflag=0; @check_b = ($no,$date,$name,$home_a,$email,$msg,$sw_a,$sw_b); foreach $line_b (@check_b) { if ($sflag eq 0) { foreach $pair_b (@pairs_b) { if (index($line_b,$pair_b) >= 0) { $sflag = 1; if ($_[3] eq 'or') { last; } } else { if ($_[3] eq 'and') { $sflag=0; last; } } } if ($sflag == 1) { $slo="$_[1]<>$thre_no<>$date<>$name<>$sub_a<>$msg<>$no<>$email\n"; push(@slog,$slo); } } } } } $nothr++; } return @slog; } sub error { print "Content-type: text/html; charset=Shift_JIS\n\n"; print <<"EOF";

■ ご使用出来ませんエラー ■

現在ヘッドラインは、運用しておりません。

EOF exit; }