Downloading an MP3 from the internet

  • Thread starter Nathaniel Escribano
  • Start date
N

Nathaniel Escribano

[Note: parts of this message were removed to make it a legal post.]

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 Morning Jacket - Celebration (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.
 
A

Andrew Timberlake

[Note: parts of this message were removed to make it a legal post.]

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 Morning Jacket - Celebration (Live).mp3<http://cdn.stereogum.com/mp3/My Morning Jacket - Celebration (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.

Probably because you're not encoding the path

--
Andrew Timberlake
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain
 
B

Brian Candler

Nathaniel said:
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 Morning Jacket - Celebration (Live).mp3")
do |src|
...
 
N

Nathaniel Escribano

[Note: parts of this message were removed to make it a legal post.]

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!
 
B

Brian Candler

Nathaniel said:
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.
 
D

Davi Vidal

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

Nathaniel Escribano wrote:
[...][...]

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-----
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top