`
rawbenny
  • 浏览: 14476 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类

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

分享到:
评论

相关推荐

    Restful webservice

    - **Rails Cookbook** 和 **Ruby Cookbook**:这两本书提供了大量的示例代码和实践技巧,对于使用 Ruby 和 Rails 开发 RESTful 服务非常有帮助。 - **Ruby on Rails: Up and Running**:适合初学者快速入门 Rails ...

    Rest Webservice(英)

    - **社交媒体平台**:例如 Twitter 和 Facebook 提供 RESTful API 来让开发者能够访问和管理用户数据。 - **电子商务平台**:电商平台提供 RESTful 接口以允许商家和第三方应用与其系统集成。 ### 相关资源介绍 - ...

    ASP EXCEL导入SQL

     REST是基于HTTP的,因此天生就有在互联网上穿透防火墙的能力,REST可以简单地认为它是轻量级的WebService,但是它具有自己的一些显著特点:  所有的资源通过统一的接口访问(HTTP/HTTPSGET、POST、PUT、ELETE),...

    3 Android SqliteManager 源码.zip

    3 Android SqliteManager 源码.zip

    基于S7-200 PLC的煤矿排水系统智能控制:三台水泵联动与备援策略

    内容概要:本文详细介绍了基于S7-200 PLC的煤矿排水系统智能控制方案,重点讨论了三台水泵(两台工作水泵和一台备用水泵)的联动与备援策略。系统通过超声波液位传感器实时监测水位,根据不同水位情况自动控制水泵的启停。具体而言,水位低时不启动水泵,水位介于中水位和高水位之间时启动1号水泵,水位超过高水位则启动1号和2号水泵共同工作。若1号或2号水泵出现故障,系统会自动启用3号备用水泵。此外,MCGS6.2组态画面用于实时监控水位和水泵状态,帮助操作员及时应对异常情况,确保矿井安全。 适合人群:从事煤矿自动化控制领域的技术人员、矿业工程管理人员及相关研究人员。 使用场景及目标:适用于需要提高煤矿排水系统自动化水平的场合,旨在提升矿井排水效率和安全性,减少人工干预,确保矿井生产安全。 其他说明:文中提到的技术方案不仅提高了排水系统的可靠性,还为未来的智能化矿山建设提供了有益借鉴。

    scratch少儿编程逻辑思维游戏源码-灌篮之王.zip

    scratch少儿编程逻辑思维游戏源码-灌篮之王.zip

    scratch少儿编程逻辑思维游戏源码-飞翔马里奥(2).zip

    scratch少儿编程逻辑思维游戏源码-飞翔马里奥(2).zip

    scratch少儿编程逻辑思维游戏源码-火柴人大战 中世纪战争.zip

    scratch少儿编程逻辑思维游戏源码-火柴人大战 中世纪战争.zip

    scratch少儿编程逻辑思维游戏源码-几何冲刺(2).zip

    scratch少儿编程逻辑思维游戏源码-几何冲刺(2).zip

    南京证券-低轨卫星互联网启动,天地一体通信迈向6G.pdf

    南京证券-低轨卫星互联网启动,天地一体通信迈向6G

    nginx-1.20.1

    nginx-1.20.1

    sshpass-1.06-8.ky10.aarch

    sshpass-1.06-8.ky10.aarch

    少儿编程scratch项目源代码文件案例素材-我的世界2D(更新北极).zip

    少儿编程scratch项目源代码文件案例素材-我的世界2D(更新北极).zip

    通信行业专题研究:车载全息数字人——AI+Agent新场景,全息投影新方向-20231121-国盛证券-13页.pdf

    通信行业专题研究:车载全息数字人——AI+Agent新场景,全息投影新方向-20231121-国盛证券-13页

    基于S7-200 PLC与组态王的邮件分拣系统设计——智能化控制技术与实践应用研究

    内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王软件构建的邮件分拣系统的具体设计方案和技术细节。首先,文中阐述了硬件部分的设计,包括光电传感器、传送带电机以及分拣机械臂的连接方式,特别是旋转编码器用于精确测量包裹位移的技术要点。接着,展示了PLC编程中的关键代码段,如初始化分拣计数器、读取编码器数据并进行位置跟踪等。然后,描述了组态王作为上位机软件的作用,它不仅提供了直观的人机交互界面,还允许通过简单的下拉菜单选择不同的分拣规则(按省份、按重量或加急件)。此外,针对可能出现的通信问题提出了有效的解决方案,比如采用心跳包机制确保稳定的数据传输,并解决了因电磁干扰导致的问题。最后,分享了一些现场调试的经验教训,例如为减少编码器安装误差对分拣精度的影响而引入的位移补偿算法。 适合人群:从事自动化控制领域的工程师或者对此感兴趣的初学者。 使用场景及目标:适用于需要提高邮件或其他物品自动分拣效率的企业或机构,旨在降低人工成本、提升工作效率和准确性。 其他说明:文中提到的实际案例表明,经过优化后的系统能够显著改善分拣性能,将分拣错误率大幅降至0.3%,并且日均处理量可达2万件包裹。

    scratch少儿编程逻辑思维游戏源码-机械汽车.zip

    scratch少儿编程逻辑思维游戏源码-机械汽车.zip

    光学领域:基于束缚态驱动的手征超表面实现可调谐手征光学响应的研究及其应用

    内容概要:本文详细探讨了在连续介质中利用束缚态驱动设计并实现具有最大和可调谐手征光学响应的平面手征超表面的方法。文中首先介绍了comsol三次谐波和本征手性BIC(束缚态诱导的透明)两种重要光学现象,随后阐述了具体的手征超表面结构设计,包括远场偏振图、手性透射曲线、二维能带图、Q因子图和电场图的分析。最后,通过大子刊nc复现实验验证了设计方案的有效性,并对未来的研究方向进行了展望。 适合人群:从事光学研究的专业人士、高校物理系师生、对光与物质相互作用感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解手征超表面设计原理及其光学响应机制的研究人员,旨在推动新型光学器件的研发和技术进步。 其他说明:本文不仅展示了理论分析和模拟计算,还通过实验证明了设计方法的可行性,为后续研究奠定了坚实的基础。

    少儿编程scratch项目源代码文件案例素材-位图冒险.zip

    少儿编程scratch项目源代码文件案例素材-位图冒险.zip

    少儿编程scratch项目源代码文件案例素材-校园困境2.zip

    少儿编程scratch项目源代码文件案例素材-校园困境2.zip

Global site tag (gtag.js) - Google Analytics