如何从 Skyscanner API post 请求中检索会话密钥 - Ruby
How to retrieve Session key from Skyscanner API post request - Ruby
在我的应用程序中,我想通过航班详情获取实时价格,为此我使用了 SkyScanner API。在获得必须创建实时定价服务会话的数据之前,我已经阅读了文档。可以通过 post 请求 api 创建,然后它通过使用此 SessionKey
和 apiKey
提供 SessionKey
我可以检索数据。那么我如何才能获得 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 作为响应,没有它我无法检索数据。请指导我哪里出错了。感谢您提供解决方案。
有关更多详细信息和实时结果 Check Demo,作者 API
注意:我检查了gem 'skyscanner ',但它没有提供任何实时价格的方法。它提供浏览缓存方法。
根据文档:
A successful response contains no content. The URL to poll the booking
details is specified in the Location header of the response
所以试试这个:
sessionkey_request["location"]
我已经在我的系统上测试过了 returns 我:
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"
在我的应用程序中,我想通过航班详情获取实时价格,为此我使用了 SkyScanner API。在获得必须创建实时定价服务会话的数据之前,我已经阅读了文档。可以通过 post 请求 api 创建,然后它通过使用此 SessionKey
和 apiKey
提供 SessionKey
我可以检索数据。那么我如何才能获得 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 作为响应,没有它我无法检索数据。请指导我哪里出错了。感谢您提供解决方案。
有关更多详细信息和实时结果 Check Demo,作者 API
注意:我检查了gem 'skyscanner ',但它没有提供任何实时价格的方法。它提供浏览缓存方法。
根据文档:
A successful response contains no content. The URL to poll the booking details is specified in the Location header of the response
所以试试这个:
sessionkey_request["location"]
我已经在我的系统上测试过了 returns 我:
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"