[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Downloading an MP3 from the internet

Nathaniel Escribano

1/14/2009 1:16:00 AM

[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%20Morning%20Jacket%20-%20Cele...(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.

5 Answers

Andrew Timberlake

1/14/2009 3:15:00 AM

0

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

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-%20Cele...(Live).mp3<http://cdn.stereogum.com/mp3/My%20Morning%20Jacket%20-%20Cele...%28Live%29.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://ramblingso...
http://www.linkedin.com/in/andrew...

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

Brian Candler

1/14/2009 9:30:00 AM

0

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.... 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.... Morning Jacket - Celebration (Live).mp3
(URI::InvalidURIError)

Fix the URI and it works:

...
open("http://cdn.stereogum....%20Morning%20Jacket%20-%20Celebration%20%28Live%29.mp3")
do |src|
...
--
Posted via http://www.ruby-....

Nathaniel Escribano

1/14/2009 4:04:00 PM

0

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


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.... 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.... Morning Jacket - Celebration (Live).mp3
> (URI::InvalidURIError)
>
> Fix the URI and it works:
>
> ...
> open("
> http://cdn.stereogum....%20Morning%20Jacket%20-%20Celebration%20%28Live%29.mp3
> ")
> do |src|
> ...
> --
> Posted via http://www.ruby-....
>
>

Brian Candler

1/14/2009 4:07:00 PM

0

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

Davi Vidal

1/14/2009 4:59:00 PM

0

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

Nathaniel Escribano wrote:
[...]
>> Here is an alternative way of doing it:
>>
>> require 'open-uri'
>> open("http://cdn.stereogum.... 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... + 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....

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