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.
Probably because you're not encoding the path
···
On Wed, Jan 14, 2009 at 3:15 AM, Nathaniel Escribano <americaskate@gmail.com > wrote:
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<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.
--
Andrew Timberlake
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake
"I have never let my schooling interfere with my education" - Mark Twain
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|
...
···
--
Posted via http://www.ruby-forum.com/.
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!
···
On Wed, Jan 14, 2009 at 4:30 AM, Brian Candler <b.candler@pobox.com> wrote:
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|
...
--
Posted via http://www.ruby-forum.com/.
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.
···
--
Posted via http://www.ruby-forum.com/.
Nathaniel Escribano wrote:
[...]
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
[...]
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