Namazu-devel-ja(旧)


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

Re: [namazu-users-ja] Re: page /w noindex has indexed



もりもとです

In article <20000408082203H.satoru-t@xxxxxxxxxxxxxxxxxx>,
 at Sat, 08 Apr 2000 08:22:03 +0900,
  on [namazu-users-ja] Re: page /w noindex has indexed,
 Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:

> Jun Morimoto <morimoto@xxxxxxxxxxxxxxxxxx> wrote:
> 
> >● 現象
> >
> >NOINDEX 指定のページが mknmz 対象になってしまう
> >
> >● 解説
> >
> ><HEAD> 内に <META NAME="ROBOTS" content="NOINDEX"> があり、
> >かつ <A NAME="foo"></A> 指定のあるページを
> >--html-split を指定して mknmz すると、
> >--robots も指定してあるにかかわらず、
> >最初の A NAME="" 以降のセクション? がインデキシングされてしまう。

とりあえずパッチ。namazu 2.0.4 の pl/htmlsplit.pl が対象です。

● 対処

  htmlsplit.pl は、元ファイルのヘッダの
  <LINK REV="MADE" HREF="mailto:誰"> を軽く調べ、分割後の HTML 群の
  ヘッダに施すようになっている。

  本パッチは、元ファイルの <HEAD> 〜 </HEAD> 内にある <META .. >
  を拾って、分割後の HTML 群の <HEAD> 〜 </HEAD> 内に挿入するように
  したもの。

  特に <META NAME="ROBOTS" content="NOINDEX"> のみを対処したわけではない。

● 対処2

  <LINK REV="MADE" HREF="mailto:誰"> だけでなく
  <LINK REV="MADE" HREF=mailto:誰>
  <LINK HREF="mailto:誰" REV="MADE">

  などでも拾えるようにした。ただ、しょせん正規表現なので、気合いが
  はいった処理ではない。

> 対策としては次の 2つが考えられます。
> 
>   1. しぶしぶ直す
>      - 直せなくはないが、どろどろとプログラムが複雑化する

あまりエレガントではないですが、NOINDEX に特化した adhoc な fix とかで
はないので、許容範囲かな?

>      - すでに複雑性は限界に近づきつつある
>      - --robots は僕は使っていない
>      - よって、直す気が起きない
>
>   2. これを機会に --robots という毛深い (hairy) 機能は廃止する
>      - % find . -type f -name '*.html' | \
>          xargs grep -l '<META NAME="ROBOTS" content="NOINDEX">' > list;
>          mknmz --target-list=list
>        といった感じでなんとかなりますよね。必要とあれば、専
>        用の shell/perl script を用意してもいいです。

なるほど。「これはシカトしてね」なファイルを選り分ける機能を別プログラ
ムにしてしまえば、本体をややこしくしたり バグを混ぜたりすることなく、
機能追加していけますね。
adhoc な対処、いや local hack もより手軽になるかも。

むかしあった .htaccess を見る機能を よりそれっぽくして復活とか、
Netscape Commerce Server の .nsconfig とか、
あるいは .cvsignore を見ちゃうとか。

# 「このファイルを除外したい/してくれ」というのは、カイシャのサイトを
# やっているとなかなか面倒かつ切実な問題なんですね ;_;

>        (誰か作ってくれないかな)

うーむ、ひまができたら... ^^;

.. 森本 淳 (Jun Morimoto) ...........................................
.. morimoto@xxxxxxxxxxxxxxxxxx http://www.toybox.ne.jp/~morimoto/ ...
*** namazu-2.0.4/pl/htmlsplit.pl-	Tue Apr 11 21:43:02 2000
--- namazu-2.0.4/pl/htmlsplit.pl	Tue Apr 11 22:02:19 2000
***************
*** 35,40 ****
--- 35,41 ----
  <head>
  <link rev=made href="mailto:${author}";>
  <title>${subject}</title>
+ ${meta}
  </head>
  <body>
  <hr>
***************
*** 55,60 ****
--- 56,62 ----
      my %info = (
  		'title'    => get_title(\$cont),
  		'author'   => get_author(\$cont),
+ 		'meta'     => get_meta(\$cont),
  		'anchored' => "",
  		'name'     => "",
  		'base'     => $base,
***************
*** 108,114 ****
  
      # <LINK REV=MADE HREF="mailto:ccsatoru@xxxxxxxxxxxxxxxxxx";>
  
!     if ($$contref =~ m!<LINK\s[^>]*?HREF=([\"\'])mailto:(.*?)\1\s*>!i) { #"
  	$author = $2;
      } elsif ($$contref =~ m!.*<ADDRESS[^>]*>([^<]*?)</ADDRESS>!i) {
  	my $tmp = $1;
--- 110,116 ----
  
      # <LINK REV=MADE HREF="mailto:ccsatoru@xxxxxxxxxxxxxxxxxx";>
  
!     if ($$contref =~ m!<LINK\s[^>]*?HREF=([\"\']*)mailto:(\S*)\1.*>!i) { #"
  	$author = $2;
      } elsif ($$contref =~ m!.*<ADDRESS[^>]*>([^<]*?)</ADDRESS>!i) {
  	my $tmp = $1;
***************
*** 119,124 ****
--- 121,140 ----
      return $author;
  }
  
+ sub get_meta ($) {
+     my ($contref) = @_;
+ 
+     my $meta = undef;
+ 
+     for my $line (split("\n", $$contref)) {
+ 	if ($line =~ /<META /i) {
+ 	    $meta .= $line;
+ 	}
+     }
+ 
+     return $meta;
+ }
+ 
  sub write_partial_file($$$$$) {
      my ($cont, $name, $anchored, $id, $info_ref) = @_;
  
***************
*** 129,134 ****
--- 145,151 ----
      my $orig_title    = $info_ref->{'title'};
      my $prev_name     = $info_ref->{'name'};
      my $prev_anchored = $info_ref->{'anchored'};
+     my $meta          = $info_ref->{'meta'};
  
      html::remove_html_elements(\$prev_anchored);
      $prev_anchored =~ s/^\s+//;
***************
*** 149,154 ****
--- 166,172 ----
      my $header = $Header;
      $header =~ s/\$\{subject\}/$title/g;
      $header =~ s/\$\{author\}/$author/g;
+     $header =~ s/\$\{meta\}/$meta/g;
      print $fh $header;
      print $fh $cont;