2012-03-23 131 views
0

我想将原点和目的地的坐标发布到获取方向的bing api。但我无法发送数据。无法从bing api获取数据

def get_info_from_bing(params) 
    base_url="http://dev.virtualearth.net/REST/v1/Routes/" 
    query_params = "?" + { 
      "wayPoint.1" => params[:origin], 
      "waypoint.2" => params[:destination], 
      "dateTime" => params[:time] || Time.now.strftime("%H:%M"), 
      "timeType" => "Arrival", 
      "key" => ENV['BING_KEY'] 
    }.map {|k,v| "#{k}=#{CGI.escape(v)}"}*"&" 
    modes=%w{driving walking transit} 

错误:

NoMethodError - undefined method `gsub' for nil:NilClass: 
/Users/anirvan/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/cgi/util.rb:7:in `escape' 
/Users/anirvan/codeforamerica-transpochoices-1ccac48/choices.rb:15:in `block in get_info_from_bing' 
/Users/anirvan/codeforamerica-transpochoices-1ccac48/choices.rb:15:in `each' 
/Users/anirvan/codeforamerica-transpochoices-1ccac48/choices.rb:15:in `map' 
/Users/anirvan/codeforamerica-transpochoices-1ccac48/choices.rb:15:in `get_info_from_bing' 
/Users/anirvan/codeforamerica-transpochoices-1ccac48/choices.rb:120:in `block in <top (required)>' 
/Users/anirvan/.rvm/gems/ruby-1.9.2-p318/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212:in `call' 
/Users/anirvan/.rvm/gems/ruby-1.9.2-p318/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212:in `block in compile!' 
/Users/anirvan/.rvm/gems/ruby-1.9.2-p318/gems/sinatra-1.3.1/lib/sinatra/base.rb:772:in `[]' 
/Users/anirvan/.rvm/gems/ruby-1.9.2-p318/gems/sinatra-1.3.1/lib/sinatra/base.rb:772:in `block (3 levels) in route!' 

我是新来西纳特拉和红宝石。有谁知道问题是什么?

回答

1

使用params.inspect可以打印param阵列的内容。其中一个值肯定是nil,那为什么CGI.escape(v)会引发异常。

如果你能解决的nil值,使用以下行作为一种解决方法:

... 
}.map {|k,v| "#{k}=#{CGI.escape(v||'')}"}*"&" 
... 
+0

谢谢你帮我出... Bing的关键是空的? – nightf0x 2012-03-23 17:26:18