PukiWiki 用の Google Sitemaps を生成
2005-11-22
Google Sitemaps がまた注目されているらしいので、PukiWiki 用の sitemaps.xml を生成するやっつけツールを公開してみる。 コマンドラインで使うものなので、シェルが使える環境なのが前提になる。 cron で定期的に動作させるといいかも。 PukiWiki の wiki ディレクトリを引数として実行すると、 sitemaps.xml を生成する。
$ ./sitemaps.rb /var/pukiwiki/wiki > sitemaps.xml
ソースは以下のとおり。 PukiWiki を静的リンクで動作させている場合は、 base_url_head の「index.php?」を取り除いて base_url_foot に「.html」を追加して使う。 high_list や mid_list に記述したページは若干 priority が高くなる。 目次用のページを記述するといいかも。
#!/usr/bin/env ruby
require 'uri'
# ----- setting -----
base_url_head = 'http://example.com/index.php?'
base_url_foot = ''
high_list = %w{FrontPage MenuBar}
mid_list = %w{|RecentChanges}
ignore_list = %r{^(:)|(PukiWiki)}
# -------------------
if ARGV.size != 1
STDERR.puts "usage: sitemaps.rb wiki_dir"
exit 1
end
base_dir = ARGV.shift
now = Time.now.to_i
puts %q|<?xml version="1.0" encoding="UTF-8"?>|
puts %q|<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">|
Dir.glob("#{base_dir}/*txt") {|file|
data = {}
file =~ %r|/(\w+)\.txt|
data[:name] = $1.to_a.pack('H*0')
next if data[:name] =~ ignore_list
data[:lastmod] = File.mtime(file)
data[:loc] = "#{base_url_head}#{URI.escape(data[:name])}#{base_url_foot}"
diff = now - data[:lastmod].to_i
if(diff < 60 * 60)
data[:changefreq] = 'hourly'
elsif(diff < 60 * 60 * 24)
data[:changefreq] = 'daily'
elsif(diff < 60 * 60 * 24 * 7)
data[:changefreq] = 'weekly'
else
data[:changefreq] = 'monthly'
end
if(high_list.index(data[:name]))
data[:priority] = 0.8
elsif(mid_list.index(data[:name]))
data[:priority] = 0.7
else
data[:priority] = '0.5'
end
puts %q|<url>|
puts %Q|<loc>#{data[:loc]}</loc>|
puts %Q|<lastmod>#{data[:lastmod].utc.strftime('%Y-%m-%dT%H:%M:%S+00:00')}</lastmod>|
puts %Q|<changefreq>#{data[:changefreq]}</changefreq>|
puts %Q|<priority>#{data[:priority]}</priority>|
puts %q|</url>|
}
puts %q|</urlset>|
PukiWiki-official の欲しいプラグイン/207 をみるとGoogle Sitemaps プラグインというものもある。 こちらは recent.dat から sitemaps.xml を生成するようだ。