Ruby - サイトマップ作成 - 特定のディレクトリ以下は詳細を出力しない
- 1. 概要
- 2. .ini ファイルの変更
- 3. .ini ファイル読み込みモジュール
- 4. メインモジュール
1. 概要
一応、前節でモジュールはできあがったのですが・・・。
基本的には、全コンテンツを出力しています。
これを、特定のディレクトリ以下は詳細を出力しないようにしたいと思います。
具体的にいうと、本サイトの場合「FreeBSD 8.4 RELEASE」以下は、公式には更新しませんので、詳細を出力しないようにしたいと思います。
2. .ini ファイルの変更
.ini ファイルの [sitemap] セクションに下記の変更を加えます。
[sitemap]
fullpath = html 形式のサイトマップのテンプレートファイル名を絶対パス付で指定
exturi = 詳細を出力しない URI をホワイトスペースで区切って指定
3. .ini ファイル読み込みモジュール
=begin
コンフィグレーションファイルの読込を行う
=end
require('pry')
require('inifile')
class ReadConf
def initialize()
end
def execute(path)
begin
parameter = Hash.new # ini ファイルから取得するパラメータ
database = nil # データベースの定義
linktag = nil # 取得すべきリンクを包括しているタグ名
linkclass = Array.new # 目次でリンクを定義しているクラス名
sitemapext = Array.new # サイトマップの詳細除外 URI
inifile = IniFile.load(path+'/.rssconf')
if (inifile[:database]) # [database] セクションがある
database = inifile[:database] # セクションの内容をそのまま取り込む
end
parameter[:database] = database # データベース定義
if (inifile[:link]) # [link] セクションがある
if (inifile[:link]['tag']) # tag アイテムがある
linktag = inifile[:link]['tag'] # tag = の定義を取得
end
if (inifile[:link]['class']) # class アイテムがある
cls = inifile[:link]['class'] # class = の定義を取得
split = cls.split(/\s/) # ホワイトスペースで分割
split.each do | item | # 配列として取り込む
linkclass.push(item)
end
end
end
parameter[:linktag] = linktag # リンクタグ定義
parameter[:linkclass] = linkclass # リンククラス定義
if (inifile[:sitemap]) # [sitemap] セクションがある
if (inifile[:sitemap]['fullpath']) # 出力ファイルをフルパスで指定
parameter[:sitemapfile] = inifile[:sitemap]['fullpath']
end
if (inifile[:sitemap]['exturi']) # exturi アイテムがある
cls = inifile[:sitemap]['exturi'] # exturi = の定義を取得
split = cls.split(/\s/) # ホワイトスペースで分割
split.each do | item | # 配列として取り込む
sitemapext.push(item)
end
end
end
parameter[:sitemapext] = sitemapext # 除外 URI 定義
rescue => error
exeptlog = ExceptLog.new
exeptlog.execute(self, error)
exit 1
ensure
return parameter
end
end
end
追加したのは 19行(除外 URI の定義の配列宣言)、 52~58行(exturi の定義を取得して配列への入れ直し)、52行(除外 URI 配列をグローバル変数 $paramter[:sitemapext] へ設定)になります。
4. メインモジュール
#!/usr/bin/env ruby
=begin
RSS 作成で収集した材料を元に .html 形式のサイトマップを作成する
=end
$LOAD_PATH << File.dirname(File.expand_path(__FILE__))
require('pry')
require('BaseClass')
require('ExceptLog')
require('ReadConf')
class Sitemap < BaseClass
def initialize
@@doc = ""
end
def link=(contents)
clone = contents[:document].clone
clone.slice!("index.html")
mylink = './' + clone
@@doc += '<li>'
@@doc += '<a href="'+mylink+'">'
@@doc += contents[:title]+"("+contents[:modified].strftime("%Y年%m月%d日")+" 更新)"
@@doc += '</a>'
@@doc += "</li>\n"
end
def write(tree, contents)
begin
if (tree == nil)
return
end
@@doc += '<ul>'+"\n"
tree.each do | parentKey, parentValue |
if (parentKey.class == String)
if (contents.has_key?(parentKey))
self.link=(contents[parentKey])
end
end
if (parentValue == nil)
next
end
$parameter[:sitemapext].each do | exturi |
if (parentKey == exturi)
@@doc += "</ul>\n"
return
end
end
if (parentValue.class == Hash)
parentValue.each do | chileKey, childValue |
write(childValue, contents)
end
else
parentValue.each do | child |
write(child, contents)
end
end
end
@@doc += "</ul>\n"
rescue => error
exeptlog = ExceptLog.new
exeptlog.execute(self, error)
exit 1
end
end
def doc
return @@doc
end
end
begin
readconf = ReadConf.new
$parameter = readconf.execute(File.dirname(File.expand_path(__FILE__))) # コンフィグレーションファイルの読込
tree = Hash.new
conArray = Array.new
Pathname.new(File.dirname(File.expand_path(__FILE__))+'/tree.dmp').open('rb') do | file |
tree = Marshal.load(file)
end
Pathname.new(File.dirname(File.expand_path(__FILE__))+'/contents.dmp').open('rb') do | file |
conArray = Marshal.load(file)
end
contents = Hash.new
conArray.each do | item |
contents[item[:uri]] = item
end
sitemap = Sitemap.new
sitemap.write(tree, contents)
Pathname.new($parameter[:sitemapfile]).open('w') do | file |
file.puts(sitemap.doc)
end
rescue => error
exeptlog = ExceptLog.new
exeptlog.execute(self, error)
exit 1
ensure
end
こちらの変更内容は。
47~52 行を追加して除外 URI で定義しているものに関しては、その配下を出力しないようにしています。
103行は、$parameter のキーが変わっているので変更しました。
|
|