When I discovered that I had an account at rubyplus.org and realized how many screencasts they had that were available for my viewing pleasure, I got excited… Real excited!
And then I noticed that I would have to click the download button for each and every one of the videos; I want the world, I want the whole world…
I knew I could use Ruby to help me download every video with ease, so I made an ultra tiny script:
(1..69).each do |episode_number|
`wget http://ldenman:blindedyo@rubyplus.org/episodes/#{episode_number}/download`
end
There were 69 (meow) episodes created from RubyPlus, hence the (1..69).
Surely you know the range method:
(1..10).each {|num| print num} #=> 12345678910
A Range represents an interval—a set of values with a start and an end. Ranges may be constructed using the s..e and s…e literals, or with Range::new. Ranges constructed using .. run from the start to the end inclusively. Those created using … exclude the end value. When used as an iterator, ranges return each value in the sequence.
We are using our range as an iterator
so I specify the number I want to start with, episode 1 and I specify the number I want to end with 69 and then I join those two numbers together with.. (I could use … to join the numbers together, but it would exclude the last number from the output.)
I then send the message each on our range. Now, each takes a block. A block is basically a chunk of code run between a do and an end keyword. so we have a block:
#Block with keywords
(1..5).each do |number|
print number
end
#=>12345
#Block with brackets
(1..5).each {|number| print number}
#=>12345
That’s right, same answer… different syntax.
So, now we look at the code inside the block(line 2):
(1..69).each do |episode_number|
`wget http://ldenman:blindedyo@rubyplus.org/episodes/#{episode_number}/download`
end
For each number in our range, wget will be called with our specified url. And our episode_number will continue to increase until we have reached 69.
I guess I should say that you have to place any console code between these little `grave accents`
GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non-interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.
Hey! Wget may be easily called from scripts!!! That’s What I Just Did Weeeeeeeee! And It Was Easy, Wasn’t It?!
Then, we finalize the script with our end keyword and then we run it in a directory we want it.
ruby download_all_files.rb
Whoomp There It Is!
Ruby
makes it easy to do stuff like this and it’s all fun and games too!