Class: NationalRail::VirginLiveDepartureBoards
- Inherits:
-
Object
- Object
- NationalRail::VirginLiveDepartureBoards
- Includes:
- CellParser
- Defined in:
- lib/national-rail/virgin_live_departure_boards.rb,
lib/national-rail/virgin_live_departure_boards.rb,
lib/national-rail/virgin_live_departure_boards/details_page_parser.rb
Defined Under Namespace
Modules: CellParser Classes: DetailsPageParser, NokogiriParser, SummaryRow, TimeParser
Class Attribute Summary collapse
-
.capture_path ⇒ Object
Returns the value of attribute capture_path.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ VirginLiveDepartureBoards
constructor
A new instance of VirginLiveDepartureBoards.
- #summary(station_code) ⇒ Object
Methods included from CellParser
Constructor Details
#initialize ⇒ VirginLiveDepartureBoards
Returns a new instance of VirginLiveDepartureBoards.
88 89 90 91 92 |
# File 'lib/national-rail/virgin_live_departure_boards.rb', line 88 def initialize @agent = Mechanize.new @agent.pluggable_parser.html = NokogiriParser @agent.user_agent_alias = "Mac FireFox" end |
Class Attribute Details
.capture_path ⇒ Object
Returns the value of attribute capture_path.
44 45 46 |
# File 'lib/national-rail/virgin_live_departure_boards.rb', line 44 def capture_path @capture_path end |
Class Method Details
.capture(page, filename) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/national-rail/virgin_live_departure_boards.rb', line 45 def capture(page, filename) if capture_path.present? FileUtils.mkdir_p(capture_path) path = File.join(capture_path, filename) File.open(path, "w") { |f| f.write(TidyFFI::Tidy.new(page.parser.to_html).clean) } end rescue => e puts e end |
Instance Method Details
#summary(station_code) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/national-rail/virgin_live_departure_boards.rb', line 94 def summary(station_code) time_parser = TimeParser.new summary_rows = [] filename = "summary.aspx?T=#{station_code}" @agent.get("http://realtime.nationalrail.co.uk/virgintrains/#{filename}") do |page| VirginLiveDepartureBoards.capture(page, filename) encoding = 'UTF-8' summary_rows = ((page.doc/"table#TrainTable tbody tr")[2..-1] || []).map do |tr| tds = tr/"td" details_href = (tds[0]/"a").first["href"] details_link = page.links.detect { |l| l.attributes["href"] == details_href } SummaryRow.new(@agent, details_link, { :from => (tds[0]/"a").inner_text.gsub(/\s+/, ' '), :timetabled_arrival => time_parser.parse(cell_text(tds[1])), :expected_arrival => time_parser.parse(cell_text(tds[2])), :platform => parse_integer(cell_text(tds[3])), :to => (tds[4]/"a").inner_text.gsub(/\s+/, ' '), :timetabled_departure => time_parser.parse(cell_text(tds[5])), :expected_departure => time_parser.parse(cell_text(tds[6])), :operator => (tds[7]/"a").inner_text.gsub(/\s+/, ' '), :details_url => "http://realtime.nationalrail.co.uk/virgintrains/#{details_href}" }) end end summary_rows end |