sshのポートフォワードを使ってエリア外からradikoを録音するプログラム
sshのポートフォワード機能を使ってエリア外からradikoを録音するRubyプログラムを作成しました。(何番煎じかわかりませんが)
一応Rubyのsshライブラリの使い方のサンプルにもなってます。
begin require "net/ssh" rescue LoadError require "rubygems" require "net/ssh" end def command(cmd) puts cmd system cmd end def change_ext(path, ext, new_ext) File.dirname(path) + "/" + File.basename(path, ext) + new_ext end def flv2mp3(flv) mp3 = change_ext(flv, ".flv", ".mp3") if File.exists? flv command "ffmpeg -i #{flv} #{mp3}" command "rm -f #{flv}" end end def get_radiko_mp3(channel, time) user = "user" host = "host" local_port = 8000 now = Time.now.strftime("%Y-%m-%d_%H-%M") flv = "radiko_#{channel}_#{now}.flv" alist = [["rtmp", "rtmpe://127.0.0.1"], ["port", local_port.to_s], ["playpath", "simul-stream"], ["swfUrl", "http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/1.1/player/player_0.1.2.swf"], ["pageUrl", "http://radiko.jp/player/player.html\##{channel}"], ["app", "#{channel}/_defInst_"], ["flashVer", "LNX 10,0,45,2"], ["stop", time.to_s], ["flv", flv], ] rtmp_cmd = "rtmpdump " + alist.map{|k,v| "--#{k} \"#{v}\""}.join(" ") + " --live" Net::SSH.start(host, user) do |ssh| ssh.forward.local(local_port, "radiko.smartstream.ne.jp", 1935) th = nil ssh.loop(0.1) do th = Process.detach(Process.fork{exec rtmp_cmd}) unless th th.alive? end end flv2mp3 flv end def usage puts "usage: #{__FILE__} channel time" exit 0 end if $0 == __FILE__ if ARGV.length < 2 usage else get_radiko_mp3(ARGV[0], ARGV[1]) puts "bye" end end
sshログインするホストとユーザ名を書き換えて使用します。
sshホストはradikoのエリア内に存在する必要があります。
また、ローカルのパソコンにrtmpdump、ffmpeg及びRubyのNet::SSHライブラリがインストールされている必要があります。