class Scraper

Public Instance Methods

get_even_events() click to toggle source
# 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) click to toggle source
# 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_events() click to toggle source
# File lib/tree_people/scraper.rb, line 13
def get_odd_events
  self.get_page.css(".views-table").css(".odd")
end
get_page() click to toggle source
# File lib/tree_people/scraper.rb, line 9
def get_page
  doc = Nokogiri::HTML(open("https://www.treepeople.org/calendar"))
end
make_events() click to toggle source
# 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