ニコニコ動画 エコノミー回避プロキシを作ってみた
最新 → NicoProxy ニコニコ動画SP1に対応しました - unnecessary words
ニコニコ動画のエコノミーを回避するプロキシを作ってみました。回避できるのは一度通常モードで見たことのある動画だけ。以下の機能を持ちます。
- 通常モードで再生した動画をキャッシュ
- エコノミー再生時に動画ファイルをキャッシュにすり替える
#!/usr/bin/ruby -Ku require 'webrick' require 'webrick/httpproxy' handler = Proc.new() do |req, res| if req.unparsed_uri =~ %r!http://.*\.nicovideo\.jp/smile\?v=(.*)! id = $1 f_name = "sm#{id.split('.')[0]}.flv" if id =~ /low$/ # エコノミーモード if File.exist?(f_name) open(f_name, "r"){|io| res.body = io.read} res.header.delete("content-length") end else # 通常モード if !File.exist?(f_name) || File.size(f_name) < res.header["content-length"].to_i puts "FILE SAVE #{f_name}" STDOUT.flush open(f_name, "w"){|io| io.write(res.body)} end end end end config = { :BindAddress => '0.0.0.0', :Port => 8080, :ProxyContentHandler => handler, } s = WEBrick::HTTPProxyServer.new(config) [:INT, :TERM].each{|sig| Signal.trap(sig){s.shutdown}} s.start
FireFoxなら、FoxyProxyのパターンに http://.*\.nicovideo\.jp/smile\?v=.* とか設定して使うと幸せになれそう。
キャッシュしてるファイルは、リクエストを投げずにローカルファイル返すようにしたいけど、やり方がわからん。
あと、WEBRickのスレッド?動作がどうなってるのか、あんまり分かってない。どっか解説してるとこないだろうか。
こちらを参考にさせていただきました。
・ゆーすけべー日記