namazu-ml(avocado)


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

HTML detection



塩崎です。
mknmzのロボット除けのところで、$DEFAULT_FILEが考慮されていないことに気づ
きました。
HTMLファイルの検出を何ヶ所も書くのも何なので、こっそりと(嘘)例のCGIのも
含めてサブルーチンにしてみました。お試しください。
# でも、CGIの出力がHTMLとは限らないんだよなあ...

*** mknmz.pl.orig	Sun Nov  1 23:34:41 1998
--- mknmz.pl	Wed Nov 25 16:11:26 1998
***************
*** 40,46 ****
      @FList, $FOOTERFILE, $FOOTERFILE_, $FOOTER_MSG_JA, $DeletedFilesCount,
      $FOOTER_MSG_EN, $HASH, $HASH_, $HEADERFILE, $HEADERFILE_,
      $HEADER_MSG_JA, $HEADER_MSG_EN, $HELPER_EXTENSIONS, $UpdatedFilesCount,
!     %HELPER_PROGRAMS, $HTML_SUFFIX, $HiraganaOpt, $INDEX, $NoDeleteProcessing,
      $INDEXINDEX, $INDEXINDEX_, $INDEX_, $INTSIZE, $INVALID_LENG,
      $KAKASI, %KeyIndex, $LITTLEENDIAN, $LOCKFILE, $LOCKFILE2, $TOTALFILESCOUNT,
      $LOCKMSGFILE, $LOCK_MSG_JA, $LOCK_MSG_EN, $LOGFILE, $LastKeyN,
--- 40,46 ----
      @FList, $FOOTERFILE, $FOOTERFILE_, $FOOTER_MSG_JA, $DeletedFilesCount,
      $FOOTER_MSG_EN, $HASH, $HASH_, $HEADERFILE, $HEADERFILE_,
      $HEADER_MSG_JA, $HEADER_MSG_EN, $HELPER_EXTENSIONS, $UpdatedFilesCount,
!     %HELPER_PROGRAMS, $HTML_SUFFIX, $CGI_DIR, $HiraganaOpt, $INDEX, $NoDeleteProcessing,
      $INDEXINDEX, $INDEXINDEX_, $INDEX_, $INTSIZE, $INVALID_LENG,
      $KAKASI, %KeyIndex, $LITTLEENDIAN, $LOCKFILE, $LOCKFILE2, $TOTALFILESCOUNT,
      $LOCKMSGFILE, $LOCK_MSG_JA, $LOCK_MSG_EN, $LOGFILE, $LastKeyN,
***************
*** 231,237 ****
  $DENY_FILE = '%OPT_DENY_FILE%';
  
  ## HTML の拡張子 .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp など
! $HTML_SUFFIX = 'html?|[ps]html|html\.[a-z]{2}|asp';
  
  ## MHonArc のメッセージ・ファイル
  $MHONARC_MESSAGE_FILE = 'msg\d{5}\.html(?:\.gz)?';
--- 231,240 ----
  $DENY_FILE = '%OPT_DENY_FILE%';
  
  ## HTML の拡張子 .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp など
! $HTML_SUFFIX = 'html?|[ps]html|html\.[a-z]{2}|asp|cgi';
! 
! ## CGI のディレクトリ /cgi-bin/, /htbin/ など
! $CGI_DIR = '/(cgi-bin|htbin)/';
  
  ## MHonArc のメッセージ・ファイル
  $MHONARC_MESSAGE_FILE = 'msg\d{5}\.html(?:\.gz)?';
***************
*** 427,435 ****
  	print ERRORSFILE "$cfile $err\n"; 
  	return 0;  # エラーの場合は 0 でリターン
      }
!     if ($RobotExcludeOpt && $cfile =~ /\.($HTML_SUFFIX)$/i && 
  	$contents =~ /META\s+NAME\s*=\s*([\'\"]?)ROBOTS\1\s+[^>]*CONTENT\s*=\s*([\'\"]?).*?(NOINDEX|NONE).*?\2[^>]*>/i) {
! 	$err = "is excluded because of <META> element.\n";
  	print $file_count + $file_segment . " $url $err\n" unless $QuietOpt;
  	print ERRORSFILE "$cfile $err\n"; 
  	return 0;  # エラーの場合は 0 でリターン
--- 430,438 ----
  	print ERRORSFILE "$cfile $err\n"; 
  	return 0;  # エラーの場合は 0 でリターン
      }
!     if ($RobotExcludeOpt && ishtml($cfile) && 
  	$contents =~ /META\s+NAME\s*=\s*([\'\"]?)ROBOTS\1\s+[^>]*CONTENT\s*=\s*([\'\"]?).*?(NOINDEX|NONE).*?\2[^>]*>/i) {
! 	$err = "is excluded because of <META> element.";
  	print $file_count + $file_segment . " $url $err\n" unless $QuietOpt;
  	print ERRORSFILE "$cfile $err\n"; 
  	return 0;  # エラーの場合は 0 でリターン
***************
*** 623,629 ****
      analize_rcs_stamp();
      $mhonarc_opt = 1 if 
  	(!$NoMHonArcOpt && $$contents =~/^$MHONARC_HEADER/);
!     if ($cfile =~ /\.($HTML_SUFFIX)$/i || $cfile =~ /($DEFAULT_FILE)$/) {
  	mhonarc_filter($contents, $weighted_str) 
  	    if $mhonarc_opt;
  	html_filter($contents, $weighted_str, $title, $fields, $headings);
--- 626,632 ----
      analize_rcs_stamp();
      $mhonarc_opt = 1 if 
  	(!$NoMHonArcOpt && $$contents =~/^$MHONARC_HEADER/);
!     if (ishtml($cfile)) {
  	mhonarc_filter($contents, $weighted_str) 
  	    if $mhonarc_opt;
  	html_filter($contents, $weighted_str, $title, $fields, $headings);
***************
*** 1440,1446 ****
      my ($tmp) = @_;
      my ($url);
      $url = $tmp;
!     $url =~ s!(.*)\Q$PSC\E($DEFAULT_FILE)$!$1/!; #省略可能なファイル名なら削除
      $url =~ s/\Q$TARGET_DIR$PSC\E/$URL_PREFIX/;
      if (($SYSTEM eq "MSWin32") || ($SYSTEM eq "os2")) {
  	# Shift_JIS の漢字を考慮して \ を / に変換 [09/26/1998]
--- 1443,1449 ----
      my ($tmp) = @_;
      my ($url);
      $url = $tmp;
!     $url =~ s!(.*)\Q$PSC\E($DEFAULT_FILE)(\?.*)?$!$1/$3!; #省略可能なファイル名なら削除
      $url =~ s/\Q$TARGET_DIR$PSC\E/$URL_PREFIX/;
      if (($SYSTEM eq "MSWin32") || ($SYSTEM eq "os2")) {
  	# Shift_JIS の漢字を考慮して \ を / に変換 [09/26/1998]
***************
*** 1655,1661 ****
      my ($name) = @_;
      push(@FList, $name) if 
  	( (! /^(($DENY_FILE)(\.gz|\.Z)?)$/i) &&
! 	 /^(($TARGET_FILE)(\.gz|\.Z)?)$/i && -f $_ && -r $_);
  }
  
  # インデックスの追加の準備を行う
--- 1658,1664 ----
      my ($name) = @_;
      push(@FList, $name) if 
  	( (! /^(($DENY_FILE)(\.gz|\.Z)?)$/i) &&
! 	 /^(($TARGET_FILE)(\.gz|\.Z|\?.*)?)$/i && -f $_ && -r $_);
  }
  
  # インデックスの追加の準備を行う
***************
*** 2773,2778 ****
--- 2776,2791 ----
  	  51770, 17655, 11744, 32966, 48622, 23162, 46352, 65423
  	  ]
  	 );
+ }
+ 
+ # 対象ファイルが HTML かどうかを判別
+ sub ishtml ($) {
+     my ($cfile) = @_;
+ 
+     ($cfile =~ /\.($HTML_SUFFIX)$/i || 
+     $cfile =~ /($DEFAULT_FILE)$/ || 
+     $cfile =~ /\?/ || 
+     $cfile =~ /($CGI_DIR)/i);
  }
  
  # find.pl をほんの少し修正して Symbolic link なディレクトリもたどるようにした

-- 
ただし、私は耳鼻咽喉が弱いので、会議は禁煙にしてください。
--
塩崎 毅彦(SHIOZAKI Takehiko)	<takehi-s@xxxxxxxxxxx>
Technical Center,	ASCII CORPORATION