Downloading an MP3 from the internet


#1

I am trying to write a simple script that downloads a music file from
the
internet.
For example: if i want to download
http://cdn.stereogum.com/mp3/My%20Morning%20Jacket%20-%20Celebration%20(Live).mp3
how exactly would you do it?

I found someone who was able to download a flickr photo using this
script:

require ‘net/http’

Net::HTTP.start(“farm1.static.flickr.com”) { |http|
resp = http.get("/92/218926700_ecedc5fef7_o.jpg")
open(“fun.jpg”, “wb”) { |file|
file.write(resp.body)
}
}
puts ‘Downloaded’

With a slight modification shouldn’t this work for the music file?
What makes downloading a photo any different than an mp3 file?

require ‘net/http’

Net::HTTP.start(“cdn.stereogum.com”) { |http|
resp = http.get("/mp3/My Morning Jacket - Celebration (Live).mp3")
open(“Celebration.mp3”, “wb”) { |file|
file.write(resp.body)
}
}
puts “the song has been downloaded”

Why doesn’t it work? What needs to be changed?
Any help would be great! Thanks.


#2

On Wed, Jan 14, 2009 at 3:15 AM, Nathaniel Escribano
<removed_email_address@domain.invalid

wrote:

Why doesn’t it work? What needs to be changed?
Any help would be great! Thanks.

Probably because you’re not encoding the path


Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

“I have never let my schooling interfere with my education” - Mark Twain


#3

Nathaniel Escribano wrote:

require ‘net/http’

Net::HTTP.start(“cdn.stereogum.com”) { |http|
resp = http.get("/mp3/My Morning Jacket - Celebration (Live).mp3")
open(“Celebration.mp3”, “wb”) { |file|
file.write(resp.body)
}
}
puts “the song has been downloaded”

Here is an alternative way of doing it:

require ‘open-uri’
open(“http://cdn.stereogum.com/mp3/My Morning Jacket - Celebration
(Live).mp3”) do |src|
open(“Celebration.mp3”,“wb”) do |dst|
while blk = src.read(65536)
dst.write(blk)
end
end
end

This gives a clear error:

/usr/lib/ruby/1.8/uri/common.rb:436:in `split’: bad URI(is not URI?):
http://cdn.stereogum.com/mp3/My Morning Jacket - Celebration (Live).mp3
(URI::InvalidURIError)

Fix the URI and it works:


open(“http://cdn.stereogum.com/mp3/My%20Morning%20Jacket%20-%20Celebration%20(Live).mp3”)
do |src|


#4

Thank you guys very much!
I was able to get it to work by fixing my path.
I wasn’t able to get it to work using alternate way even after changing
the
URL.
I get the following error.

syntax error, unexpected kDO, expecting $end
do |src|

Just out of curiosity- how can I fix this.
I would like to know so that I can work through it and figure out
exactly
what the script is doing and
compare it to the previous script.
Thanks again!


#5

Nathaniel Escribano wrote:

I get the following error.

syntax error, unexpected kDO, expecting $end
do |src|

It was a line-wrap from ruby-forum. Move this to the end of the line
above.


#6

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Nathaniel Escribano wrote:
[…]

end

[…]

My $ 0.02:

require ‘open-uri’
require ‘cgi’

url = ‘http://cdn.stereogum.com/mp3/’ + CGI::escape(‘My Morning Jacket -
Celebration (Live).mp3’)

open(url) do |src|
open(‘Celebration.mp3’, ‘wb’) do |dst|
while blk = src.read(65536)
dst.write(blk)
end
end
end

hth,

davi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkluE4MACgkQ76Bs0E5RGKNDnQCgnL2MY93V0uAhc1dQGV1cTP09
NaEAoKFroaj3pxGPrjf9u2CUzKV2gFAK
=/OkJ
-----END PGP SIGNATURE-----