rubyCe weekend étant particulièrement chaud, je suis resté un peu dans la maison pour profiter de la fraicheur.




Mettant a profit cette période, je me suis lancer dans la réalisation un script pour télécharger des vidéos de bodyboard sur Vimeo.

Après une brève analyse, je suis arrivé à ce bout de code qui enregistre la vidéo demandée dans le répertoire courant :


#!/usr/bin/ruby

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
/(.
)<\/request_signature>/.match(response.body)
signature = $1
/(.)<\/request_signature_expires>/.match(response.body)
signatureExp = $1
req = Net::HTTP::Get.new("/moogaloop/play/clip:#{id}/
#{signature}/#{signatureExp}/?q=hd", nil)
http.request(req) { |response|
puts response['location']
/(mp4|flv)/.match(response['location'])
ext = $1
/http:\/\/(.
.vimeo.com)(\/.*)/.match(response['location'])
Net::HTTP.start($1) {|http|
req = Net::HTTP::Get.new($2)
http.request(req) { |response|
 File.open("#{title}.#{ext}",'w') {|f|
f.write(response.body)
}
}
}
}
}
end