open-uriによるダウンロード状況をプログレスバーで可視化する
日本語での情報があまりなかったのでまとめておく。
なお、プログレスバーのライブラリとして ruby-progressbar を使用した。
require 'open-uri' require 'ruby-progressbar' URL = "http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz" content_length = nil progress_bar = nil open(URL, "rb", :content_length_proc => lambda{ |content_length| if content_length # プログレスバーの最大長にcontent-lengthを指定 progress_bar = ProgressBar.create(:total => content_length) end }, :progress_proc => lambda{ |transferred_bytes| if progress_bar # プログレスバーの進捗状況にこれまで転送されたバイト数を代入する progress_bar.progress = transferred_bytes else puts "#{transferred_bytes} / Total size is unknown" end } ) { |file| # do something... }
実行結果
Progress: |===========================================================|