コンテンツフィルタ
「今週中に、選択肢機能を実装します」とほかのメンバーに宣言したわりには、全然やる気がでなかった。こういう日は、無理にがんばらず楽なことをやって時間をつぶすに限る。
で、前々から書きたかったフィルタープロキシを書いてみる。
- 参考:るびま
コンセプトは、「特定URLに対してリンクを張ってあるページをブロックするフィルタ」。だいぶ前に思いついて、どんなもんの精度でブロックできるか気になっていたので、検証してみることにする。
時間切れで、高速化とURLリストの生成はできず。また明日やね。
ソースコードが読みたい方は"続きを読む"からどうぞ。ライセンスはNYSLで。
require 'webrick' require 'webrick/httpproxy' $KCODE='e' # URIリストの読み込み uri_list = [] File.open('uri.txt') {|file| file.each{|aLine| unless aLine.chomp.empty? uri_list.push aLine.chomp end } } # フィルターを生成する filter = lambda{|request,result| count = 0 if result['content-type'] =~ %r!text/html! uri_list.each{|uri| if result.body.include?(uri) puts "include #uri:" count += 1 end if count >= 1 result.body = '<html><body><h1>Blocked by ruby-proxy</h1></body></html>' break end } end } # プロキシサーバオブジェクトを作る s = WEBrick::HTTPProxyServer.new({ :BindAddress => '127.0.0.1', :Port => 8080, :Logger => WEBrick::Log::new("log.txt", WEBrick::Log::DEBUG), :ProxyVia => false, :ProxyContentHandler => filter }) # SIGINT を捕捉する。 Signal.trap('INT') do # 捕捉した場合、シャットダウンする。 s.shutdown end # サーバを起動する。 s.start