Ruby API响应 - 如何操作

时间:2018-05-30 00:50:33

标签: ruby

学习Ruby&蜜蜂。使用优步API进行练习。写了一个脚本来估算乘车的价格。

require 'uber'
require 'geocoder'

def ride()

    # print "start? "
    # location_start = gets.chomp
    # print "finish? "
    # location_end = gets.chomp

    coordinates_start = Geocoder.coordinates("dublin") # gets a location for start and transforms into lat long
    coordinates_end = Geocoder.coordinates("dalkey") # gets a location for start and transforms into lat long

    client = Uber::Client.new do |config|
      config.server_token  = "{SERVER_TOKEN}"
      config.sandbox       = true
    end
    estimate = client.price_estimations(start_latitude: coordinates_start[0], start_longitude: coordinates_start[1],
                             end_latitude: coordinates_end[0], end_longitude: coordinates_end[1])
    estimate

end

puts ride

估算的输出格式为#<Uber::Price:0x00007fc663821b90>。我运行estimate.class并且它是一个数组。我运行estimate[0].class并获得Uber::Price。如何从Uber的API响应中提取我应该获得的值? [0]

[0] https://developer.uber.com/docs/riders/references/api/v1.2/estimates-price-get#response

2 个答案:

答案 0 :(得分:3)

您通过图书馆与API通信,通常您需要关注该图书馆uber-ruby的文档。

不幸的是,图书馆并没有记录Uber::Price的作用。可以肯定Uber :: Price与API文档中的字段相同。 Peaking at the code for Uber::Price我们认为这基本上是正确的。

attr_accessor :product_id, :currency_code, :display_name,
              :estimate, :low_estimate, :high_estimate,
              :surge_multiplier, :duration, :distance

您可以使用estimate.field访问API字段。例如,要查看所有估算值和持续时间......

estimates = ride()

estimates.each do |estimate|
    puts "Taking a #{estimate.display_name} will cost #{estimate.estimate} #{estimate.currency_code} and take #{estimate.duration / 60} minutes"
end

答案 1 :(得分:2)

我是uber-ruby gem的维护者和共同作者。 @Schwern是正确的,客户端库提供的属性与uber api响应结构中的属性相同。我应该在文档中指出。

请注意,宝石的测试规格是100%覆盖的,它可以让您了解如何与宝石互动,无论它在哪里都不清楚。

对于价格估算,您可以参考https://github.com/AnkurGel/uber-ruby/blob/master/spec/lib/api/price_estimates_spec.rb#L61-L73