2015-07-23 4 views
1

Хорошо, прошло много дней. Я собираюсь туда и обратно с этим api и хотел бы получить следующие результаты.Как взять эти данные из api и написать функцию

В этом проблема.

uri = URI('https://api.wmata.com/StationPrediction.svc/json/GetPrediction/All') 
uri.query = URI.encode_www_form({'api_key' => 'ihaveit',}) 
request = Net::HTTP::Get.new(uri.request_uri) 
@response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| 
    http.request(request) 
    @data = JSON.parse @response.body 

Теперь у меня @data анализируется как JSON. Я пытаюсь написать класс Поезда и использовать следующие данные.

{ 
     "Car": "6", 
     "Destination": "SilvrSpg", 
     "DestinationCode": "B08", 
     "DestinationName": "Silver Spring", 
     "Group": "1", 
     "Line": "RD", 
     "LocationCode": "A01", 
     "LocationName": "Metro Center", 
     "Min": "3" 
    }, 

Вот код класса поездов

class Trains 
def initialize(car, destination, destinationcode, destinationname, group, line, locationcode, locationname) 
    @car = car 
    @destination = destination 
    @destinationcode = destinationcode 
    @destinationname = destinationname 
    @group = group 
    @line = locationcode 
    @locationname = locationname 
end 

И теперь им застрял о следующем шаге. Я совершенно не знаком с api. Я могу написать следующее для статического класса.

def to_s 
     puts(@car + @destination + @destinationcode + @destinationname + @group + @line + @locationname) 
    end 
    = Trains.new 
    puts Train 
    end 

У меня это до сих пор.

class TrainLoader < Struct.new(:car, :destination, :destinationcode, :destinationname, :group, :line, :locationcode, :locationname) 
    class Trains 

    end 
    t = Trains.new(@data["Car"],@data["DestinationCode"], @data[DestinationName],@data[Group],@data[Line], @data[LocationCode], @data[LocationName], @data[Min]) 
+0

Что здесь вопрос? –

+0

Позвольте мне еще раз перефразировать мой вопрос. – manshu

+0

Я вижу запрос успеха с данными, какую функцию вы хотите написать? –

ответ

0

У вас уже есть класс, просто написать to_s funtcion:

class Trains 
    def initialize(car, destination, destinationcode, destinationname, group, line, locationcode, locationname) 
    @car = car 
    @destination = destination 
    @destinationcode = destinationcode 
    @destinationname = destinationname 
    @group = group 
    @line = locationcode 
    @locationname = locationname 
    end 

    # inspect attributes with own `to_s` method 
    def to_s 
    "#{@car} #{@destination} #{@destinationcode} #{@destinationname}" 
    end 
end 

Теперь создать экземпляр вашего класса:

>> train = Trains.new(@data["Car"], @data["Destination"], @data["DestinationCode"]).. 
>> train.to_s 

Но я могу предложить вам более элегантное решение , с struct:

>> data = { 
?>  "Car": "6", 
?>  "Destination": "SilvrSpg", 
?>  "DestinationCode": "B08", 
?>  "DestinationName": "Silver Spring", 
?>  "Group": "1", 
?>  "Line": "RD", 
?>  "LocationCode": "A01", 
?>  "LocationName": "Metro Center", 
?>  "Min": "3" 
>>  } 
>> class Trains < Struct.new(*data.keys) 
#> # create a struct with attributes like keys in data hash `"Cat"` or `"Min"`     
>> end 
>> t = Trains.new(*data.values) 
# create instance of Trains class with values from a data hash `"6"` 
=> #<struct Trains Car="6", Destination="SilvrSpg", DestinationCode="B08", DestinationName="Silver Spring", Group="1", Line="RD", LocationCode="A01", LocationName="Metro Center", Min="3"> 
>> t.Car 
=> "6" 
>> 
+0

Как я могу вызвать @data для Trains.new? – manshu

+0

@manshu извините, не понимаете, что вы задаете вопрос, что вы имеете в виду под названием @data to Trains.new? –

+0

данные из api хранятся в @ data теперь, чтобы я мог создать новый поезд, как я могу использовать данные json, которые поступают из @ data? – manshu

Смежные вопросы