2012-03-23 84 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