rails访问webservice

在rails里访问webservice跟访问RSS Feeds一样简单(见本博处女作),有很多种不同的方式,SOAP,REST是最常见的2种,这里介绍一下REST方式。

 

【清单一】

require 'net/http'
class Expedia::Request
  attr_reader :error, :ticket_str, :total
  @@site =    "http://www.travelnow.com"
  @@path =    "#{@@site}/external/xmlinterface.jsp?cid=******&resType=air&intfc=ws&xml="

  def initialize(params = {})

    @trip_type         = params[:trip_type]
    @depart_city       = params[:depart_city]
    @arr_city          = params[:arr_city]
    @depart_date       = params[:depart_date]
    @ret_date          = params[:ret_date]
    @fare_class        = params[:fare_class]
    @adult_passengers  = params[:adult_passengers]
    @senior_passengers = params[:senior_passengers]
    @children          = params[:children] #INF,INS,C02,C11...  
  end
     
  def send

 

#生成需要发送的请求数据,追加在@@path后面
    xml = Builder::XmlMarkup.new
   

    request_xml = xml.AirSessionRequest(:method=>"getAirAvailability"){
      xml.AirAvailabilityQuery{
        xml.originCityCode(@depart_city)
        xml.destinationCityCode(@arr_city)
       
        if @ret_date != ""
          xml.returnDateTime(@ret_date.to_s)
        end if
       
        # fill xml request with proper data
        xml.departureDateTime(@depart_date.to_s)
        xml.fareClass(@fare_class)
        xml.tripType(@trip_type)
        xml.searchWindow("12")
       
        xml.Passengers{
          if @adult_passengers != "0"
            xml.adultPassengers(@adult_passengers)
          end
          if @senior_passengers != "0"
           xml.seniorPassengers(@senior_passengers)
          end         
          if @children != ""
           xml.childCodes(@children)
          end         
        }       
      }
    }
   
    Net::HTTP.version_1_2
   
    #发送请求,处理返回的结果。结果是一个XML格式的字符串。
    @@path = @@path + CGI.escape(request_xml)
    @@path = URI.parse(@@path)

#调用HTTP.get方法是访问webservice的关键。
    @ticket_str = Net::HTTP.get(@@path).gsub(/\n?\r?/,'')

  end

 

范例程序访问的webservice是expedia提供的,如果你想运行该程序,必须用六位数字替换cid=******中的'*',详细内容请参考:

https://www.ian.com/xmldocs/xml_ws/air/airAvailList.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值