PukiWiki 用の Google Sitemaps を生成
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 を生成するようだ。