Class: Timetabler

Inherits:
Object
  • Object
show all
Defined in:
lib/timetabler.rb,
lib/parsers/mzk-tychy/parser.rb

Defined Under Namespace

Classes: Line, Route, Stop, Time

Instance Method Summary collapse

Constructor Details

#initialize(parser = nil) ⇒ Timetabler

Returns a new instance of Timetabler.



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/timetabler.rb', line 5

def initialize(parser=nil)
  @lines  = []
  @routes = []
  @stops  = []
  @times  = []

  @parser = parser

  if !@parser.nil?
    use_parser @parser
  end
end

Instance Method Details

#fetch(parser = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/timetabler.rb', line 22

def fetch(parser=nil)
  if @parser.nil? and parser.nil?
    raise "Parser not specified"
  elsif @parser.nil? and !parser.nil?
    use_parser parser
  end
  
  fetch_all
end

#fetch_allObject



7
8
9
# File 'lib/parsers/mzk-tychy/parser.rb', line 7

def fetch_all
  {:lines => fetch_lines, :routes => fetch_routes, :stops => fetch_stops}
end

#fetch_linesObject



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/parsers/mzk-tychy/parser.rb', line 11

def fetch_lines
  line_list = Nokogiri::HTML(open('http://www.mzk.pl/rozklady/?co=lista_linii'))

  lines = line_list.css('ul.linie_typu a').select{|l| l.content.length <= 5}

  @lines = lines.map{ |link|
    l = Timetabler::Line.new
    l[:name] = link.content.gsub(/\*/, "")
    l[:href] = link[:href]

    l
  }
end

#fetch_routesObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/parsers/mzk-tychy/parser.rb', line 25

def fetch_routes
  if @lines.nil?
    fetch_lines
  end

  @lines.each_index do |id|
    link = @lines[id]

    line = Nokogiri::HTML(open('http://www.mzk.pl/rozklady/'+link[:href]))
    line.css("div#trasy div.trasa").each do |route|
      r = Timetabler::Route.new
      r[:line_id] = id;
      r[:name] = route.css("h4 span").first.content

      @routes << r
      @route_nodes << route
    end
  end

  return @routes
end

#fetch_stopsObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/parsers/mzk-tychy/parser.rb', line 47

def fetch_stops

  if @routes.nil? or @route_nodes.nil?
    fetch_routes
  end

  @route_nodes.each_index do |id|
    route = @route_nodes[id]

    route.css("ul li a").map{|stop|
      s = Timetabler::Stop.new
      s[:line_id] = @routes[id][:line_id]
      s[:route_id] = id
      s[:name] = stop.content.strip
      s[:href] = stop[:href]

      @stops << s
    }
  end

  return @stops
end

#parsersObject



18
19
20
# File 'lib/timetabler.rb', line 18

def parsers
  Dir.entries(File.join(File.dirname(__FILE__), "parsers")).select{|f| !["..", "."].include?(f)}
end

#subinitializeObject



2
3
4
5
# File 'lib/parsers/mzk-tychy/parser.rb', line 2

def subinitialize
  # Used for temporary route storage since we would have to load the same page twice to get the times and routes
  @route_nodes = []
end

#use_parser(parser) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/timetabler.rb', line 32

def use_parser(parser)
  if parsers.include? parser
    require File.join(File.dirname(__FILE__), "parsers", parser, "parser")
    subinitialize
  else
    raise "Unknown parser: " + parser.to_s
  end

  return self
end