rubyIl y a quelques temps je poposais un petit script pour télécharger des vidéos directement sur le site de Vimeo et les stocker sur son disque dur. Comme le temps de téléchargement peut être très long, j'y ai ajouté une progressbar !

Un petit

gem install progressbar

et roulez (J'ai testé ce script sous Linux et Windows).

#!/usr/bin/ruby

require 'rubygems'
require 'progressbar'
require 'net/http'

if ARGV.size < 1
	puts "usage vimeo.rb "
	exit 1
else
	id = ARGV[0]
       	Net::HTTP.start('www.vimeo.com') {|http|
        	req = Net::HTTP::Get.new("/moogaloop/load/clip:#{id}", nil)
        	response = http.request(req)
        	/(.*)<\/caption>/.match(response.body)
		title = $1
		title = title.gsub(/\:/,'')
		/(.*)<\/request_signature>/.match(response.body)
		signature = $1
		/(.*)<\/request_signature_expires>/.match(response.body)
		signatureExp = $1
		puts title
		req = Net::HTTP::Get.new("/moogaloop/play/clip:#{id}/#{signature}/#{signatureExp}/?q=hd", nil)
		http.request(req) { |response|
				/(mp4|flv)/.match(response['location'])
				ext = $1
				print "File type : ",ext,"\n"
				/http:\/\/(.*\.vimeo\.com)(\/.*)/.match(response['location'])
				Net::HTTP.start($1) {|http|
					req = Net::HTTP::Get.new($2)
					alreadyDL = 0
					http.request(req) { |response|
						puts response['location']
						pBar = ProgressBar.new(title,100)
						size = response.content_length
						dSize = ( size / 1024 ) / 1024
						print dSize,"Mb\n" 
						File.open("#{title}.#{ext}",'wb') {|file|
							response.read_body {|segment|
								alreadyDL += segment.length
								if(alreadyDL != 0)
									aPercent = (alreadyDL * 100) / size
									pBar.set(aPercent)
								end
								file.write(segment)
							}
						pBar.finish
						}
					}
				}
			}	
		}
end