正在解析 XML HTTParty 响应

Parsing XML HTTParty response

我正在使用 HTTParty 从 api 获取数据。我设法取回了 XML 响应,看起来 HTTParty 已经将 xml 响应变成了 Ruby.

如何浏览散列并获取我需要的数据?例如,假设我想要 "Name",即“29TH AVENUE STN/ARBUTUS”。

API 键工作正常,因为我收到了回复。

只是不太确定如何浏览并获取我想要的数据,并将其放入我的视图中。

index.html.erb:

<% @courses.each do |course| %>
<%= course %>

<% end %>

HTT方回复:

["Route", {
"RouteNo" => "016", "Name" => "29TH AVENUE STN/ARBUTUS ", "OperatingCompany" => "CMBC", "Patterns" => {
    "Pattern" => [{
        "PatternNo" => "E5TP", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-E5TP.kmz"
        }, "Direction" => "EAST"
    }, {
        "PatternNo" => "EB1", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-EB1.kmz"
        }, "Direction" => "EAST"
    }, {
        "PatternNo" => "EB5", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-EB5.kmz"
        }, "Direction" => "EAST"
    }]
}
}]

获取响应的模型

class Checker

include HTTParty

base_uri 'http://api.translink.ca/rttiapi/v1/routes'
default_params apikey: "[my proper api key]"
format :xml

def self.for term
  get("", query: {stopNo: term})["Routes"]["Route"]["RouteNo"]
  end
end

模型控制器

  class TimesController < ApplicationController
  def index
    @search_term = '51048'
    @courses = Checker.for(@search_term)
  end
end

假设您有一个回复显示:

resp = ["Route", {
"RouteNo" => "016", "Name" => "29TH AVENUE STN/ARBUTUS ", "OperatingCompany" => "CMBC", "Patterns" => {
    "Pattern" => [{
        "PatternNo" => "E5TP", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-E5TP.kmz"
        }, "Direction" => "EAST"
    }, {
        "PatternNo" => "EB1", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-EB1.kmz"
        }, "Direction" => "EAST"
    }, {
        "PatternNo" => "EB5", "Destination" => "29TH AVE STN", "RouteMap" => {
            "Href" => "http://nb.translink.ca/geodata/trip/016-EB5.kmz"
        }, "Direction" => "EAST"
    }]
}
}]

又是一个包含两个元素的数组,第一个是 'Route',最后一个是具有所有属性的散列,要简单地使用名称:

resp.last['Name']