#!/usr/local/bin/perl # # usemodwiki 1.0 内部にあるページをHTMLファイル化する # 1.wikiheader, wikifooterは削除 # 2.WikiNameのリンクを再帰取得 # 3.fetchコマンドを使用しているので、FreeBSD専用 # # 2004.02.25 first edition # # 初期設定 URLを記入してね。 $firsturl = "http://localhost/~george/cgi-bin/usemodwiki10/wiki.cgi?HomePage"; # ヘッダ部分削除 sub delete_header { my ($buf) = @_; $buf =~ s/
.*?(
)/$1/s; return $buf; } # フッタ部分削除 sub delete_footer { my ($buf) = @_; $buf =~ s/
.*?<\/div>//s; return $buf } # URLからのデータ取得 sub fetch_url_page { my ($url) = @_; my $buf = ""; my $line; open(IN, "fetch -d -1 -4 -v -o - $url |") || die "can not fetch $url. abort."; while() { $line = ""; read(IN, $line, 4096); $buf = $buf . $line; } close(IN); print "sub fetch_url_page : url = $url, size = " . length($buf) . "\n"; return $buf; } # wikiのベースURL取得 sub get_base_url { my ($url) = @_; my $ret = ""; if ( $url =~ /(.*)\?(.*)/ ) { $ret = $1; } else { $ret = $url; } return $ret; } # wikiのターゲットURL取得 sub get_target_url { my ($url) = @_; my $ret = ""; if ( $url =~ /(.*)\?(.*)/ ) { $ret = $2; } else { $ret = $url; } return $ret; } # a href action 部分を削除する # a href back 部分を削除する sub delete_a_href_action { my ($buf) = @_; $buf =~ s/.*?<\/a>//sg; $buf =~ s/.*?<\/a>//sg; return $buf; } # a href wiki page link 部分を通常ページリンクに変更 # ついでに、wiki page の再帰取得を行う。 sub replace_a_href_wiki_link { my ($buf) = @_; my $loop = 1; while ( $loop ) { if ($buf =~ /(.*?)<\/a>/s ) { if ( $1 ne "" && $WikiPageData{$1} eq "" ) { $WikiPageData{$1} = "1"; print "getting Wiki Name $1 \n"; proc_one_wiki_page($1); } $buf =~ s/(.*?)<\/a>/$2<\/a>/s; } else { $loop = 0; } } return $buf; } # 1ページのwikiページを処理する(Wiki Page Name) sub proc_one_wiki_page { my ($wiki_page_name) = @_; my $url = $base_url . "?" . $wiki_page_name; my $buf = fetch_url_page($url); $WikiPageData{$wiki_page_name . "-orig"} = $buf; $buf = delete_header($buf); $buf = delete_footer($buf); $buf = delete_a_href_action($buf); $buf = replace_a_href_wiki_link($buf); $WikiPageData{$wiki_page_name} = $buf; } # # メイン # $base_url = get_base_url($firsturl); $wiki_page_name = get_target_url($firsturl); proc_one_wiki_page($wiki_page_name); # # 最終出力 # foreach $wiki_name (sort (keys %WikiPageData)) { my $outfile = $wiki_name . ".html"; print "output filename $outfile \n"; open(OUT, "> $outfile") || die "can not open $outfile . abort."; print OUT $WikiPageData{$wiki_name}; close(OUT); } exit 0; # # end of file #