On Mar 18, 9:00 pm, Adam Ziemba <
li...@ruby-forum.com> wrote:
> Colin Law wrote:
> > open("
http://chart.apis.google.com/chart#{CGI.escape('?cht=bvg&chbh=a&chd=s:vttusty&chs=500x300&chxt=x,y&chxl=0:|Sun |Mon|Tue|Wed|Thu|Fri|Sat|1:|0|2|4|6|8|10|12')}")
> > do |chart|
> > File.open('chart.png', 'w') {|f| f.write chart.read }
> > end
>
> I definitely understand the why you would want to escape the URI, but
> I'm not convinced that this approach will never work.
>
> The URL with the escaped characters causes Google to reject it as
> invalid parameters, which is why you got all that HTML and Javascript.
> E.g. if you use your browser to open the result of the above URI with
> escaped characters:
>
>
http://chart.apis.google.com/chart%3Fcht%3Dbvg%26chbh%3Da%26chd%3Ds%3...
>
> You are redirected to the Google chart API. Retaining the original
> characters with:
>
>
http://chart.apis.google.com/chart?cht=bvg&chbh=a&chd=s:vttusty&chs=5...Sun|Mon|Tue|Wed|Thu|Fri|Sat|1:|0|2|4|6|8|10|12>
> you'll get a PNG image and nothing else.
>
> Okay, so Google doesn't want the escaped characters, and the URI::open
> method doesn't want the plain characters... or does it? Is there no way
> around this? The thing is the characters used in the URL above are
> valid, or so I thought. I pass these kind of characters as parameters
> from controller to view all throughout my application, with full browser
> compatibility.
>
> I tried using backslashes for all the characters, e.g. "\&" instead of
> "&" and the URI open method still rejects it.
>
> I've seen some people successfully get images to save to the file system
> using URI, but I'm assuming all their code is outdated as I could not
> get it to work. Also, the image URL they were using actually pointed to
> a PNG image, with a PNG extension, whereas the Google Chart URL will
> return a PNG image.
>
> I appreciate all the help!
> --
> Posted viahttp://
www.ruby-forum.com/.
Seems an inadequacy of Ruby URI library. Curb (Ruby libcurl bindings)
works simply and easily though:
ruby-1.9.1-p376 > require 'open-uri'
=> true
ruby-1.9.1-p376 > png = "http://chart.apis.google.com/chart?
cht=bvg&chbh=a&chd=s:vttusty&chs=500x300&chxt=x,y&chxl=0:|Sun|Mon|Tue|
Wed|Thu|Fri|Sat|1:|0|2|4|6|8|10|12"
=> "http://chart.apis.google.com/chart?
cht=bvg&chbh=a&chd=s:vttusty&chs=500x300&chxt=x,y&chxl=0:|Sun|Mon|Tue|
Wed|Thu|Fri|Sat|1:|0|2|4|6|8|10|12"
ruby-1.9.1-p376 > open png
URI::InvalidURIError: bad URI(is not URI?):
http://chart.apis.google.com/chart?cht=bvg&chbh=a&chd=s:vttusty&chs=500x300&chxt=x,y&chxl=0:|Sun|Mon|Tue|Wed|Thu|Fri|Sat|1:|0|2|4|6|8|10|12
from /home/xeno/.rvm/ruby-1.9.1-p376/lib/ruby/1.9.1/uri/
common.rb:156:in `split'
from /home/xeno/.rvm/ruby-1.9.1-p376/lib/ruby/1.9.1/uri/
common.rb:174:in `parse'
from /home/xeno/.rvm/ruby-1.9.1-p376/lib/ruby/1.9.1/uri/
common.rb:626:in `parse'
from /home/xeno/.rvm/ruby-1.9.1-p376/lib/ruby/1.9.1/open-
uri.rb:32:in `open'
from (irb):3
from /home/xeno/.rvm/ruby-1.9.1-p376/bin/irb:15:in `<main>'
ruby-1.9.1-p376 > require 'curb'
=> true
ruby-1.9.1-p376 > c = Curl::Easy.perform png
=> #<Curl::Easy http://chart.apis.google.com/chart?cht=bvg&chbh=a>
ruby-1.9.1-p376 > File.open("png.png", "w") {|f| f.write c.body_str}
=> 5445
ruby-1.9.1-p376 >
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.