#!/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_"; 御茶御茶からの新着情報過去ログましーん
index ページへ戻る
%% 日分の 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; }