Class: Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/tree_people/scraper.rb

Instance Method Summary collapse

Instance Method Details

#get_even_eventsObject



17
18
19
# File 'lib/tree_people/scraper.rb', line 17

def get_even_events
  self.get_page.css(".views-table").css(".even")
end

#get_event_page(event_url) ⇒ Object



21
22
23
# File 'lib/tree_people/scraper.rb', line 21

def get_event_page(event_url)
  doc = Nokogiri::HTML(open("https://www.treepeople.org#{event_url}"))
end

#get_odd_eventsObject



13
14
15
# File 'lib/tree_people/scraper.rb', line 13

def get_odd_events
  self.get_page.css(".views-table").css(".odd")
end

#get_pageObject



9
10
11
# File 'lib/tree_people/scraper.rb', line 9

def get_page
  doc = Nokogiri::HTML(open("https://www.treepeople.org/calendar"))
end

#make_eventsObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/tree_people/scraper.rb', line 25

def make_events
  counter = 0
  odd_number = 1
  self.get_odd_events.each do |event|
    event = Event.new
    event.number = odd_number
    event.month = get_page.css(".views-table").css("caption").text.strip
    event.date = get_odd_events.css(".views-field-field-date-2").css(".date-display-single")[counter].text.strip
    event.name = get_odd_events.css(".views-field-title").css("a")[counter].text.strip
    event.location = get_odd_events.css(".views-field-field-neighborhood")[counter].text.strip
    event.day = get_odd_events.css(".views-field-field-day-of-week")[counter].text.strip
    event.start_time = get_odd_events.css(".date-display-start")[counter].text.strip
    event.end_time = get_odd_events.css(".date-display-end")[counter].text.strip
    event.category = get_odd_events.css(".views-field-field-event-category")[counter].text.strip
    event.url = get_odd_events.css(".views-field-title")[counter].css("a").first["href"]

    counter += 1
    odd_number += 2
  end

  ev_counter = 0
  even_number = 2
  self.get_even_events.each do |event|
    event = Event.new
    event.number = even_number
    event.month = get_page.css(".views-table").css("caption").text.strip
    event.date = get_even_events.css(".views-field-field-date-2").css(".date-display-single")[ev_counter].text.strip
    event.name = get_even_events.css(".views-field-title").css("a")[ev_counter].text.strip
    event.location = get_even_events.css(".views-field-field-neighborhood")[ev_counter].text.strip
    event.day = get_even_events.css(".views-field-field-day-of-week")[ev_counter].text.strip
    event.start_time = get_even_events.css(".date-display-start")[ev_counter].text.strip
    event.end_time = get_even_events.css(".date-display-end")[ev_counter].text.strip
    event.category = get_even_events.css(".views-field-field-event-category")[ev_counter].text.strip
    event.url = get_even_events.css(".views-field-title")[ev_counter].css("a").first["href"]

    ev_counter += 1
    even_number += 2
  end

  Event.all.each do |event|
    if event.start_time.end_with?("am")
      event.time_of_day = "Morning"
    elsif event.start_time.start_with?("12:", "1:", "2:", "3:", "4:")
      event.time_of_day = "Afternoon"
    else
      event.time_of_day = "Evening"
    end

    details_page = get_event_page(event.url)
    event.description = details_page.css(".node-event").css("p").text.strip
    if details_page.css(".node-event").text.strip.end_with?("Event capacity information is updated every hour.")
      event.spots_open = details_page.css(".node-event").text.split("There are")[-1].strip
    else
      event.spots_open = ""
    end
  end

  Event.all.sort_by!{|event| event.number}
end