2011-05-17 56 views
0

我正在嘗試向Web服務(fwix)發出請求,並在我的Rails應用程序中創建了以下初始化程序,該初始化程序適用於... sorta,I有兩個問題,但是:Ruby,形成API請求而不隱式聲明每個參數

  1. 出於某種原因,該參數的值需要有+的作爲空間,這是我可以用紅寶石完成一個標準的事情嗎?此外,這是一個標準的方式來形成一個網址?我認爲空間是%20

  2. 在我的代碼我怎麼能採取任何的發送選項,只是使用它們,而不必註明每一個像query_items << "api_key=#{options[:api_key]}" if options[:api_key]

以下是我的代碼,故障區域,我的對於最後一個方法中的每個參數都有query_items開頭的行,任何想法都會很棒!

require 'httparty' 
module Fwix 
    class API 
    include HTTParty 

    class JSONParser < HTTParty::Parser 
     def json 
     JSON.parse(body) 
     end 
    end 

    parser JSONParser 
    base_uri "http://geoapi.fwix.com" 

    def self.query(options = {}) 
     begin 
     query_url = query_url(options) 
     puts "querying: #{base_uri}#{query_url}" 
     response = get(query_url) 
     rescue 
     raise "Connection to Fwix API failed" if response.nil? 
     end 
    end 

    def self.query_url(input_options = {}) 
     @defaults ||= { 
     :api_key => "my_api_key", 
     } 

     options = @defaults.merge(input_options) 
     query_url = "/content.json?" 
     query_items = [] 
     query_items << "api_key=#{options[:api_key]}" if options[:api_key] 
     query_items << "province=#{options[:province]}" if options[:province] 
     query_items << "city=#{options[:city]}" if options[:city] 
     query_items << "address=#{options[:address]}" if options[:address] 

     query_url += query_items.join('&') 
     query_url 
    end 
    end 
end 

回答

1
def self.query_url(input_options = {}) 
    options = { 
    :api_key => "my_api_key", 
    }.merge(input_options) 

    query_url = "/content.json?" 
    query_items = [] 

    options.each { |k, v| query_items << "#{k}=#{v.gsub(/\s/, '+')}" } 

    query_url += query_items.join('&') 
end 
+0

這很好用!謝謝! – 2011-05-17 04:18:31

2

對於1) 您API提供商期待 '+',因爲API是在CGI格式化字符串而不是URL格式的字符串期待。

require 'cgi' 
my_query = "hel lo" 
CGI.escape(my_query) 

這應該給你

"hel+lo" 

如您所願

問題2)我會做類似

query_items = options.keys.collect { |key| "#{key.to_s}=#{options[key]}" } 
+0

聽那個人,CGI.escape拯救生命(呃...服務器)。 – RyanScottLewis 2011-05-17 18:18:13

0

我在Fwix開發商和希望幫助你處理你的url轉義問題。然而,逃避與%20名我的作品:

wget的 'http://geoapi.fwix.com/content.xml?api_key=mark &省= CA &城市= SAN%20francisco &查詢=加文%20newsom'

我曾希望您能向我提供您提出的具體要求,即無法使用%20轉義。