如何从Skyscanner API post请求中检索Session密钥 - Ruby

时间:2015-05-12 10:46:40

标签: ruby-on-rails ruby api skyscanner

在我的应用程序中,我想通过航班详细信息获取实时价格,因为我使用了SkyScanner API。我在获取数据之前已经阅读了文档,我必须创建实时定价服务会话。哪个可以通过发送请求到api创建,然后通过使用此SessionKeySessionKey提供apiKey我可以重新获取数据。那么如何获得Sessionkey,因为我知道它必须由API服务器提供。

这是我的尝试:

require 'json'
require 'net/http'
require 'uri'


  post_params = { 
    :apiKey => "[API_KEY]",
    :country => "GB",
    :currency => "GBP",
    :locale => "en-GB",
    :adults =>1,
    :children => 0,
    :infants => 0,
    :originplace => '11235',
    :destinationplace => '13554',
    :outbounddate => '2015-05-19',
    :inbounddate => '2015-05-26',
    :locationschema => 'Default',
    :cabinclass => 'Economy',
    :groupPricing => true
  }


sessionkey_request = Net::HTTP.post_form(URI.parse('http://partners.api.skyscanner.net/apiservices/pricing/v1.0'), post_params )
get_data= "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/?apiKey=[API_KEY]"
puts sessionkey_request.inspect
temp = Net::HTTP.get_response(URI.parse(get_data)).body
# puts temp

在控制台中我得到了

<Net::HTTPCreated 201 Created readbody=true> # sessionkey_request.inspect

在没有它的情况下没有得到 SessionKey ,我无法检索数据。请指导我错误的地方。我很感激解决方案。

API提供更多详情和实时结果Check Demo

注意:我检查了gem 'skyscanner ',但它没有为实时价格提供任何方法。它提供了Browse Cache方法。

1 个答案:

答案 0 :(得分:4)

根据文件:

  

成功的回复不包含任何内容。用于轮询预订的URL   详细信息在响应的Location标头中指定

所以试试这个:

sessionkey_request["location"]

我在我的系统上测试了它,然后它返回我:

http://partners.api.skyscanner.net/apiservices/pricing/v1.0/8e28260becd3441ca4e865396e224e7d_ecilpojl_EC71481935CEBB7EAF661BC24940D01D

最后一部分是您可以用于sessionKey请求的GET。如果您只想要最后一个部分(sessionKey),那么您可以通过以下方式检索它:

 > url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/8e28260becd3441ca4e865396e224e7d_ecilpojl_EC71481935CEBB7EAF661BC24940D01D"
 > url.split('/').last
 => "8e28260becd3441ca4e865396e224e7d_ecilpojl_EC71481935CEBB7EAF661BC24940D01D"