[Tips] gonzui - 改造
読み込み対象の絞り込み
gonzuiは,読み込みをはじく,フィルタとしての正規表現パターンを設定することが可能だが,
読み取りを許可するパターンを設定する方法はない.
そこで,gonzuiを改造してみた.
ただ,これ,やっぱり,デフォルトのフィルタと共存させるのはちょっとつらいなぁ.
なんか,いいアイデアないかなぁ.
んで,改造
gonzuircに,include_patternを追加する.以下抜粋.
:exclude_pattern => /~$|.bak$|CVS|.svn/, :include_pattern => /.cpp$|.c$|.h$/, :gonzui_log_file => "/var/gonzui/gonzui.log",
そして,このconfigファイルを読み込むConfigクラス,config.rbを修正する.
module Gonzui class Config include Util def initialize # 中略 @include_pattern = nil
これでinclude_patternをConfigクラスのメンバ変数として使える.
次にfetcher.rbのAbstractFetcherを編集.
class AbstractFetcher include Util def initialize(config, source_uri, options = {}) @include_pattern = @config.include_pattern
次にexclude_patternに被せるため,かなりダサイ関数?を追加.
def include_only_extention(relative_path) if( @include_pattern==nil) return false end if(@include_pattern.match(relative_path)!=nil) return false end return true end
んでもって,collect関数?を修正.
def collect directory = @base_uri.path relative_paths = [] Dir.all_files(directory).map {|file_name| next if exclude?(file_name) next if include_only_extention(file_name) relative_path = File.relative_path(file_name, directory) relative_paths.push(relative_path) } return relative_paths end
さらにHTTPFetcherクラスも修正.
def collect relative_paths = [] @content.scan(/href=(["'])(.*?)1/i).each {|qmark, link| u = URI.parse(link) next if u.path.nil? u.path.chomp!("/") next unless u.relative? next if /^./.match(u.path) next if exclude?(u.path) next if include_only_extention(u.path) relative_paths.push(u.path) } return relative_paths end
これでgonzuircのinclude_patternに書き込まれた正規表現をパスしたもののみがデータベースにインポートされるようになるはず.
誰か,綺麗なのを作ったら,ください.
なんか,不安だ.このソースコード.