0

Web サービス ( fwix ) にリクエストを送信しようとしています。レール アプリで次のイニシャライザを作成しました。

  1. 何らかの理由で、パラメーターの値にスペースとして 's を含める必要がある+のですが、これは ruby​​ で実現できる標準的なことですか? さらに、これは URL を形成する標準的な方法ですか? スペースは だと思いました%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
4

3 に答える 3

2

1) API プロバイダーは、URL 形式の文字列ではなく CGI 形式の文字列を期待しているため、「+」を期待しています。

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

これはあなたに与えるはずです

"hel+lo" 

あなたが期待するように

質問2の場合)私は次のようなことをします

query_items = options.keys.collect { |key| "#{key.to_s}=#{options[key]}" }
于 2011-05-17T03:44:07.647 に答える
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
于 2011-05-17T03:36:34.317 に答える
0

私はFwixの開発者であり、URLエスケープの問題について支援したいと考えています。ただし、%20でエスケープすることは私にとってはうまくいきます:

wget'http://geoapi.fwix.com/content.xml?api_key=mark&province=ca&city=san%20francisco&query=gavin%20newsom'

私はあなたが%20で逃げることができないというあなたがしている特定の要求を私に提供してくれることを望んでいました。

于 2011-05-30T15:27:42.797 に答える