Forum: Ruby Downloading an MP3 from the internet

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Nathaniel Escribano (Guest)
on 2009-01-14 03:17
(Received via mailing list)
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...
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 T. (Guest)
on 2009-01-14 05:16
(Received via mailing list)
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
Brian C. (Guest)
on 2009-01-14 11:31
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...)
do |src|
  ...
Nathaniel Escribano (Guest)
on 2009-01-14 18:05
(Received via mailing list)
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!
Brian C. (Guest)
on 2009-01-14 18:07
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.
Davi V. (Guest)
on 2009-01-14 19:01
(Received via mailing list)
-----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-----
This topic is locked and can not be replied to.