fc2ブログ

ニコニコ動画とかyoutubeの動画ファイルを自動的に保存するRubyスクリプト

相変わらず暇なので新人の人に教えたり、Webで勤怠管理とかできないか?XOOPSとかフリーのCMSでなんとかならない?とかオーダーが社内であったのでちょろっと調べたり。で、PHPとかスクリプト言語調べる流れでRubyとかも見ているのですが、なんか色々いい感じなのでちょっとまじめに?やってみようかなという気になっています。
 で、表題の件なのですがWEBrickというライブラリを使って簡単にプロキシサーバか書ける、というのを眺めていたらnicocacheみたいなプロキシサーバ作れないかなーと。nicocacheはニコ動専用なんですが、youtubeもそんな感じで簡単にファイルとれたらなぁ、と思いまして作ってみたら
#!/usr/bin/env ruby
require 'webrick'
require 'webrick/httpproxy'

class MyProxyServer < WEBrick::HTTPProxyServer
  def proxy_service(req, res)
    super

    if /video*/ =~ res['Content-Type']
      open(Time.now.strftime("%Y%m%d%H%M%S") + '.flv','wb'){|f| f.print res.body}
    end
  end
end

config = {
  :BindAddress => '0.0.0.0',
  :Port => 8080,
  :Logger => WEBrick::Log.new($stderr),
  :ProxyContentHandler => nil,
  :ProxyVia => false,
}
s = MyProxyServer.new(config)
trap('INT') { s.shutdown }
s.start


えらい簡単だった。まぁ機能も単純(レスポンスヘッダーのContent-TypeがvideoXXXだったら問答無用でflvファイルとして保存するだけ)ですが。
 サンプルとして参照させていただいたコードから変更したのは赤字の部分だけです。
 使い方は上のコードをなんか適当なファイル名で保存(例:proxy.rb)、起動(例:コマンドプロンプトでruby proxy.rbとか。ActiveRubyをインストールしたとか関連付けができているなら保存ファイルダブルクリックとかでもいけるはず)。ブラウザのプロキシの設定でプロキシのURLをlocalhost、ポートを8080に設定すればあとはブラウザで普通にニコ動とかyoutube見ていけば勝手にコードを置いたディレクトリにYYYYmmDDHHMMSS.flv(例:20090428221301.flv)というファイルができているはず。
 欠点として動画のファイルを全部ダウンロードし終わるまでブラウザ上のプレーヤーにレスポンスが送られないので読み込みながら再生、見たいなことができないです。それなので大きなサイズの動画のページではいつまでたっても止まったままに見えてしまいますがしばらくそのまま待てば大丈夫のはず。止まったままなのが気に食わない方はFirefoxならSwitchProxyとか使って動画を落としたいページ以外は適用しないようにするとかしてください。
スポンサーサイト



TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)