2006/01/19(木)Google Sitemap XML出力 perl スクリプト
というわけで、Googleのサイトマッププロトコルに対応した
サイトマップを生成出力するperlスクリです。
マニュアルとかは作ってませんが、
サイトマップを導入しようなんて考えてるユーザさんには必要ないでしょう(ぇ
以下にそのままペーストしておきます。改変とかも自由。
# 自分のとこではGoogleに登録してValidate待ちなので、まだ動作保証しません。
Valid出ました。というわけで使え^^
#!/usr/bin/perl # googleサイトマップ出力スクリ ver 0.01 / 月影とも 2006. 1.19 $basedir = './'; # スクリからみたトップの相対path $sitetop = 'http://tsu.sakura.ne.jp/'; # $basedirのURL OutputHead(); #ヘッダ # 個別URL追加 # 引数は url, 更新頻度, 優先度, 実ファイル名(日付を見るため) OutputUrl('','daily',0.9,'index.html'); OutputUrl('sb.cgi?pid=0','monthly',0.3); # ディレクトリ単位(サブディレクトリも検索します) # 引数は ディレクトリ名 OutputDir('article'); OutputFoot(); #フッタ sub OutputDir{ my $dirname = shift; opendir DIR, $dirname; @dirlist = readdir DIR; closedir DIR; # .htmlファイル foreach(grep { m/\\.html$/ } map {-f "$basedir/$dirname/$_" ? $_ : '' } @dirlist) { my $cf='',$pr='',$rfn = ''; # 個々の細かいことはここに書く。 if($_ eq 'index.html') { $rfn = $_; $_ = ''; $cf = 'weekly'; $pr = '0.8'; } OutputUrl("$dirname/$_",$cf,$pr,$rfn); } # ディレクトリを掘る foreach(grep { m/^[^\\.]/ } map {-d "$basedir/$dirname/$_" ? $_ : '' } @dirlist) { OutputDir("$dirname/$_"); } } sub OutputHead { print "Content-Type: text/xml\\n\\n"; print '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="[http://www.google.com/schemas/sitemap/0.84:">http://www.google.com/schemas/sitemap/0.84">] '; } sub OutputFoot { print "</urlset>\\n"; } # URLを出力 sub OutputUrl { my $fn = shift; my $cf = shift; my $pr = shift; my $realfn = shift; my $t = $realfn ? (stat($realfn))[9] : (stat($fn))[9]; print "<url>"; my $url = "$sitetop/$fn"; $url =~ s![http://!!;] $url =~ s!//!/!g; $url =~ s!\\&!\\&!g; $url =~ s!\\'!\\'!g; $url =~ s!\\"!\\"!g; $url =~ s!\\<!\\<!g; $url =~ s!\\>!\\>!g; print "<loc><a href="http://$url</loc>";">http://$url</loc>";</a> if($t){ my ($sec,$min,$hour,$mday,$mon,$year,$wno) = gmtime($t); print "<lastmod>".sprintf("%04d-%02d-%02dT%02d:%02d:%02d+00:00", ($year+1900),($mon)+1,$mday,$hour,$min,$sec)."</lastmod>"; } print "<changefreq>$cf</changefreq>" if($cf); print "<priority>$pr</priority>" if($pr); print "</url>\\n"; }