#!/usr/local/bin/perl -w
#
# 御茶御茶の新着情報用サーチスクリプト V1.02
#
# Copyright(c) 2001 Yuumi
# http://gochagocha.ribbon.to/
# gochagocha@ribbon.to
#
# 本プログラムはフリーソフトウェアーです。使用するには以下の使用許諾事項をお守りください
#
# 使用許諾事項
# 1.商用目的に使用してはいけません
# 2.著作権を削除して使用してはいけません
# 3.著作権を削除して2次創作物を作成する、又は2次配布を行ってはいけません
#------------- 初期設定 ---------
#require './jcode.pl';
local $findValue = 0;
my $bodyValue = '';
my $sstr = '';
my $maxhits = 75;
my $httpHeader = <<"_HTML_";
%% 日分の Yuumi の憂さ晴らしが見つかりました
_HTML_
my $httpFooter = <<"_HTML_";
御茶御茶にゅうすサーチ V1.00 Copyright(c) 2001 Yuumi
_HTML_
my $buffer;
my $pair;
my $slogFile = './slog.dat';
#---------------------------------
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
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("H2" , $1)/eg;
# &jcode'convert(*value,'sjis');
if ($name eq "sstr") {
$sstr = $value;
}
}
#$sstr = '台湾';
if( $sstr ne '' ){
if( opendir( RD , "./") ){
my $rDir = '';
while( $rDir = readdir RD ){
if( $rDir =~ /^news(.*)\.html/ ){
$bodyValue .= &searchStr( $rDir , $sstr );
}
}
closedir( RD );
}
}
if( open( WFI , ">>$slogFile" )){
print WFI time ."\,$sstr\,$ENV{'HTTP_REFERER'}\,$ENV{'REMOTE_HOST'}\,$ENV{'REMOTE_ADDR'}\n";
close( WFI );
}
if( $maxhits < $findValue ){
$bodyValue = "
検索結果が " . $maxhits ." 日を越えました。条件を増やしてください 2000 とか年数を指定すると良いかも |
"
}
if( open( WFI , ">-" )){
$sstr =~ s|[<>\"]||g;
$httpHeader =~ s/%value%/$sstr/;
$httpHeader =~ s/%%/$findValue/;
print WFI &writeHTTPHeader;
print WFI $httpHeader;
print WFI $bodyValue;
print WFI $httpFooter;
close( WFI );
}
exit;
#-------------------
sub searchStr{
my $SearchFile = $_[0];
my $SearchStr = '';
my $FindItem ='';
my @lines;
my %fiflag;
my @fitem = split( / / , $_[1] );
my $headPoint = 0 , $startLine = 0 , $endLine = 0 ,$ckStr = 0 , $j = 0 , $fp = 0 , $fid = 0;
my $findSousyoku = '
';
my $maxSearch = 0;
$SearchStr = '';
if( scalar( @_ ) < 2 ){ return ''; }
if( $fitem[0] eq '' ){ return ''; }
if( open( FI , $SearchFile )){
@lines = ;
close( FI );
foreach $FindItem ( @lines ){
if( $FindItem =~ m// ){ $startLine = $FindItem; }
if( $lines[ $FindItem ] =~ m/<\/tr>/ ){ $endLine = $FindItem; }
if( $startLine != 0 && $endLine != 0 && $startLine < $endLine ){
foreach $j ( @fitem ){
$fiflag{ $j } = 0;
}
for $j ( $startLine + 1 .. $endLine -1 ){
foreach $ckStr ( @fitem ){
$fp = 0;
$maxSearch = 0;
while((( $fp = index( $lines[$j] , $ckStr , $fp )) >= 0 ) && $maxSearch < 50 ){
$lines[$j] =
substr( $lines[$j] , 0 , $fp ) .
$findSousyoku .
$ckStr .
'' .
substr( $lines[$j] , $fp + length($ckStr) , length( $lines[$j] ));
$fp += length( $findSousyoku ) + 1;
$fiflag{ $ckStr } = 1;
$maxSearch++;
}
}
}
$fid = 1;
foreach $j ( @fitem ){
if( $fiflag{ $j } == 0 ){
$fid = 0;
}
}
if( $fid == 1 ){
for $j ( $startLine .. $endLine ){
$SearchStr .= $lines[ $j ];
}
$findValue++;
}
$startLine = $endLine = 0;
}
}
}
return $SearchStr;
}
#--- Write HTTP Header ----------------------
sub writeHTTPHeader{
my $ContentStr;
$ContentStr = "Content-type: text/html\n\n";
return $ContentStr;
}