Как получить ключ сеанса из почтового запроса API Skyscanner - Ruby

В своем приложении я хочу получить текущую цену по информации о рейсе, для этого я использовал SkyScanner API. Я прочитал документацию, прежде чем получил данные, которые мне нужно создать для создания сеанса Live Pricing Service. Который может быть создан путем отправки запроса на api, а затем он предоставляет SessionKey, используя эти SessionKey и 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

Примечание. Я проверял gem 'skyscanner'. но он не предоставляет никакого метода для расчета реальной цены. Он предоставляет методы просмотра кэша.


person Hetal Khunti    schedule 12.05.2015    source источник
comment
Я заменил ваш фактический ключ API на заполнитель, так как, вероятно, не рекомендуется делать его общедоступным.   -  person martincarlin87    schedule 12.05.2015
comment
@ martincarlin87: Я знаю, что секретный ключ не должен публиковаться, но это не мой настоящий APi-ключ. Взял только с демонстрационного сайта. Это публично. В любом случае спасибо :)   -  person Hetal Khunti    schedule 12.05.2015
comment
Ах хорошо. Я не знаком с API Skyscanner, но если вы получаете статус 201, то вы не можете уйти далеко от получения ключа сеанса, но от чтения документации там написано A successful response contains no content. The URL to poll the booking details is specified in the Location header of the response.. Вы пробовали что-то вроде puts temp["location"] или другого объекта ответа?   -  person martincarlin87    schedule 12.05.2015
comment
как я объявил, я получаю {} как temp объект. Я осмотрел это   -  person Hetal Khunti    schedule 12.05.2015
comment
да, но, как говорится в документации, тело пусто, когда у вас есть успешный запрос, ключ сеанса, который вам нужен, находится в форме URL-адреса для будущих запросов, но он находится в заголовке, а не в теле.   -  person martincarlin87    schedule 12.05.2015
comment
Я знаю, что запрос выполнен успешно, но не знаю sessionKey, как получить данные. Кто-то опубликовал решение, позвольте мне попробовать.   -  person Hetal Khunti    schedule 12.05.2015
comment
@HetalKhunti: как вам сообщил martincarlin87, вы были очень близки к решению. Я отправил ответ, пожалуйста, проверьте его   -  person Gagan Gami    schedule 12.05.2015


Ответы (1)


Согласно документу:

Успешный ответ не содержит содержания. 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" 
person Gagan Gami    schedule 12.05.2015
comment
О ... человек, ты спас мне день. Я был ооочень близок к этому, но не пробовал. Спасибо, теперь это работает как шарм. Спасибо большое - person Hetal Khunti; 12.05.2015
comment
@GaganGami У меня такая же проблема с кодом состояния 415. Для тестирования. Я запросил через ПОЧТМАН. Можете ли вы помочь мне решить проблему? - person iSrinivasan27; 29.07.2016
comment
@ i-Droid: конечно, вы можете задать вопрос о SO, о том, что вы сделали / пробовали до сих пор, а также не забудьте опубликовать свой код - person Gagan Gami; 29.07.2016
comment
@GaganGami Конечно, но я еще не запускал код. Я создал учетную запись и попытался создать сеанс с помощью POSTMAN. Это правильно или я должен запросить через свое приложение ?? - person iSrinivasan27; 29.07.2016