ダウンロード速度が遅かったらやめる

Ruby+Curlで大きなファイルをダウンロードしつつ、速度を監視して遅かったら切断する。
ダウンロード速度はだんだん上がってくるものなので、開始後しばらくは遅くても切断しないようにした。
普通にeasy performしても大量のwarningが出たのでverboseを潰した。

brew install curl
gem install curb
require 'rubygems'
require 'curb'

MIN_SPEED = 100 # kbps

if ARGV.size < 2
  STDERR.puts "ruby #{$0} http://example.com/file.avi output.avi"
  exit 1
end
url, out_fname = ARGV[0...2]

class DownloadError < StandardError
end

$VERBOSE = nil
begin
  open(out_fname, 'w+') do |out|
    i = 0
    Curl::Easy.perform(url) do |easy|
      easy.on_body do |data|
        out.print data
        i+=1
        if i % 1000 == 0
          puts "#{easy.download_speed/1000}kbps"
          if easy.download_speed/1000 < MIN_SPEED
            raise DownloadError.new("download too slow (#{easy.download_speed/1000}kbps)")
          end
        end
      end
    end
  end
rescue => e
  STDERR.puts e
end
$VERBOSE = true